1 /* linux/driver/video/samsung/s5p_fimd_ext.h
3 * Samsung SoC FIMD Extension Framework Header.
5 * InKi Dae <inki.dae@samsung.com>
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.
12 #ifndef _S5P_FIMD_EXT_H
13 #define _S5P_FIMD_EXT_H
15 #include <linux/device.h>
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))
20 struct s5p_fimd_ext_device;
23 * driver structure for fimd extension based driver.
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.
29 struct s5p_fimd_ext_driver {
30 struct device_driver driver;
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);
44 * device structure for fimd extension based driver.
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.
55 struct s5p_fimd_ext_device {
59 unsigned int num_resources;
60 struct resource *resource;
64 * register extension driver to fimd extension framework.
66 extern int s5p_fimd_ext_register(struct s5p_fimd_ext_driver *fx_drv);
69 * find a driver object registered to fimd extension framework.
71 extern struct s5p_fimd_ext_device
72 *s5p_fimd_ext_find_device(const char *name);
75 * convert device driver object to fimd extension device.
77 extern struct s5p_fimd_ext_driver
78 *to_fimd_ext_driver(struct device_driver *drv);
80 extern struct s5p_fimd_ext_device
81 *to_fimd_ext_device(struct device *dev);
83 extern struct resource
84 *s5p_fimd_ext_get_resource(struct s5p_fimd_ext_device *fx_dev,
85 unsigned int type, unsigned int num);
87 extern int s5p_fimd_ext_get_irq(struct s5p_fimd_ext_device *fx_dev,
90 extern int s5p_fimd_ext_device_register(struct s5p_fimd_ext_device *fx_dev);
92 extern int s5p_fimd_ext_driver_register(struct s5p_fimd_ext_driver *fx_drv);
94 #endif /* _S5P_FIMD_EXT_H */