source: trunk/target/linux/omap24xx/patches-3.1/310-n810-lcd.patch @ 28683

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

omap24xx: Fix n810 boot

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

    old new  
    2424#include <linux/spi/spi.h> 
    2525#include <linux/usb/musb.h> 
    2626#include <sound/tlv320aic3x.h> 
     27#include <linux/spi/tsc2005.h> 
    2728 
    2829#include <asm/mach/arch.h> 
    2930#include <asm/mach-types.h> 
    static int slot1_cover_open; 
    4344static int slot2_cover_open; 
    4445static struct device *mmc_device; 
    4546 
     47#define RX51_TSC2005_RESET_GPIO 94 
     48#define RX51_TSC2005_IRQ_GPIO   106 
     49 
     50#ifdef CONFIG_TOUCHSCREEN_TSC2005 
     51static struct tsc2005_platform_data tsc2005_config; 
     52static void rx51_tsc2005_set_reset(bool enable) 
     53{ 
     54        gpio_set_value(RX51_TSC2005_RESET_GPIO, enable); 
     55} 
     56 
     57static struct omap2_mcspi_device_config tsc2005_mcspi_config = { 
     58        .turbo_mode     = 0, 
     59        .single_channel = 1, 
     60}; 
     61#endif 
     62 
     63static void __init tsc2005_set_config(void) 
     64{ 
     65        const struct omap_lcd_config *conf; 
     66 
     67        conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); 
     68        if (conf != NULL) { 
     69#ifdef CONFIG_TOUCHSCREEN_TSC2005 
     70                if (strcmp(conf->panel_name, "lph8923") == 0) { 
     71                        tsc2005_config.ts_x_plate_ohm = 180; 
     72                        tsc2005_config.ts_pressure_max = 2048; 
     73                        tsc2005_config.ts_pressure_fudge = 2; 
     74                        tsc2005_config.ts_x_max = 4096; 
     75                        tsc2005_config.ts_x_fudge = 4; 
     76                        tsc2005_config.ts_y_max = 4096; 
     77                        tsc2005_config.ts_y_fudge = 7; 
     78                        tsc2005_config.set_reset = rx51_tsc2005_set_reset; 
     79                } else if (strcmp(conf->panel_name, "ls041y3") == 0) { 
     80                        tsc2005_config.ts_x_plate_ohm = 280; 
     81                        tsc2005_config.ts_pressure_max = 2048; 
     82                        tsc2005_config.ts_pressure_fudge = 2; 
     83                        tsc2005_config.ts_x_max = 4096; 
     84                        tsc2005_config.ts_x_fudge = 4; 
     85                        tsc2005_config.ts_y_max = 4096; 
     86                        tsc2005_config.ts_y_fudge = 7; 
     87                        tsc2005_config.set_reset = rx51_tsc2005_set_reset; 
     88                } else { 
     89                        printk(KERN_ERR "Unknown panel type, set default " 
     90                               "touchscreen configuration\n"); 
     91                        tsc2005_config.ts_x_plate_ohm = 200; 
     92                } 
     93#endif 
     94        } 
     95} 
     96 
     97static struct omap2_mcspi_device_config mipid_mcspi_config = { 
     98        .turbo_mode     = 0, 
     99        .single_channel = 1, 
     100}; 
     101 
     102extern struct mipid_platform_data n8x0_mipid_platform_data; 
     103 
     104extern void n8x0_mipid_init(void); 
     105extern void n8x0_blizzard_init(void); 
     106 
    46107#define TUSB6010_ASYNC_CS       1 
    47108#define TUSB6010_SYNC_CS        4 
    48109#define TUSB6010_GPIO_INT       58 
    static struct omap2_mcspi_device_config 
    145206 
    146207static struct spi_board_info n800_spi_board_info[] __initdata = { 
    147208        { 
     209                .modalias       = "lcd_mipid", 
     210                .bus_num        = 1, 
     211                .chip_select    = 1, 
     212                .max_speed_hz   = 4000000, 
     213                .controller_data= &mipid_mcspi_config, 
     214                .platform_data  = &n8x0_mipid_platform_data, 
     215        }, 
     216        { 
    148217                .modalias       = "p54spi", 
    149218                .bus_num        = 2, 
    150219                .chip_select    = 0, 
    151220                .max_speed_hz   = 48000000, 
    152221                .controller_data = &p54spi_mcspi_config, 
    153222        }, 
     223        { 
     224                .modalias        = "tsc2005", 
     225                .bus_num         = 1, 
     226                .chip_select     = 0, 
     227                .irq             = OMAP_GPIO_IRQ(RX51_TSC2005_IRQ_GPIO), 
     228                .max_speed_hz    = 6000000, 
     229                .controller_data = &tsc2005_mcspi_config, 
     230                .platform_data   = &tsc2005_config, 
     231        }, 
    154232}; 
    155233 
    156234#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ 
    static void __init n8x0_init_machine(voi 
    789867        n8x0_cbus_init(); 
    790868 
    791869        /* FIXME: add n810 spi devices */ 
     870        tsc2005_set_config(); 
    792871        spi_register_board_info(n800_spi_board_info, 
    793872                                ARRAY_SIZE(n800_spi_board_info)); 
    794873        omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1, 
    static void __init n8x0_init_machine(voi 
    798877                i2c_register_board_info(2, n810_i2c_board_info_2, 
    799878                                        ARRAY_SIZE(n810_i2c_board_info_2)); 
    800879        board_serial_init(); 
     880        n8x0_mipid_init(); 
     881        n8x0_blizzard_init(); 
    801882        gpmc_onenand_init(board_onenand_data); 
    802883        n8x0_mmc_init(); 
    803884        n8x0_usb_init(); 
  • new file linux-3.1/arch/arm/mach-omap2/board-n8x0-lcd.c

    - +  
     1/* 
     2 * linux/arch/arm/mach-omap2/board-n8x0.c 
     3 * 
     4 * Copyright (C) 2005-2009 Nokia Corporation 
     5 * Author: Juha Yrjola <juha.yrjola@nokia.com> 
     6 * 
     7 * Modified from mach-omap2/board-generic.c 
     8 * 
     9 * This program is free software; you can redistribute it and/or modify 
     10 * it under the terms of the GNU General Public License version 2 as 
     11 * published by the Free Software Foundation. 
     12 */ 
     13 
     14#include <linux/clk.h> 
     15#include <linux/delay.h> 
     16#include <linux/gpio.h> 
     17#include <linux/omapfb.h> 
     18 
     19#include <plat/lcd_mipid.h> 
     20#include <plat/blizzard.h> 
     21 
     22#include "../../../drivers/cbus/tahvo.h" 
     23 
     24 
     25struct tahvo_pwm_device { 
     26        struct device *dev; 
     27        int tahvo_7bit_backlight; 
     28}; 
     29 
     30static struct tahvo_pwm_device *tahvo_pwm; 
     31 
     32static unsigned int tahvo_pwm_get_backlight_level(struct tahvo_pwm_device *pd) 
     33{ 
     34        unsigned int mask; 
     35 
     36        if (pd->tahvo_7bit_backlight) 
     37                mask = 0x7f; 
     38        else 
     39                mask = 0x0f; 
     40        return tahvo_read_reg(pd->dev, TAHVO_REG_LEDPWMR) & mask; 
     41} 
     42 
     43static unsigned int tahvo_pwm_get_max_backlight_level(struct tahvo_pwm_device *pd) 
     44{ 
     45        if (pd->tahvo_7bit_backlight) 
     46                return 0x7f; 
     47        return 0x0f; 
     48} 
     49 
     50static void tahvo_pwm_set_backlight_level(struct tahvo_pwm_device *pd, unsigned int level) 
     51{ 
     52        unsigned int max_level; 
     53 
     54        max_level = tahvo_pwm_get_max_backlight_level(pd); 
     55        if (level > max_level) 
     56                level = max_level; 
     57        tahvo_write_reg(pd->dev, TAHVO_REG_LEDPWMR, level); 
     58} 
     59 
     60static int __init n8x0_tahvo_pwm_probe(struct platform_device *pdev) 
     61{ 
     62        struct tahvo_pwm_device *pd; 
     63        unsigned int rev, id; 
     64 
     65        pd = kzalloc(sizeof(*pd), GFP_KERNEL); 
     66        if (WARN_ON(!pd)) 
     67                return -ENOMEM; 
     68        pd->dev = &pdev->dev; 
     69 
     70        rev = tahvo_read_reg(pd->dev, TAHVO_REG_ASICR); 
     71        id = (rev >> 8) & 0xff; 
     72        if (id == 0x03) { 
     73                if ((rev & 0xff) >= 0x50) 
     74                        pd->tahvo_7bit_backlight = 1; 
     75        } else if (id == 0x0b) 
     76                pd->tahvo_7bit_backlight = 1; 
     77 
     78        dev_set_drvdata(pd->dev, pd); 
     79        tahvo_pwm = pd; 
     80} 
     81 
     82static struct platform_driver n8x0_tahvo_pwm_driver = { 
     83        .driver         = { 
     84                .name   = "tahvo-pwm", 
     85        }, 
     86}; 
     87 
     88static int __init n8x0_tahvo_pwm_init(void) 
     89{ 
     90        return platform_driver_probe(&n8x0_tahvo_pwm_driver, n8x0_tahvo_pwm_probe); 
     91} 
     92fs_initcall(n8x0_tahvo_pwm_init); 
     93 
     94static int n8x0_get_backlight_level(struct mipid_platform_data *pdata) 
     95{ 
     96        return tahvo_pwm_get_backlight_level(tahvo_pwm); 
     97} 
     98 
     99static int n8x0_get_max_backlight_level(struct mipid_platform_data *pdata) 
     100{ 
     101        return tahvo_pwm_get_max_backlight_level(tahvo_pwm); 
     102} 
     103 
     104static void n8x0_set_backlight_level(struct mipid_platform_data *pdata, int level) 
     105{ 
     106        tahvo_pwm_set_backlight_level(tahvo_pwm, level); 
     107} 
     108 
     109#define N8X0_BLIZZARD_POWERDOWN_GPIO    15 
     110 
     111// MIPID LCD Panel 
     112 
     113static void mipid_shutdown(struct mipid_platform_data *pdata) 
     114{ 
     115        if (pdata->nreset_gpio != -1) { 
     116                pr_info("shutdown LCD\n"); 
     117                gpio_set_value(pdata->nreset_gpio, 0); 
     118                msleep(120); 
     119        } 
     120} 
     121 
     122struct mipid_platform_data n8x0_mipid_platform_data = { 
     123        .shutdown = mipid_shutdown, 
     124        .get_bklight_level = n8x0_get_backlight_level, 
     125        .set_bklight_level = n8x0_set_backlight_level, 
     126        .get_bklight_max = n8x0_get_max_backlight_level, 
     127}; 
     128 
     129void __init n8x0_mipid_init(void) 
     130{ 
     131        const struct omap_lcd_config *conf; 
     132        int err; 
     133 
     134        conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); 
     135        if (conf != NULL) { 
     136                n8x0_mipid_platform_data.nreset_gpio = conf->nreset_gpio; 
     137                n8x0_mipid_platform_data.data_lines = conf->data_lines; 
     138                if (conf->nreset_gpio != -1) { 
     139                        err = gpio_request(conf->nreset_gpio, "MIPID nreset"); 
     140                        if (err) { 
     141                                printk(KERN_ERR "N8x0 MIPID failed to request nreset GPIO %d\n", 
     142                                       conf->nreset_gpio); 
     143                        } else { 
     144                                err = gpio_direction_output(conf->nreset_gpio, 1); 
     145                                if (err) { 
     146                                        printk(KERN_ERR "N8x0 MIPID failed to set nreset GPIO %d\n", 
     147                                               conf->nreset_gpio); 
     148                                } 
     149                        } 
     150                } 
     151                printk(KERN_INFO "N8x0 MIPID config loaded"); 
     152        } 
     153        else 
     154                printk(KERN_INFO "N8x0 MIPID config not provided"); 
     155} 
     156 
     157 
     158// Epson Blizzard LCD Controller 
     159 
     160static struct { 
     161        struct clk *sys_ck; 
     162} blizzard; 
     163 
     164static int blizzard_get_clocks(void) 
     165{ 
     166        blizzard.sys_ck = clk_get(0, "osc_ck"); 
     167        if (IS_ERR(blizzard.sys_ck)) { 
     168                printk(KERN_ERR "can't get Blizzard clock\n"); 
     169                return PTR_ERR(blizzard.sys_ck); 
     170        } 
     171        return 0; 
     172} 
     173 
     174static unsigned long blizzard_get_clock_rate(struct device *dev) 
     175{ 
     176        return clk_get_rate(blizzard.sys_ck); 
     177} 
     178 
     179static void blizzard_enable_clocks(int enable) 
     180{ 
     181        if (enable) 
     182                clk_enable(blizzard.sys_ck); 
     183        else 
     184                clk_disable(blizzard.sys_ck); 
     185} 
     186 
     187static void blizzard_power_up(struct device *dev) 
     188{ 
     189        /* Vcore to 1.475V */ 
     190        tahvo_set_clear_reg_bits(tahvo_pwm->dev, 0x07, 0, 0xf); 
     191        msleep(10); 
     192 
     193        blizzard_enable_clocks(1); 
     194        gpio_set_value(N8X0_BLIZZARD_POWERDOWN_GPIO, 1); 
     195} 
     196 
     197static void blizzard_power_down(struct device *dev) 
     198{ 
     199        gpio_set_value(N8X0_BLIZZARD_POWERDOWN_GPIO, 0); 
     200        blizzard_enable_clocks(0); 
     201 
     202        /* Vcore to 1.005V */ 
     203        tahvo_set_clear_reg_bits(tahvo_pwm->dev, 0x07, 0xf, 0); 
     204} 
     205 
     206static struct blizzard_platform_data n8x0_blizzard_data = { 
     207        .power_up       = blizzard_power_up, 
     208        .power_down     = blizzard_power_down, 
     209        .get_clock_rate = blizzard_get_clock_rate, 
     210        .te_connected   = 1, 
     211}; 
     212 
     213void __init n8x0_blizzard_init(void) 
     214{ 
     215        int r; 
     216 
     217        r = gpio_request(N8X0_BLIZZARD_POWERDOWN_GPIO, "Blizzard pd"); 
     218        if (r < 0) 
     219        { 
     220                printk(KERN_ERR "Can't get N8x0 Blizzard powerdown GPIO %d\n", N8X0_BLIZZARD_POWERDOWN_GPIO); 
     221                return; 
     222        } 
     223        gpio_direction_output(N8X0_BLIZZARD_POWERDOWN_GPIO, 1); 
     224 
     225        blizzard_get_clocks(); 
     226        omapfb_set_ctrl_platform_data(&n8x0_blizzard_data); 
     227 
     228        printk(KERN_INFO "N8x0 Blizzard initialized"); 
     229} 
  • arch/arm/mach-omap2/Makefile

    old new obj-$(CONFIG_MACH_OMAP_3430SDP) += boar 
    209209                                           hsmmc.o \ 
    210210                                           board-flash.o 
    211211obj-$(CONFIG_MACH_NOKIA_N8X0)           += board-n8x0.o 
     212obj-$(CONFIG_MACH_NOKIA_N8X0)           += board-n8x0-lcd.o 
    212213obj-$(CONFIG_MACH_NOKIA_RM680)          += board-rm680.o \ 
    213214                                           sdram-nokia.o \ 
    214215                                           hsmmc.o 
  • arch/arm/mach-omap2/omap_hwmod_2420_data.c

    old new static struct omap_hwmod_ocp_if *omap242 
    11811181 
    11821182static struct omap_hwmod omap2420_gpio1_hwmod = { 
    11831183        .name           = "gpio1", 
     1184        .flags          = HWMOD_INIT_NO_RESET, /* Workaround: Don't reset the n810 MIPID */ 
    11841185        .flags          = HWMOD_CONTROL_OPT_CLKS_IN_RESET, 
    11851186        .mpu_irqs       = omap2_gpio1_irqs, 
    11861187        .main_clk       = "gpios_fck", 
Note: See TracBrowser for help on using the repository browser.