@@ -428,6 +428,7 @@ void device_pm_move_to_tail(struct device *dev)
device_pm_unlock();
device_links_read_unlock(idx);
}
+EXPORT_SYMBOL_GPL(device_pm_move_to_tail);
#define to_devlink(dev) container_of((dev), struct device_link, link_dev)
@@ -810,6 +810,8 @@ static int gpio_keys_probe(struct platform_device *pdev)
int i, error;
int wakeup = 0;
+ device_pm_move_to_tail(dev);
+
if (!pdata) {
pdata = gpio_keys_get_devtree_pdata(dev);
if (IS_ERR(pdata))
@@ -1082,6 +1082,7 @@ void device_link_del(struct device_link *link);
void device_link_remove(void *consumer, struct device *supplier);
void device_links_supplier_sync_state_pause(void);
void device_links_supplier_sync_state_resume(void);
+void device_pm_move_to_tail(struct device *dev);
extern __printf(3, 4)
int dev_err_probe(const struct device *dev, int err, const char *fmt, ...);
The gpio-keys device driver implements the functionality of its child nodes which do not receive dedicated drivers. This means it should inherit the dependencies of these child nodes and their effects on suspend/resume and shutdown order. This commit exposes the device_pm_move_to_tail function to allow the driver to move itself to the end of the lists upon a successful probe to allow proper sequencing when other methods are not available. Fixes: 722e5f2b1eec ("driver core: Partially revert "driver core: correct device's shutdown order"") Signed-off-by: Doug Berger <opendmb@gmail.com> --- drivers/base/core.c | 1 + drivers/input/keyboard/gpio_keys.c | 2 ++ include/linux/device.h | 1 + 3 files changed, 4 insertions(+)