Commit | Line | Data |
---|---|---|
9d200153 SM |
1 | /* Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved. |
2 | * | |
3 | * This program is free software; you can redistribute it and/or modify | |
4 | * it under the terms of the GNU General Public License version 2 and | |
5 | * only version 2 as published by the Free Software Foundation. | |
6 | * | |
7 | * This program is distributed in the hope that it will be useful, | |
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
10 | * GNU General Public License for more details. | |
11 | * | |
12 | * You should have received a copy of the GNU General Public License | |
13 | * along with this program; if not, write to the Free Software | |
14 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | |
15 | * 02110-1301, USA. | |
16 | */ | |
17 | ||
18 | #include <linux/module.h> | |
19 | #include <linux/moduleparam.h> | |
20 | #include <linux/kernel.h> | |
21 | #include <linux/slab.h> | |
22 | #include <linux/delay.h> | |
23 | #include <linux/mm.h> | |
24 | #include <linux/fb.h> | |
25 | #include <linux/init.h> | |
26 | #include <linux/ioport.h> | |
27 | #include <linux/device.h> | |
28 | #include <linux/dma-mapping.h> | |
29 | #include <linux/uaccess.h> | |
30 | #include <linux/workqueue.h> | |
31 | #include <linux/string.h> | |
32 | #include <linux/version.h> | |
33 | #include <linux/proc_fs.h> | |
34 | #include <linux/vmalloc.h> | |
35 | #include <linux/debugfs.h> | |
36 | ||
37 | #include "msm_fb_panel.h" | |
38 | ||
39 | int panel_next_on(struct platform_device *pdev) | |
40 | { | |
41 | int ret = 0; | |
42 | struct msm_fb_panel_data *pdata; | |
43 | struct msm_fb_panel_data *next_pdata; | |
44 | struct platform_device *next_pdev; | |
45 | ||
46 | pdata = (struct msm_fb_panel_data *)pdev->dev.platform_data; | |
47 | ||
48 | if (pdata) { | |
49 | next_pdev = pdata->next; | |
50 | if (next_pdev) { | |
51 | next_pdata = | |
52 | (struct msm_fb_panel_data *)next_pdev->dev. | |
53 | platform_data; | |
54 | if ((next_pdata) && (next_pdata->on)) | |
55 | ret = next_pdata->on(next_pdev); | |
56 | } | |
57 | } | |
58 | ||
59 | return ret; | |
60 | } | |
61 | ||
62 | int panel_next_off(struct platform_device *pdev) | |
63 | { | |
64 | int ret = 0; | |
65 | struct msm_fb_panel_data *pdata; | |
66 | struct msm_fb_panel_data *next_pdata; | |
67 | struct platform_device *next_pdev; | |
68 | ||
69 | pdata = (struct msm_fb_panel_data *)pdev->dev.platform_data; | |
70 | ||
71 | if (pdata) { | |
72 | next_pdev = pdata->next; | |
73 | if (next_pdev) { | |
74 | next_pdata = | |
75 | (struct msm_fb_panel_data *)next_pdev->dev. | |
76 | platform_data; | |
77 | if ((next_pdata) && (next_pdata->on)) | |
78 | ret = next_pdata->off(next_pdev); | |
79 | } | |
80 | } | |
81 | ||
82 | return ret; | |
83 | } | |
84 | ||
85 | struct platform_device *msm_fb_device_alloc(struct msm_fb_panel_data *pdata, | |
86 | u32 type, u32 id) | |
87 | { | |
88 | struct platform_device *this_dev = NULL; | |
89 | char dev_name[16]; | |
90 | ||
91 | switch (type) { | |
92 | case EBI2_PANEL: | |
93 | snprintf(dev_name, sizeof(dev_name), "ebi2_lcd"); | |
94 | break; | |
95 | ||
96 | case MDDI_PANEL: | |
97 | snprintf(dev_name, sizeof(dev_name), "mddi"); | |
98 | break; | |
99 | ||
100 | case EXT_MDDI_PANEL: | |
101 | snprintf(dev_name, sizeof(dev_name), "mddi_ext"); | |
102 | break; | |
103 | ||
104 | case TV_PANEL: | |
105 | snprintf(dev_name, sizeof(dev_name), "tvenc"); | |
106 | break; | |
107 | ||
108 | case HDMI_PANEL: | |
109 | case LCDC_PANEL: | |
110 | snprintf(dev_name, sizeof(dev_name), "lcdc"); | |
111 | break; | |
112 | ||
113 | default: | |
114 | return NULL; | |
115 | } | |
116 | ||
117 | if (pdata != NULL) | |
118 | pdata->next = NULL; | |
119 | else | |
120 | return NULL; | |
121 | ||
122 | this_dev = | |
123 | platform_device_alloc(dev_name, ((u32) type << 16) | (u32) id); | |
124 | ||
125 | if (this_dev) { | |
126 | if (platform_device_add_data | |
127 | (this_dev, pdata, sizeof(struct msm_fb_panel_data))) { | |
128 | printk | |
129 | ("msm_fb_device_alloc: platform_device_add_data failed!\n"); | |
130 | platform_device_put(this_dev); | |
131 | return NULL; | |
132 | } | |
133 | } | |
134 | ||
135 | return this_dev; | |
136 | } |