upload tizen1.0 source
[kernel/linux-2.6.36.git] / arch / arm / plat-s5p / include / plat / s5p_fimd_ext.h
1 /* linux/driver/video/samsung/s5p_fimd_ext.h
2  *
3  * Samsung SoC FIMD Extension Framework Header.
4  *
5  * InKi Dae <inki.dae@samsung.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10 */
11
12 #ifndef _S5P_FIMD_EXT_H
13 #define _S5P_FIMD_EXT_H
14
15 #include <linux/device.h>
16
17 #define fimd_ext_get_drvdata(_dev)              dev_get_drvdata(&(_dev)->dev)
18 #define fimd_ext_set_drvdata(_dev, data)        dev_set_drvdata(&(_dev)->dev, (data))
19
20 struct s5p_fimd_ext_device;
21
22 /**
23  * driver structure for fimd extension based driver.
24  *
25  * this structure should be registered by any extension driver.
26  * fimd extension driveer seeks a driver registered through name field
27  * and calls these callback functions in appropriate time.
28  */
29 struct s5p_fimd_ext_driver {
30         struct  device_driver driver;
31
32         int     (*setup)(struct s5p_fimd_ext_device *fx_dev);
33         void    (*power_on)(struct s5p_fimd_ext_device *fx_dev);
34         void    (*power_off)(struct s5p_fimd_ext_device *fx_dev);
35         int     (*start)(struct s5p_fimd_ext_device *fx_dev);
36         void    (*stop)(struct s5p_fimd_ext_device *fx_dev);
37         int     (*probe)(struct s5p_fimd_ext_device *fx_dev);
38         int     (*remove)(struct s5p_fimd_ext_device *fx_dev);
39         int     (*suspend)(struct s5p_fimd_ext_device *fx_dev);
40         int     (*resume)(struct s5p_fimd_ext_device *fx_dev);
41 };
42
43 /**
44  * device structure for fimd extension based driver.
45  *
46  * @name: platform device name.
47  * @dev: driver model representation of the device.
48  * @id: id of device registered and when device is registered
49  *      id would be counted.
50  * @num_resources: hardware resource count.
51  * @resource: a pointer to hardware resource definitions.
52  * @modalias: name of the driver to use with the device, or an
53  *      alias for that name.
54  */
55 struct s5p_fimd_ext_device {
56         char                            *name;
57         struct device                   dev;
58         int                             id;
59         unsigned int                    num_resources;
60         struct resource                 *resource;
61 };
62
63 /**
64  * register extension driver to fimd extension framework.
65  */
66 extern int s5p_fimd_ext_register(struct s5p_fimd_ext_driver *fx_drv);
67
68 /**
69  * find a driver object registered to fimd extension framework.
70  */
71 extern struct s5p_fimd_ext_device
72                 *s5p_fimd_ext_find_device(const char *name);
73
74 /**
75  * convert device driver object to fimd extension device.
76  */
77 extern struct s5p_fimd_ext_driver
78                 *to_fimd_ext_driver(struct device_driver *drv);
79
80 extern struct s5p_fimd_ext_device
81                 *to_fimd_ext_device(struct device *dev);
82
83 extern struct resource
84                 *s5p_fimd_ext_get_resource(struct s5p_fimd_ext_device *fx_dev,
85                 unsigned int type, unsigned int num);
86
87 extern int s5p_fimd_ext_get_irq(struct s5p_fimd_ext_device *fx_dev,
88                 unsigned int num);
89
90 extern int s5p_fimd_ext_device_register(struct s5p_fimd_ext_device *fx_dev);
91
92 extern int s5p_fimd_ext_driver_register(struct s5p_fimd_ext_driver *fx_drv);
93
94 #endif /* _S5P_FIMD_EXT_H */