1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * platform_device.h - generic, centralized driver model 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Copyright (c) 2001-2003 Patrick Mochel <mochel@osdl.org> 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * This file is released under the GPLv2 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * See Documentation/driver-model/ for more information. 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _PLATFORM_DEVICE_H_ 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _PLATFORM_DEVICE_H_ 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/device.h> 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct platform_device { 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const char * name; 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru u32 id; 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct device dev; 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru u32 num_resources; 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct resource * resource; 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define to_platform_device(x) container_of((x), struct platform_device, dev) 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_device_register(struct platform_device *); 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void platform_device_unregister(struct platform_device *); 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct bus_type platform_bus_type; 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct device platform_bus; 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct resource *platform_get_resource(struct platform_device *, unsigned int, unsigned int); 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_get_irq(struct platform_device *, unsigned int); 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct resource *platform_get_resource_byname(struct platform_device *, unsigned int, char *); 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_get_irq_byname(struct platform_device *, char *); 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_add_devices(struct platform_device **, int); 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct platform_device *platform_device_register_simple(char *, unsigned int, struct resource *, unsigned int); 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern struct platform_device *platform_device_alloc(const char *name, unsigned int id); 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_device_add_resources(struct platform_device *pdev, struct resource *res, unsigned int num); 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_device_add_data(struct platform_device *pdev, void *data, size_t size); 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_device_add(struct platform_device *pdev); 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void platform_device_del(struct platform_device *pdev); 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void platform_device_put(struct platform_device *pdev); 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct platform_driver { 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int (*probe)(struct platform_device *); 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int (*remove)(struct platform_device *); 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void (*shutdown)(struct platform_device *); 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int (*suspend)(struct platform_device *, pm_message_t state); 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int (*resume)(struct platform_device *); 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct device_driver driver; 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int platform_driver_register(struct platform_driver *); 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void platform_driver_unregister(struct platform_driver *); 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev) 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data)) 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* _PLATFORM_DEVICE_H_ */ 63