ARM: OMAP: Remove broken LCD driver for SX1

Recently the omap McBSP code was cleaned up to get rid of
direct McBSP register tinkering by the drivers. Looks like
lcd_sx1.c never got converted, and now it breaks builds.

It seems the lcd_sx1.c driver is attempting SPI mode, but
doing it in a different way compared to omap_mcbsp_set_spi_mode().

Remove the broken driver, patches welcome to add it back when
done properly by patching both mcbsp.c and lcd_sx1.c.

Cc: Vovan888@gmail.com
Cc: linux-fbdev-devel@lists.sourceforge.net
Signed-off-by: Tony Lindgren <tony@atomide.com>

-328
-1
drivers/video/omap/Makefile
··· 23 23 objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_INNOVATOR) += lcd_inn1610.o 24 24 objs-$(CONFIG_ARCH_OMAP15XX)$(CONFIG_MACH_OMAP_INNOVATOR) += lcd_inn1510.o 25 25 objs-y$(CONFIG_MACH_OMAP_OSK) += lcd_osk.o 26 - objs-y$(CONFIG_MACH_SX1) += lcd_sx1.o 27 26 28 27 omapfb-objs := $(objs-yy) 29 28
-327
drivers/video/omap/lcd_sx1.c
··· 1 - /* 2 - * LCD panel support for the Siemens SX1 mobile phone 3 - * 4 - * Current version : Vovan888@gmail.com, great help from FCA00000 5 - * 6 - * This program is free software; you can redistribute it and/or modify it 7 - * under the terms of the GNU General Public License as published by the 8 - * Free Software Foundation; either version 2 of the License, or (at your 9 - * option) any later version. 10 - * 11 - * This program is distributed in the hope that it will be useful, but 12 - * WITHOUT ANY WARRANTY; without even the implied warranty of 13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 - * General Public License for more details. 15 - * 16 - * You should have received a copy of the GNU General Public License along 17 - * with this program; if not, write to the Free Software Foundation, Inc., 18 - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 - */ 20 - 21 - #include <linux/module.h> 22 - #include <linux/platform_device.h> 23 - #include <linux/delay.h> 24 - #include <linux/io.h> 25 - 26 - #include <mach/gpio.h> 27 - #include <mach/omapfb.h> 28 - #include <mach/mcbsp.h> 29 - #include <mach/mux.h> 30 - 31 - /* 32 - * OMAP310 GPIO registers 33 - */ 34 - #define GPIO_DATA_INPUT 0xfffce000 35 - #define GPIO_DATA_OUTPUT 0xfffce004 36 - #define GPIO_DIR_CONTROL 0xfffce008 37 - #define GPIO_INT_CONTROL 0xfffce00c 38 - #define GPIO_INT_MASK 0xfffce010 39 - #define GPIO_INT_STATUS 0xfffce014 40 - #define GPIO_PIN_CONTROL 0xfffce018 41 - 42 - 43 - #define A_LCD_SSC_RD 3 44 - #define A_LCD_SSC_SD 7 45 - #define _A_LCD_RESET 9 46 - #define _A_LCD_SSC_CS 12 47 - #define _A_LCD_SSC_A0 13 48 - 49 - #define DSP_REG 0xE1017024 50 - 51 - const unsigned char INIT_1[12] = { 52 - 0x1C, 0x02, 0x88, 0x00, 0x1E, 0xE0, 0x00, 0xDC, 0x00, 0x02, 0x00 53 - }; 54 - 55 - const unsigned char INIT_2[127] = { 56 - 0x15, 0x00, 0x29, 0x00, 0x3E, 0x00, 0x51, 0x00, 57 - 0x65, 0x00, 0x7A, 0x00, 0x8D, 0x00, 0xA1, 0x00, 58 - 0xB6, 0x00, 0xC7, 0x00, 0xD8, 0x00, 0xEB, 0x00, 59 - 0xFB, 0x00, 0x0B, 0x01, 0x1B, 0x01, 0x27, 0x01, 60 - 0x34, 0x01, 0x41, 0x01, 0x4C, 0x01, 0x55, 0x01, 61 - 0x5F, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 62 - 0x7E, 0x01, 0x86, 0x01, 0x8C, 0x01, 0x94, 0x01, 63 - 0x9B, 0x01, 0xA1, 0x01, 0xA4, 0x01, 0xA9, 0x01, 64 - 0xAD, 0x01, 0xB2, 0x01, 0xB7, 0x01, 0xBC, 0x01, 65 - 0xC0, 0x01, 0xC4, 0x01, 0xC8, 0x01, 0xCB, 0x01, 66 - 0xCF, 0x01, 0xD2, 0x01, 0xD5, 0x01, 0xD8, 0x01, 67 - 0xDB, 0x01, 0xE0, 0x01, 0xE3, 0x01, 0xE6, 0x01, 68 - 0xE8, 0x01, 0xEB, 0x01, 0xEE, 0x01, 0xF1, 0x01, 69 - 0xF3, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFC, 0x01, 70 - 0x00, 0x02, 0x03, 0x02, 0x07, 0x02, 0x09, 0x02, 71 - 0x0E, 0x02, 0x13, 0x02, 0x1C, 0x02, 0x00 72 - }; 73 - 74 - const unsigned char INIT_3[15] = { 75 - 0x14, 0x26, 0x33, 0x3D, 0x45, 0x4D, 0x53, 0x59, 76 - 0x5E, 0x63, 0x67, 0x6D, 0x71, 0x78, 0xFF 77 - }; 78 - 79 - static void epson_sendbyte(int flag, unsigned char byte) 80 - { 81 - int i, shifter = 0x80; 82 - 83 - if (!flag) 84 - gpio_set_value(_A_LCD_SSC_A0, 0); 85 - mdelay(2); 86 - gpio_set_value(A_LCD_SSC_RD, 1); 87 - 88 - gpio_set_value(A_LCD_SSC_SD, flag); 89 - 90 - OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200); 91 - OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202); 92 - for (i = 0; i < 8; i++) { 93 - OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200); 94 - gpio_set_value(A_LCD_SSC_SD, shifter & byte); 95 - OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202); 96 - shifter >>= 1; 97 - } 98 - gpio_set_value(_A_LCD_SSC_A0, 1); 99 - } 100 - 101 - static void init_system(void) 102 - { 103 - omap_mcbsp_request(OMAP_MCBSP3); 104 - omap_mcbsp_stop(OMAP_MCBSP3); 105 - } 106 - 107 - static void setup_GPIO(void) 108 - { 109 - /* new wave */ 110 - gpio_request(A_LCD_SSC_RD, "lcd_ssc_rd"); 111 - gpio_request(A_LCD_SSC_SD, "lcd_ssc_sd"); 112 - gpio_request(_A_LCD_RESET, "lcd_reset"); 113 - gpio_request(_A_LCD_SSC_CS, "lcd_ssc_cs"); 114 - gpio_request(_A_LCD_SSC_A0, "lcd_ssc_a0"); 115 - 116 - /* set GPIOs to output, with initial data */ 117 - gpio_direction_output(A_LCD_SSC_RD, 1); 118 - gpio_direction_output(A_LCD_SSC_SD, 0); 119 - gpio_direction_output(_A_LCD_RESET, 0); 120 - gpio_direction_output(_A_LCD_SSC_CS, 1); 121 - gpio_direction_output(_A_LCD_SSC_A0, 1); 122 - } 123 - 124 - static void display_init(void) 125 - { 126 - int i; 127 - 128 - omap_cfg_reg(MCBSP3_CLKX); 129 - 130 - mdelay(2); 131 - setup_GPIO(); 132 - mdelay(2); 133 - 134 - /* reset LCD */ 135 - gpio_set_value(A_LCD_SSC_SD, 1); 136 - epson_sendbyte(0, 0x25); 137 - 138 - gpio_set_value(_A_LCD_RESET, 0); 139 - mdelay(10); 140 - gpio_set_value(_A_LCD_RESET, 1); 141 - 142 - gpio_set_value(_A_LCD_SSC_CS, 1); 143 - mdelay(2); 144 - gpio_set_value(_A_LCD_SSC_CS, 0); 145 - 146 - /* init LCD, phase 1 */ 147 - epson_sendbyte(0, 0xCA); 148 - for (i = 0; i < 10; i++) 149 - epson_sendbyte(1, INIT_1[i]); 150 - gpio_set_value(_A_LCD_SSC_CS, 1); 151 - gpio_set_value(_A_LCD_SSC_CS, 0); 152 - 153 - /* init LCD phase 2 */ 154 - epson_sendbyte(0, 0xCB); 155 - for (i = 0; i < 125; i++) 156 - epson_sendbyte(1, INIT_2[i]); 157 - gpio_set_value(_A_LCD_SSC_CS, 1); 158 - gpio_set_value(_A_LCD_SSC_CS, 0); 159 - 160 - /* init LCD phase 2a */ 161 - epson_sendbyte(0, 0xCC); 162 - for (i = 0; i < 14; i++) 163 - epson_sendbyte(1, INIT_3[i]); 164 - gpio_set_value(_A_LCD_SSC_CS, 1); 165 - gpio_set_value(_A_LCD_SSC_CS, 0); 166 - 167 - /* init LCD phase 3 */ 168 - epson_sendbyte(0, 0xBC); 169 - epson_sendbyte(1, 0x08); 170 - gpio_set_value(_A_LCD_SSC_CS, 1); 171 - gpio_set_value(_A_LCD_SSC_CS, 0); 172 - 173 - /* init LCD phase 4 */ 174 - epson_sendbyte(0, 0x07); 175 - epson_sendbyte(1, 0x05); 176 - gpio_set_value(_A_LCD_SSC_CS, 1); 177 - gpio_set_value(_A_LCD_SSC_CS, 0); 178 - 179 - /* init LCD phase 5 */ 180 - epson_sendbyte(0, 0x94); 181 - gpio_set_value(_A_LCD_SSC_CS, 1); 182 - gpio_set_value(_A_LCD_SSC_CS, 0); 183 - 184 - /* init LCD phase 6 */ 185 - epson_sendbyte(0, 0xC6); 186 - epson_sendbyte(1, 0x80); 187 - gpio_set_value(_A_LCD_SSC_CS, 1); 188 - mdelay(100); /* used to be 1000 */ 189 - gpio_set_value(_A_LCD_SSC_CS, 0); 190 - 191 - /* init LCD phase 7 */ 192 - epson_sendbyte(0, 0x16); 193 - epson_sendbyte(1, 0x02); 194 - epson_sendbyte(1, 0x00); 195 - epson_sendbyte(1, 0xB1); 196 - epson_sendbyte(1, 0x00); 197 - gpio_set_value(_A_LCD_SSC_CS, 1); 198 - gpio_set_value(_A_LCD_SSC_CS, 0); 199 - 200 - /* init LCD phase 8 */ 201 - epson_sendbyte(0, 0x76); 202 - epson_sendbyte(1, 0x00); 203 - epson_sendbyte(1, 0x00); 204 - epson_sendbyte(1, 0xDB); 205 - epson_sendbyte(1, 0x00); 206 - gpio_set_value(_A_LCD_SSC_CS, 1); 207 - gpio_set_value(_A_LCD_SSC_CS, 0); 208 - 209 - /* init LCD phase 9 */ 210 - epson_sendbyte(0, 0xAF); 211 - gpio_set_value(_A_LCD_SSC_CS, 1); 212 - } 213 - 214 - static int sx1_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) 215 - { 216 - return 0; 217 - } 218 - 219 - static void sx1_panel_cleanup(struct lcd_panel *panel) 220 - { 221 - } 222 - 223 - static void sx1_panel_disable(struct lcd_panel *panel) 224 - { 225 - printk(KERN_INFO "SX1: LCD panel disable\n"); 226 - sx1_setmmipower(0); 227 - gpio_set_value(_A_LCD_SSC_CS, 1); 228 - 229 - epson_sendbyte(0, 0x25); 230 - gpio_set_value(_A_LCD_SSC_CS, 0); 231 - 232 - epson_sendbyte(0, 0xAE); 233 - gpio_set_value(_A_LCD_SSC_CS, 1); 234 - mdelay(100); 235 - gpio_set_value(_A_LCD_SSC_CS, 0); 236 - 237 - epson_sendbyte(0, 0x95); 238 - gpio_set_value(_A_LCD_SSC_CS, 1); 239 - } 240 - 241 - static int sx1_panel_enable(struct lcd_panel *panel) 242 - { 243 - printk(KERN_INFO "lcd_sx1: LCD panel enable\n"); 244 - init_system(); 245 - display_init(); 246 - 247 - sx1_setmmipower(1); 248 - sx1_setbacklight(0x18); 249 - sx1_setkeylight (0x06); 250 - return 0; 251 - } 252 - 253 - 254 - static unsigned long sx1_panel_get_caps(struct lcd_panel *panel) 255 - { 256 - return 0; 257 - } 258 - 259 - struct lcd_panel sx1_panel = { 260 - .name = "sx1", 261 - .config = OMAP_LCDC_PANEL_TFT | OMAP_LCDC_INV_VSYNC | 262 - OMAP_LCDC_INV_HSYNC | OMAP_LCDC_INV_PIX_CLOCK | 263 - OMAP_LCDC_INV_OUTPUT_EN, 264 - 265 - .x_res = 176, 266 - .y_res = 220, 267 - .data_lines = 16, 268 - .bpp = 16, 269 - .hsw = 5, 270 - .hfp = 5, 271 - .hbp = 5, 272 - .vsw = 2, 273 - .vfp = 1, 274 - .vbp = 1, 275 - .pixel_clock = 1500, 276 - 277 - .init = sx1_panel_init, 278 - .cleanup = sx1_panel_cleanup, 279 - .enable = sx1_panel_enable, 280 - .disable = sx1_panel_disable, 281 - .get_caps = sx1_panel_get_caps, 282 - }; 283 - 284 - static int sx1_panel_probe(struct platform_device *pdev) 285 - { 286 - omapfb_register_panel(&sx1_panel); 287 - return 0; 288 - } 289 - 290 - static int sx1_panel_remove(struct platform_device *pdev) 291 - { 292 - return 0; 293 - } 294 - 295 - static int sx1_panel_suspend(struct platform_device *pdev, pm_message_t mesg) 296 - { 297 - return 0; 298 - } 299 - 300 - static int sx1_panel_resume(struct platform_device *pdev) 301 - { 302 - return 0; 303 - } 304 - 305 - struct platform_driver sx1_panel_driver = { 306 - .probe = sx1_panel_probe, 307 - .remove = sx1_panel_remove, 308 - .suspend = sx1_panel_suspend, 309 - .resume = sx1_panel_resume, 310 - .driver = { 311 - .name = "lcd_sx1", 312 - .owner = THIS_MODULE, 313 - }, 314 - }; 315 - 316 - static int sx1_panel_drv_init(void) 317 - { 318 - return platform_driver_register(&sx1_panel_driver); 319 - } 320 - 321 - static void sx1_panel_drv_cleanup(void) 322 - { 323 - platform_driver_unregister(&sx1_panel_driver); 324 - } 325 - 326 - module_init(sx1_panel_drv_init); 327 - module_exit(sx1_panel_drv_cleanup);