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