Add a module_name string to the pwm_lookup struct and if specified
and pwmchip_find_by_name() does not find the pwmchip try calling
request_module with the specified name.

Signed-off-by: Hans de Goede <[email protected]>
---
 drivers/pwm/core.c  |  4 ++++
 include/linux/pwm.h | 11 +++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 0d3ef29..c418a7a 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -823,6 +823,10 @@ struct pwm_device *pwm_get(struct device *dev, const char 
*con_id)
                return ERR_PTR(-ENODEV);
 
        chip = pwmchip_find_by_name(chosen->provider);
+       if (!chip && chosen->module_name) {
+               request_module(chosen->module_name);
+               chip = pwmchip_find_by_name(chosen->provider);
+       }
        if (!chip)
                return ERR_PTR(-EPROBE_DEFER);
 
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index 2c6c511..40ab8b6 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -613,18 +613,25 @@ struct pwm_lookup {
        const char *con_id;
        unsigned int period;
        enum pwm_polarity polarity;
+       const char *module_name; /* Optional may be NULL */
 };
 
-#define PWM_LOOKUP(_provider, _index, _dev_id, _con_id, _period, _polarity) \
+#define PWM_LOOKUP_MODNAME(_provider, _index, _dev_id, _con_id, _period, \
+                          _polarity, _module_name) \
        {                                               \
                .provider = _provider,                  \
                .index = _index,                        \
                .dev_id = _dev_id,                      \
                .con_id = _con_id,                      \
                .period = _period,                      \
-               .polarity = _polarity                   \
+               .polarity = _polarity,                  \
+               .module_name = _module_name             \
        }
 
+#define PWM_LOOKUP(_provider, _index, _dev_id, _con_id, _period, _polarity) \
+       PWM_LOOKUP_MODNAME(_provider, _index, _dev_id, _con_id, _period, \
+                          _polarity, NULL)
+
 #if IS_ENABLED(CONFIG_PWM)
 void pwm_add_table(struct pwm_lookup *table, size_t num);
 void pwm_remove_table(struct pwm_lookup *table, size_t num);
-- 
2.9.3

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to