1 /* 2 * Linux driver model AC97 bus interface 3 * 4 * Author: Nicolas Pitre 5 * Created: Jan 14, 2005 6 * Copyright: (C) MontaVista Software Inc. 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 */ 13 14 #include <linux/module.h> 15 #include <linux/init.h> 16 #include <linux/device.h> 17 #include <linux/string.h> 18 #include <sound/ac97_codec.h> 19 20 /* 21 * Let drivers decide whether they want to support given codec from their 22 * probe method. Drivers have direct access to the struct snd_ac97 23 * structure and may decide based on the id field amongst other things. 24 */ 25 static int ac97_bus_match(struct device *dev, struct device_driver *drv) 26 { 27 return 1; 28 } 29 30 #ifdef CONFIG_PM 31 static int ac97_bus_suspend(struct device *dev, pm_message_t state) 32 { 33 int ret = 0; 34 35 if (dev->driver && dev->driver->suspend) 36 ret = dev->driver->suspend(dev, state); 37 38 return ret; 39 } 40 41 static int ac97_bus_resume(struct device *dev) 42 { 43 int ret = 0; 44 45 if (dev->driver && dev->driver->resume) 46 ret = dev->driver->resume(dev); 47 48 return ret; 49 } 50 #endif /* CONFIG_PM */ 51 52 struct bus_type ac97_bus_type = { 53 .name = "ac97", 54 .match = ac97_bus_match, 55 #ifdef CONFIG_PM 56 .suspend = ac97_bus_suspend, 57 .resume = ac97_bus_resume, 58 #endif /* CONFIG_PM */ 59 }; 60 61 static int __init ac97_bus_init(void) 62 { 63 return bus_register(&ac97_bus_type); 64 } 65 66 subsys_initcall(ac97_bus_init); 67 68 static void __exit ac97_bus_exit(void) 69 { 70 bus_unregister(&ac97_bus_type); 71 } 72 73 module_exit(ac97_bus_exit); 74 75 EXPORT_SYMBOL(ac97_bus_type); 76 77 MODULE_LICENSE("GPL"); 78