|
Prev: ata2: EH in ADMA mode, notifier 0x0 notifier_error 0x0 gen_ctl
Next: [PATCH] Fix unprivileged user builds of initramfs
From: Pavel Machek on 18 Nov 2006 13:20 From: Vladimir Ananiev <vovan888(a)gmail.com> Framebuffer support for Siemens SX1; this is second big patch. (Third one will be mixer/sound support). Support is simple / pretty minimal, but seems to work okay (and is somehow important for a cell phone :-). Signed-off-by: Pavel Machek <pavel(a)suse.cz> diff --git a/drivers/video/omap/lcd_sx1.c b/drivers/video/omap/lcd_sx1.c new file mode 100644 index 0000000..d148573 --- /dev/null +++ b/drivers/video/omap/lcd_sx1.c @@ -0,0 +1,331 @@ +/* + * File: drivers/video/omap/lcd_sx1.c + * + * LCD panel support for the Siemens SX1 mobile phone + * + * Current version : Vovan888 at gmail com, great help from FCA00000 + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/delay.h> +#include <asm/io.h> +#include <asm/arch/gpio.h> +#include <asm/arch/omapfb.h> +#include <asm/arch/mcbsp.h> +#include <asm/arch/mux.h> + +/* + * OMAP310 GPIO registers + */ +#define GPIO_DATA_INPUT 0xfffce000 +#define GPIO_DATA_OUTPUT 0xfffce004 +#define GPIO_DIR_CONTROL 0xfffce008 +#define GPIO_INT_CONTROL 0xfffce00c +#define GPIO_INT_MASK 0xfffce010 +#define GPIO_INT_STATUS 0xfffce014 +#define GPIO_PIN_CONTROL 0xfffce018 + + +#define A_LCD_SSC_RD 3 +#define A_LCD_SSC_SD 7 +#define _A_LCD_RESET 9 +#define _A_LCD_SSC_CS 12 +#define _A_LCD_SSC_A0 13 + +#define DSP_REG 0xE1017024 + +const unsigned char INIT_1[12] = { + 0x1C, 0x02, 0x88, 0x00, 0x1E, 0xE0, 0x00, 0xDC, 0x00, 0x02, 0x00 +}; + +const unsigned char INIT_2[127] = { + 0x15, 0x00, 0x29, 0x00, 0x3E, 0x00, 0x51, 0x00, 0x65, 0x00, 0x7A, 0x00, 0x8D, 0x00, 0xA1, 0x00, + 0xB6, 0x00, 0xC7, 0x00, 0xD8, 0x00, 0xEB, 0x00, 0xFB, 0x00, 0x0B, 0x01, 0x1B, 0x01, 0x27, 0x01, + 0x34, 0x01, 0x41, 0x01, 0x4C, 0x01, 0x55, 0x01, 0x5F, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, + 0x7E, 0x01, 0x86, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9B, 0x01, 0xA1, 0x01, 0xA4, 0x01, 0xA9, 0x01, + 0xAD, 0x01, 0xB2, 0x01, 0xB7, 0x01, 0xBC, 0x01, 0xC0, 0x01, 0xC4, 0x01, 0xC8, 0x01, 0xCB, 0x01, + 0xCF, 0x01, 0xD2, 0x01, 0xD5, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xE0, 0x01, 0xE3, 0x01, 0xE6, 0x01, + 0xE8, 0x01, 0xEB, 0x01, 0xEE, 0x01, 0xF1, 0x01, 0xF3, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFC, 0x01, + 0x00, 0x02, 0x03, 0x02, 0x07, 0x02, 0x09, 0x02, 0x0E, 0x02, 0x13, 0x02, 0x1C, 0x02, 0x00 +}; + +const unsigned char INIT_3[15] = { + 0x14, 0x26, 0x33, 0x3D, 0x45, 0x4D, 0x53, 0x59, + 0x5E, 0x63, 0x67, 0x6D, 0x71, 0x78, 0xFF +}; + +static void epson_sendbyte(int flag, unsigned char byte) +{ + int i, shifter = 0x80; + + if (!flag) + omap_set_gpio_dataout(_A_LCD_SSC_A0, 0); + mdelay(2); + omap_set_gpio_dataout(A_LCD_SSC_RD, 1); + + omap_set_gpio_dataout(A_LCD_SSC_SD, flag); + + OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200); + OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202); + for (i = 0; i < 8; i++) { + OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200); + omap_set_gpio_dataout(A_LCD_SSC_SD, shifter & byte); + OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202); + shifter >>= 1; + } + omap_set_gpio_dataout(_A_LCD_SSC_A0, 1); +} + +static void init_system(void) +{ + omap_mcbsp_request(OMAP_MCBSP3); + omap_mcbsp_stop(OMAP_MCBSP3); +} + +static void setup_GPIO(void) +{ + /* new wave */ + omap_request_gpio(A_LCD_SSC_RD); + omap_request_gpio(A_LCD_SSC_SD); + omap_request_gpio(_A_LCD_RESET); + omap_request_gpio(_A_LCD_SSC_CS); + omap_request_gpio(_A_LCD_SSC_A0); + + /* set all GPIOs to output */ + omap_set_gpio_direction(A_LCD_SSC_RD, 0); + omap_set_gpio_direction(A_LCD_SSC_SD, 0); + omap_set_gpio_direction(_A_LCD_RESET, 0); + omap_set_gpio_direction(_A_LCD_SSC_CS, 0); + omap_set_gpio_direction(_A_LCD_SSC_A0, 0); + + /* set GPIO data */ + omap_set_gpio_dataout(A_LCD_SSC_RD, 1); + omap_set_gpio_dataout(A_LCD_SSC_SD, 0); + omap_set_gpio_dataout(_A_LCD_RESET, 0); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_A0, 1); +} + +static void display_init(void) +{ + int i; + + omap_cfg_reg(MCBSP3_CLKX); + + mdelay(2); + setup_GPIO(); + mdelay(2); + + /* reset LCD */ + omap_set_gpio_dataout(A_LCD_SSC_SD, 1); + epson_sendbyte(0, 0x25); + + omap_set_gpio_dataout(_A_LCD_RESET, 0); + mdelay(10); + omap_set_gpio_dataout(_A_LCD_RESET, 1); + + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + mdelay(2); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD, phase 1 */ + epson_sendbyte(0, 0xCA); + for (i = 0; i < 10; i++) + epson_sendbyte(1, INIT_1[i]); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD phase 2 */ + epson_sendbyte(0, 0xCB); + for( i = 0; i < 125; i++) + epson_sendbyte(1, INIT_2[i]); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD phase 2a */ + epson_sendbyte(0, 0xCC); + for( i = 0; i < 14; i++) + epson_sendbyte(1, INIT_3[i]); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD phase 3 */ + epson_sendbyte(0, 0xBC); + epson_sendbyte(1, 0x08); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD phase 4 */ + epson_sendbyte(0, 0x07); + epson_sendbyte(1, 0x05); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD phase 5 */ + epson_sendbyte(0, 0x94); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); + + /* init LCD phase 6 */ + epson_sendbyte(0, 0xC6); + epson_sendbyte(1, 0x80); + omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); + mdelay(100); /* used to be 1000 */ + omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); +
From: Tony Lindgren on 20 Nov 2006 14:10 * Pavel Machek <pavel(a)ucw.cz> [061118 18:16]: > From: Vladimir Ananiev <vovan888(a)gmail.com> > > Framebuffer support for Siemens SX1; this is second big patch. (Third > one will be mixer/sound support). Support is simple / pretty minimal, > but seems to work okay (and is somehow important for a cell phone :-). Pushed to linux-omap. I guess you're planning to send the missing Kconfig + Makefile patch for this? Also, it would be better to use omap_mcbsp_xmit_word() or omap_mcsbsp_spi_master_xmit_word_poll() instead of OMAP_MCBSP_WRITE as it does not do any checking that it worked. The aic23 and tsc2101 audio in linux-omap tree in general has the same problem. Regards, Tony - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Vladimir on 21 Nov 2006 02:10 2006/11/20, Tony Lindgren <tony(a)atomide.com>: > * Pavel Machek <pavel(a)ucw.cz> [061118 18:16]: > > From: Vladimir Ananiev <vovan888(a)gmail.com> > > > > Framebuffer support for Siemens SX1; this is second big patch. (Third > > one will be mixer/sound support). Support is simple / pretty minimal, > > but seems to work okay (and is somehow important for a cell phone :-). > > Pushed to linux-omap. I guess you're planning to send the missing > Kconfig + Makefile patch for this? > > Also, it would be better to use omap_mcbsp_xmit_word() or > omap_mcsbsp_spi_master_xmit_word_poll() instead of OMAP_MCBSP_WRITE as > it does not do any checking that it worked. The aic23 and tsc2101 > audio in linux-omap tree in general has the same problem. > > Regards, > > Tony > Hmm. McBSP3 in SX1 is used in "GPIO mode". The only line used is CLKX, so I think OMAP_MCBSP_WRITE would be enough. Am I wrong ? - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Komal Shah on 21 Nov 2006 03:50 On 11/21/06, Vladimir <vovan888(a)gmail.com> wrote: > 2006/11/20, Tony Lindgren <tony(a)atomide.com>: > > * Pavel Machek <pavel(a)ucw.cz> [061118 18:16]: > > > From: Vladimir Ananiev <vovan888(a)gmail.com> > > > > > > Framebuffer support for Siemens SX1; this is second big patch. (Third > > > one will be mixer/sound support). Support is simple / pretty minimal, > > > but seems to work okay (and is somehow important for a cell phone :-). > > > > Pushed to linux-omap. I guess you're planning to send the missing > > Kconfig + Makefile patch for this? > > > > Also, it would be better to use omap_mcbsp_xmit_word() or > > omap_mcsbsp_spi_master_xmit_word_poll() instead of OMAP_MCBSP_WRITE as > > it does not do any checking that it worked. The aic23 and tsc2101 > > audio in linux-omap tree in general has the same problem. > > > > Regards, > > > > Tony > > > > Hmm. McBSP3 in SX1 is used in "GPIO mode". The only line used is CLKX, > so I think OMAP_MCBSP_WRITE would be enough. Am I wrong ? Please also send defconfig (may be siemens_sx1_defconfig OR omap_sx1_310_defconfig) patch for this mobile once, your minimum required patches are pushed to -omap git tree. Thanx. -- ---Komal Shah http://komalshah.blogspot.com - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Pavel Machek on 21 Nov 2006 06:40
Hi1 > >> > Framebuffer support for Siemens SX1; this is second big patch. (Third > >> > one will be mixer/sound support). Support is simple / pretty minimal, > >> > but seems to work okay (and is somehow important for a cell phone :-). > >> > >> Pushed to linux-omap. I guess you're planning to send the missing > >> Kconfig + Makefile patch for this? > >> > >> Also, it would be better to use omap_mcbsp_xmit_word() or > >> omap_mcsbsp_spi_master_xmit_word_poll() instead of OMAP_MCBSP_WRITE as > >> it does not do any checking that it worked. The aic23 and tsc2101 > >> audio in linux-omap tree in general has the same problem. > >> > >> Regards, > >> > >> Tony > >> > > > >Hmm. McBSP3 in SX1 is used in "GPIO mode". The only line used is CLKX, > >so I think OMAP_MCBSP_WRITE would be enough. Am I wrong ? > > Please also send defconfig (may be siemens_sx1_defconfig OR > omap_sx1_310_defconfig) patch for this mobile once, your minimum > required patches are pushed to -omap git tree. Thanx. Yes, will do. I was trying to get it compiling first. Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |