8ade775d19131352c7a4815edf955e2559b0b6f8
[firefly-linux-kernel-4.4.55.git] / include / linux / bp-auto.h
1 #ifndef _BP_AUTO_H\r
2 #define _BP_AUTO_H\r
3 #include <linux/miscdevice.h>\r
4 #include <linux/wakelock.h>\r
5 \r
6 struct bp_private_data;\r
7 #define BP_DEV_NAME     "voice_modem"\r
8 #define BP_UNKNOW_DATA  -1\r
9 #define BP_OFF          0\r
10 #define BP_ON           1\r
11 #define BP_SUSPEND      2\r
12 #define BP_WAKE         3\r
13 \r
14 #define BP_IOCTL_BASE 0x1a\r
15 \r
16 #define BP_IOCTL_RESET          _IOW(BP_IOCTL_BASE, 0x01, int)\r
17 #define BP_IOCTL_POWOFF         _IOW(BP_IOCTL_BASE, 0x02, int)\r
18 #define BP_IOCTL_POWON          _IOW(BP_IOCTL_BASE, 0x03, int)\r
19 \r
20 #define BP_IOCTL_WRITE_STATUS   _IOW(BP_IOCTL_BASE, 0x04, int)\r
21 #define BP_IOCTL_GET_STATUS     _IOR(BP_IOCTL_BASE, 0x05, int)\r
22 #define BP_IOCTL_SET_PVID       _IOW(BP_IOCTL_BASE, 0x06, int)\r
23 #define BP_IOCTL_GET_BPID       _IOR(BP_IOCTL_BASE, 0x07, int)\r
24 #define BP_IOCTL_GET_IMEI       _IOR(BP_IOCTL_BASE, 0x08, int)\r
25 \r
26 enum bp_id{\r
27         BP_ID_INVALID = 0,//no bp\r
28                 \r
29         BP_ID_MT6229,   //1 USI MT6229 WCDMA\r
30         BP_ID_MU509,    //2 huawei MU509 WCDMA\r
31         BP_ID_MI700,    //3 thinkwill MI700 WCDMA\r
32         BP_ID_MW100,    //4 thinkwill MW100 WCDMA\r
33         BP_ID_TD8801,   //5 spreadtrum SC8803 TD-SCDMA\r
34         BP_ID_SC6610,   //6 spreadtrum SC6610 GSM\r
35         BP_ID_M50,      //7 spreadtrum RDA GSM\r
36         BP_ID_MT6250,   //8 ZINN M50  EDGE\r
37         BP_ID_C66A,     //9 ZHIGUAN C66A GSM\r
38         BP_ID_SEW290,   //10 SCV SEW290 WCDMA\r
39         BP_ID_U5501,    //11 LONGSUNG U5501 WCDMA\r
40         BP_ID_U7501,    //12 LONGSUNG U7501 WCDMA/HSPA+\r
41         BP_ID_AW706,    //13 ANICARE AW706 EDGE\r
42         BP_ID_NUM,  \r
43 };\r
44 \r
45 \r
46 \r
47 enum bp_bus_type{\r
48         BP_BUS_TYPE_INVALID = 0,\r
49                 \r
50         BP_BUS_TYPE_UART,\r
51         BP_BUS_TYPE_SPI,\r
52         BP_BUS_TYPE_USB,\r
53         BP_BUS_TYPE_SDIO,\r
54         BP_BUS_TYPE_USB_UART,\r
55         BP_BUS_TYPE_SPI_UART,\r
56         BP_BUS_TYPE_SDIO_UART,\r
57         \r
58         BP_BUS_TYPE_NUM_ID,\r
59 };\r
60 \r
61 struct bp_platform_data {       \r
62         int board_id;\r
63         int bp_id;\r
64         int (*init_platform_hw)(void);          \r
65         int (*exit_platform_hw)(void);  \r
66         int (*get_bp_id)(void);\r
67         int bp_power;\r
68         int bp_en;\r
69         int bp_reset;\r
70         int ap_ready;\r
71         int bp_ready;\r
72         int ap_wakeup_bp;\r
73         int bp_wakeup_ap;\r
74         int bp_assert;\r
75         int bp_usb_en;\r
76         int bp_uart_en;\r
77         \r
78         int gpio_valid;\r
79 };\r
80 \r
81 \r
82 struct bp_operate {\r
83         char *name;     //bp name can be null\r
84         int bp_id;      //bp id the value must be one of enum bp_id\r
85         int bp_bus;     // bp bus the value must be one of enum bp_bus_type\r
86         \r
87         int bp_pid;     // the pid of usb device if used usb else the value is BP_UNKNOW_DATA\r
88         int bp_vid;     // the vid of usb device if used usb else the value is BP_UNKNOW_DATA\r
89         int bp_power;//bp power if used GPIO value else the  is BP_UNKNOW_DATA\r
90         int bp_en;//bp power key if used GPIO value else the  is BP_UNKNOW_DATA\r
91         int bp_reset;//bo reset if used GPIO value else the  is BP_UNKNOW_DATA\r
92         int ap_ready;//bp ready  if used GPIO value else the  is BP_UNKNOW_DATA\r
93         int bp_ready;// bp ready  if used GPIO value else the  is BP_UNKNOW_DATA\r
94         int ap_wakeup_bp; //ap wakeup bp  if used GPIO value else the  is BP_UNKNOW_DATA\r
95         int bp_wakeup_ap;// bp wakeup ap  if used GPIO value else the  is BP_UNKNOW_DATA\r
96         int bp_assert;\r
97         int bp_usb_en;//not used\r
98         int bp_uart_en;//not used\r
99         int trig;//if 1:used board gpio define else used bp driver\r
100         int irq;\r
101 \r
102         int (*active)(struct bp_private_data *bp, int enable);\r
103         int (*init)(struct bp_private_data *bp);\r
104         int (*reset)(struct bp_private_data *bp);\r
105         int (*ap_wake_bp)(struct bp_private_data *bp, int wake);\r
106         int (*bp_wake_ap)(struct bp_private_data *bp);\r
107         int (*shutdown)(struct bp_private_data *bp);\r
108         int (*read_status)(struct bp_private_data *bp);\r
109         int (*write_status)(struct bp_private_data *bp);\r
110         int (*suspend)(struct bp_private_data *bp);\r
111         int (*resume)(struct bp_private_data *bp);              \r
112         char *misc_name;\r
113         struct miscdevice *private_miscdev;\r
114         \r
115 };\r
116 \r
117 \r
118 struct bp_private_data {        \r
119         struct device *dev;\r
120         int status;\r
121         int suspend_status;\r
122         struct wake_lock bp_wakelock;\r
123         struct delayed_work wakeup_work;        /*report second event*/\r
124         struct bp_platform_data *pdata;\r
125         struct bp_operate *ops; \r
126         struct file_operations fops;\r
127         struct miscdevice miscdev;\r
128         struct file_operations id_fops;\r
129         struct miscdevice id_miscdev;\r
130 \r
131 };\r
132 \r
133 extern int bp_register_slave(struct bp_private_data *bp,\r
134                         struct bp_platform_data *slave_pdata,\r
135                         struct bp_operate *(*get_bp_ops)(void));\r
136 \r
137 \r
138 extern int bp_unregister_slave(struct bp_private_data *bp,\r
139                         struct bp_platform_data *slave_pdata,\r
140                         struct bp_operate *(*get_bp_ops)(void));\r
141 \r
142 \r
143 #endif\r
144 \r