1 /* 2 * Simple Power-Managed Bus Driver 3 * 4 * Copyright (C) 2014-2015 Glider bvba 5 * 6 * This file is subject to the terms and conditions of the GNU General Public 7 * License. See the file "COPYING" in the main directory of this archive 8 * for more details. 9 */ 10 11 #include <linux/module.h> 12 #include <linux/of_platform.h> 13 #include <linux/platform_device.h> 14 #include <linux/pm_runtime.h> 15 16 17 static int simple_pm_bus_probe(struct platform_device *pdev) 18 { 19 struct device_node *np = pdev->dev.of_node; 20 21 dev_dbg(&pdev->dev, "%s\n", __func__); 22 23 pm_runtime_enable(&pdev->dev); 24 25 if (np) 26 of_platform_populate(np, NULL, NULL, &pdev->dev); 27 28 return 0; 29 } 30 31 static int simple_pm_bus_remove(struct platform_device *pdev) 32 { 33 dev_dbg(&pdev->dev, "%s\n", __func__); 34 35 pm_runtime_disable(&pdev->dev); 36 return 0; 37 } 38 39 static const struct of_device_id simple_pm_bus_of_match[] = { 40 { .compatible = "simple-pm-bus", }, 41 { /* sentinel */ } 42 }; 43 MODULE_DEVICE_TABLE(of, simple_pm_bus_of_match); 44 45 static struct platform_driver simple_pm_bus_driver = { 46 .probe = simple_pm_bus_probe, 47 .remove = simple_pm_bus_remove, 48 .driver = { 49 .name = "simple-pm-bus", 50 .of_match_table = simple_pm_bus_of_match, 51 }, 52 }; 53 54 module_platform_driver(simple_pm_bus_driver); 55 56 MODULE_DESCRIPTION("Simple Power-Managed Bus Driver"); 57 MODULE_AUTHOR("Geert Uytterhoeven <geert+renesas@glider.be>"); 58 MODULE_LICENSE("GPL v2"); 59