> On Aug 10, 2023, at 1:12 AM, Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> wrote: > > On 09/08/2023 20:02, James Ogletree wrote: >>>> + if (cs40l50->vibe_workqueue) { >>>> + flush_workqueue(cs40l50->vibe_workqueue); >>>> + destroy_workqueue(cs40l50->vibe_workqueue); >>>> + } >>>> + >>>> + gpiod_set_value_cansleep(cs40l50->reset_gpio, 1); >>>> + regulator_bulk_disable(ARRAY_SIZE(cs40l50_supplies), cs40l50_supplies); >>>> + >>>> + return 0; >>>> +} >>>> +EXPORT_SYMBOL_GPL(cs40l50_remove); >>>> + >>>> +MODULE_DESCRIPTION("CS40L50 Advanced Haptic Driver"); >>>> +MODULE_AUTHOR("James Ogletree, Cirrus Logic Inc. <james.ogletree@xxxxxxxxxx>"); >>>> +MODULE_LICENSE("GPL"); >>> >>> I don't think this is a module. >> >> It can be compiled as a module with CONFIG_INPUT_CS40L50=m. However, there is a >> typo in the Kconfig entry description: the module will be called “cs40l50” not “cs40l50-core”. >> That will be fixed. > > Really, *this* unit file can be compiled as module? Where is the > module_xxx_driver() then? > As I understand it, the “module_XXX_driver()” has nothing to do with whether or not the file is built as a module, rather it just provides code to attach the driver to a bus. But this is a bus-agnostic, separate module (not a driver in itself) that provides implementation to cs40l26-i2c or cs40l26-spi drivers, which do contain that macro as they should. This doesn’t appear to be an uncommon pattern. Regards, James