source: trunk/target/linux/omap24xx/patches-3.1/330-n800-tsc2301-platform.patch @ 28683

Last change on this file since 28683 was 28683, checked in by mb, 5 years ago

omap24xx: Fix n810 boot

File size: 6.1 KB
  • arch/arm/mach-omap2/board-n8x0.c

    From f0bb9e67f0f13021e5033fed3dfe8ef78fe6a538 Mon Sep 17 00:00:00 2001
    From: Marat Radchenko <marat@slonopotamus.org>
    Date: Tue, 18 Oct 2011 21:52:56 +0400
    Subject: [PATCH 2/2] N800: add TSC2301 board info
    
    This patch adds TSC2301 init logic to N800 board file
    ---
     arch/arm/mach-omap2/board-n8x0.c |  141 ++++++++++++++++++++++++++++++++++++--
     1 files changed, 135 insertions(+), 6 deletions(-)
    
    old new  
    2727#include <linux/spi/tsc2005.h> 
    2828#include <linux/input.h> 
    2929#include <linux/i2c/lm8323.h> 
     30#include <linux/spi/tsc2301.h> 
    3031 
    3132#include <asm/mach/arch.h> 
    3233#include <asm/mach-types.h> 
    static struct omap2_mcspi_device_config 
    6364}; 
    6465#endif 
    6566 
    66 static void __init tsc2005_set_config(void) 
     67#ifdef CONFIG_TOUCHSCREEN_TSC2301 
     68 
     69#define N800_KEYB_IRQ_GPIO              109 
     70 
     71static struct tsc2301_platform_data tsc2301_config = { 
     72        .reset_gpio     = 118, 
     73        .keymap = { 
     74                -1,             /* Event for bit 0 */ 
     75                KEY_UP,         /* Event for bit 1 (up) */ 
     76                KEY_F5,         /* Event for bit 2 (home) */ 
     77                -1,             /* Event for bit 3 */ 
     78                KEY_LEFT,       /* Event for bit 4 (left) */ 
     79                KEY_ENTER,      /* Event for bit 5 (enter) */ 
     80                KEY_RIGHT,      /* Event for bit 6 (right) */ 
     81                -1,             /* Event for bit 7 */ 
     82                KEY_ESC,        /* Event for bit 8 (cycle) */ 
     83                KEY_DOWN,       /* Event for bit 9 (down) */ 
     84                KEY_F4,         /* Event for bit 10 (menu) */ 
     85                -1,             /* Event for bit 11 */ 
     86                KEY_F8,         /* Event for bit 12 (Zoom-) */ 
     87                KEY_F6,         /* Event for bit 13 (FS) */ 
     88                KEY_F7,         /* Event for bit 14 (Zoom+) */ 
     89                -1,             /* Event for bit 15 */ 
     90        }, 
     91        .kp_rep         = 0, 
     92        .keyb_name      = "Internal keypad", 
     93}; 
     94 
     95static struct omap2_mcspi_device_config tsc2301_mcspi_config = { 
     96        .turbo_mode     = 0, 
     97        .single_channel = 1, 
     98}; 
     99 
     100/* 
     101  TODO(Marat Radchenko): better pass GPIO to tsc2301 driver and let it 
     102  allocate irq itself (as it is already done for touchscreen) 
     103 */ 
     104static void tsc2301_dev_init(void) 
     105{ 
     106        int r; 
     107        int gpio = N800_KEYB_IRQ_GPIO; 
     108 
     109        r = gpio_request(gpio, "tsc2301 KBD IRQ"); 
     110        if (r >= 0) { 
     111                gpio_direction_input(gpio); 
     112                tsc2301_config.keyb_int = gpio_to_irq(gpio); 
     113        } else { 
     114                printk(KERN_ERR "unable to get KBD GPIO"); 
     115        } 
     116 
     117        gpio = 103; 
     118        r = gpio_request(gpio, "tsc2301 DAV IRQ"); 
     119        if (r >= 0) { 
     120                gpio_direction_input(gpio); 
     121                tsc2301_config.dav_int = gpio_to_irq(gpio); 
     122        } else { 
     123                printk(KERN_ERR "unable to get DAV GPIO"); 
     124        } 
     125} 
     126 
     127#else 
     128 
     129static void __init tsc2301_dev_init(void) 
     130{ 
     131} 
     132 
     133#endif 
     134 
     135static void __init n8x0_ts_set_config(void) 
    67136{ 
    68137        const struct omap_lcd_config *conf; 
    69138 
    static void __init tsc2005_set_config(vo 
    94163                        tsc2005_config.ts_x_plate_ohm = 200; 
    95164                } 
    96165#endif 
     166 
     167#ifdef CONFIG_TOUCHSCREEN_TSC2301 
     168                if (strcmp(conf->panel_name, "lph8923") == 0) { 
     169                        tsc2301_config.ts_x_plate_ohm   = 180; 
     170                        tsc2301_config.ts_hw_avg        = 8; 
     171                        tsc2301_config.ts_max_pressure  = 2048; 
     172                        tsc2301_config.ts_touch_pressure = 400; 
     173                        tsc2301_config.ts_stab_time     = 100; 
     174                        tsc2301_config.ts_pressure_fudge = 2; 
     175                        tsc2301_config.ts_x_max         = 4096; 
     176                        tsc2301_config.ts_x_fudge       = 4; 
     177                        tsc2301_config.ts_y_max         = 4096; 
     178                        tsc2301_config.ts_y_fudge       = 7; 
     179                } else if (strcmp(conf->panel_name, "ls041y3") == 0) { 
     180                        tsc2301_config.ts_x_plate_ohm   = 280; 
     181                        tsc2301_config.ts_hw_avg        = 8; 
     182                        tsc2301_config.ts_touch_pressure = 400; 
     183                        tsc2301_config.ts_max_pressure  = 2048; 
     184                        tsc2301_config.ts_stab_time     = 1000; 
     185                        tsc2301_config.ts_pressure_fudge = 2; 
     186                        tsc2301_config.ts_x_max         = 4096; 
     187                        tsc2301_config.ts_x_fudge       = 4; 
     188                        tsc2301_config.ts_y_max         = 4096; 
     189                        tsc2301_config.ts_y_fudge       = 7; 
     190                } else { 
     191                        printk(KERN_ERR "Unknown panel type, set default " 
     192                               "touchscreen configuration\n"); 
     193                        tsc2301_config.ts_x_plate_ohm   = 200; 
     194                        tsc2301_config.ts_stab_time     = 100; 
     195                } 
     196#endif 
    97197        } 
    98198} 
    99199 
    static void __init n8x0_usb_init(void) { 
    347447 
    348448#endif /*CONFIG_USB_MUSB_TUSB6010 */ 
    349449 
    350  
    351450static struct omap2_mcspi_device_config p54spi_mcspi_config = { 
    352451        .turbo_mode     = 0, 
    353452        .single_channel = 1, 
    354453}; 
    355454 
    356 static struct spi_board_info n800_spi_board_info[] __initdata = { 
     455static struct spi_board_info n8x0_common_spi_board_info[] __initdata = { 
    357456        { 
    358457                .modalias       = "lcd_mipid", 
    359458                .bus_num        = 1, 
    static struct spi_board_info n800_spi_bo 
    369468                .max_speed_hz   = 48000000, 
    370469                .controller_data = &p54spi_mcspi_config, 
    371470        }, 
     471}; 
     472 
     473static struct spi_board_info n810_spi_board_info[] __initdata = { 
     474#ifdef CONFIG_TOUCHSCREEN_TSC2005 
    372475        { 
    373476                .modalias        = "tsc2005", 
    374477                .bus_num         = 1, 
    static struct spi_board_info n800_spi_bo 
    378481                .controller_data = &tsc2005_mcspi_config, 
    379482                .platform_data   = &tsc2005_config, 
    380483        }, 
     484#endif 
     485}; 
     486 
     487static struct spi_board_info n800_spi_board_info[] __initdata = { 
     488#if defined(CONFIG_TOUCHSCREEN_TSC2301) 
     489        { 
     490                .modalias        = "tsc2301", 
     491                .bus_num         = 1, 
     492                .chip_select     = 0, 
     493                .max_speed_hz    = 6000000, 
     494                .controller_data = &tsc2301_mcspi_config, 
     495                .platform_data   = &tsc2301_config, 
     496        }, 
     497#endif 
    381498}; 
    382499 
    383500#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ 
    static void __init n8x0_init_machine(voi 
    10231140        n8x0_bt_init(); 
    10241141 
    10251142        /* FIXME: add n810 spi devices */ 
    1026         tsc2005_set_config(); 
    1027         spi_register_board_info(n800_spi_board_info, 
    1028                                 ARRAY_SIZE(n800_spi_board_info)); 
     1143        n8x0_ts_set_config(); 
     1144 
     1145        spi_register_board_info(n8x0_common_spi_board_info, 
     1146                                ARRAY_SIZE(n8x0_common_spi_board_info)); 
     1147        if (machine_is_nokia_n800()) 
     1148                spi_register_board_info(n800_spi_board_info, 
     1149                                        ARRAY_SIZE(n800_spi_board_info)); 
     1150        else 
     1151                spi_register_board_info(n810_spi_board_info, 
     1152                                        ARRAY_SIZE(n810_spi_board_info)); 
     1153 
    10291154        omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1, 
    10301155                              ARRAY_SIZE(n8x0_i2c_board_info_1)); 
    10311156        omap_register_i2c_bus(2, 400, NULL, 0); 
    static void __init n8x0_init_machine(voi 
    10351160        board_serial_init(); 
    10361161        n8x0_mipid_init(); 
    10371162        n8x0_blizzard_init(); 
     1163        if (machine_is_nokia_n800()) 
     1164                tsc2301_dev_init(); 
    10381165        gpmc_onenand_init(board_onenand_data); 
    10391166        n8x0_mmc_init(); 
    10401167        n8x0_usb_init(); 
Note: See TracBrowser for help on using the repository browser.