source: trunk/target/linux/omap24xx/patches-2.6.38/301-nokia-board-additional.patch @ 26905

Last change on this file since 26905 was 26905, checked in by hauke, 6 years ago

kernel: update kernel from 2.6.38.2 to 2.6.38.6 and refresh patches

Thank you Peter Wagner for the patch. I refreshed the kernel patches and added the md5sum of the kernel.

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

    a b  
    2323#include <linux/spi/spi.h> 
    2424#include <linux/usb/musb.h> 
    2525#include <sound/tlv320aic3x.h> 
     26#include <linux/input.h> 
     27#include <linux/i2c/lm8323.h> 
     28#include <linux/spi/tsc2005.h> 
    2629 
    2730#include <asm/mach/arch.h> 
    2831#include <asm/mach-types.h> 
     
    3639#include <plat/mmc.h> 
    3740#include <plat/serial.h> 
    3841#include <plat/cbus.h> 
     42#include <plat/gpio-switch.h> 
    3943 
    4044#include "mux.h" 
    4145 
    static int slot1_cover_open; 
    4347static int slot2_cover_open; 
    4448static struct device *mmc_device; 
    4549 
     50/* We map the FN key as LALT to workaround an X keycode problem. 
     51 * The XKB map needs to be adjusted to support this. */ 
     52#define MAP_FN_AS_LEFTALT 
     53 
     54static s16 rx44_keymap[LM8323_KEYMAP_SIZE] = { 
     55        [0x01] = KEY_Q, 
     56        [0x02] = KEY_K, 
     57        [0x03] = KEY_O, 
     58        [0x04] = KEY_P, 
     59        [0x05] = KEY_BACKSPACE, 
     60        [0x06] = KEY_A, 
     61        [0x07] = KEY_S, 
     62        [0x08] = KEY_D, 
     63        [0x09] = KEY_F, 
     64        [0x0a] = KEY_G, 
     65        [0x0b] = KEY_H, 
     66        [0x0c] = KEY_J, 
     67 
     68        [0x11] = KEY_W, 
     69        [0x12] = KEY_F4, 
     70        [0x13] = KEY_L, 
     71        [0x14] = KEY_APOSTROPHE, 
     72        [0x16] = KEY_Z, 
     73        [0x17] = KEY_X, 
     74        [0x18] = KEY_C, 
     75        [0x19] = KEY_V, 
     76        [0x1a] = KEY_B, 
     77        [0x1b] = KEY_N, 
     78        [0x1c] = KEY_LEFTSHIFT, /* Actually, this is both shift keys */ 
     79        [0x1f] = KEY_F7, 
     80 
     81        [0x21] = KEY_E, 
     82        [0x22] = KEY_SEMICOLON, 
     83        [0x23] = KEY_MINUS, 
     84        [0x24] = KEY_EQUAL, 
     85#ifdef MAP_FN_AS_LEFTALT 
     86        [0x2b] = KEY_LEFTALT, 
     87#else 
     88        [0x2b] = KEY_FN, 
     89#endif 
     90        [0x2c] = KEY_M, 
     91        [0x2f] = KEY_F8, 
     92 
     93        [0x31] = KEY_R, 
     94        [0x32] = KEY_RIGHTCTRL, 
     95        [0x34] = KEY_SPACE, 
     96        [0x35] = KEY_COMMA, 
     97        [0x37] = KEY_UP, 
     98        [0x3c] = KEY_COMPOSE, 
     99        [0x3f] = KEY_F6, 
     100 
     101        [0x41] = KEY_T, 
     102        [0x44] = KEY_DOT, 
     103        [0x46] = KEY_RIGHT, 
     104        [0x4f] = KEY_F5, 
     105        [0x51] = KEY_Y, 
     106        [0x53] = KEY_DOWN, 
     107        [0x55] = KEY_ENTER, 
     108        [0x5f] = KEY_ESC, 
     109 
     110        [0x61] = KEY_U, 
     111        [0x64] = KEY_LEFT, 
     112 
     113        [0x71] = KEY_I, 
     114        [0x75] = KEY_KPENTER, 
     115}; 
     116 
     117static struct lm8323_platform_data lm8323_pdata = { 
     118        .repeat         = 0, /* Repeat is handled in userspace for now. */ 
     119        .keymap         = rx44_keymap, 
     120        .size_x         = 8, 
     121        .size_y         = 12, 
     122        .debounce_time  = 12, 
     123        .active_time    = 500, 
     124 
     125        .name           = "Internal keyboard", 
     126        .pwm_names[0]   = "n810::keyboard", 
     127        .pwm_names[1]   = "n810::cover", 
     128}; 
     129 
     130#define OMAP_TAG_NOKIA_BT       0x4e01 
     131 
     132struct omap_bluetooth_config { 
     133        u8    chip_type; 
     134        u8    bt_wakeup_gpio; 
     135        u8    host_wakeup_gpio; 
     136        u8    reset_gpio; 
     137        u8    bt_uart; 
     138        u8    bd_addr[6]; 
     139        u8    bt_sysclk; 
     140}; 
     141 
     142static struct platform_device n8x0_bt_device = { 
     143        .name           = "hci_h4p", 
     144        .id             = -1, 
     145        .num_resources  = 0, 
     146}; 
     147 
     148void __init n8x0_bt_init(void) 
     149{ 
     150        const struct omap_bluetooth_config *bt_config; 
     151 
     152        bt_config = (void *) omap_get_config(OMAP_TAG_NOKIA_BT, 
     153                                             struct omap_bluetooth_config); 
     154        n8x0_bt_device.dev.platform_data = (void *) bt_config; 
     155        if (platform_device_register(&n8x0_bt_device) < 0) 
     156                BUG(); 
     157} 
     158 
     159#define RX51_TSC2005_RESET_GPIO 94 
     160#define RX51_TSC2005_IRQ_GPIO   106 
     161 
     162#ifdef CONFIG_TOUCHSCREEN_TSC2005 
     163static struct tsc2005_platform_data tsc2005_config; 
     164static void rx51_tsc2005_set_reset(bool enable) 
     165{ 
     166        gpio_set_value(RX51_TSC2005_RESET_GPIO, enable); 
     167} 
     168 
     169static struct omap2_mcspi_device_config tsc2005_mcspi_config = { 
     170        .turbo_mode     = 0, 
     171        .single_channel = 1, 
     172}; 
     173#endif 
     174 
     175static void __init tsc2005_set_config(void) 
     176{ 
     177        const struct omap_lcd_config *conf; 
     178 
     179        conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); 
     180        if (conf != NULL) { 
     181#ifdef CONFIG_TOUCHSCREEN_TSC2005 
     182                if (strcmp(conf->panel_name, "lph8923") == 0) { 
     183                        tsc2005_config.ts_x_plate_ohm = 180; 
     184                        tsc2005_config.ts_hw_avg = 0; 
     185                        tsc2005_config.ts_ignore_last = 0; 
     186                        tsc2005_config.ts_touch_pressure = 1500; 
     187                        tsc2005_config.ts_stab_time = 100; 
     188                        tsc2005_config.ts_pressure_max = 2048; 
     189                        tsc2005_config.ts_pressure_fudge = 2; 
     190                        tsc2005_config.ts_x_max = 4096; 
     191                        tsc2005_config.ts_x_fudge = 4; 
     192                        tsc2005_config.ts_y_max = 4096; 
     193                        tsc2005_config.ts_y_fudge = 7; 
     194                        tsc2005_config.set_reset = rx51_tsc2005_set_reset; 
     195                } else if (strcmp(conf->panel_name, "ls041y3") == 0) { 
     196                        tsc2005_config.ts_x_plate_ohm = 280; 
     197                        tsc2005_config.ts_hw_avg = 0; 
     198                        tsc2005_config.ts_ignore_last = 0; 
     199                        tsc2005_config.ts_touch_pressure = 1500; 
     200                        tsc2005_config.ts_stab_time = 1000; 
     201                        tsc2005_config.ts_pressure_max = 2048; 
     202                        tsc2005_config.ts_pressure_fudge = 2; 
     203                        tsc2005_config.ts_x_max = 4096; 
     204                        tsc2005_config.ts_x_fudge = 4; 
     205                        tsc2005_config.ts_y_max = 4096; 
     206                        tsc2005_config.ts_y_fudge = 7; 
     207                        tsc2005_config.set_reset = rx51_tsc2005_set_reset; 
     208                } else { 
     209                        printk(KERN_ERR "Unknown panel type, set default " 
     210                               "touchscreen configuration\n"); 
     211                        tsc2005_config.ts_x_plate_ohm = 200; 
     212                        tsc2005_config.ts_stab_time = 100; 
     213                } 
     214#endif 
     215        } 
     216} 
     217 
     218static struct omap2_mcspi_device_config mipid_mcspi_config = { 
     219        .turbo_mode     = 0, 
     220        .single_channel = 1, 
     221}; 
     222 
     223extern struct mipid_platform_data n8x0_mipid_platform_data; 
     224 
     225extern void n8x0_mipid_init(void); 
     226extern void n8x0_blizzard_init(void); 
     227 
     228static struct omap_gpio_switch n8x0_gpio_switches[] __initdata = { 
     229        { 
     230                .name                   = "headphone", 
     231                .gpio                   = -1, 
     232                .debounce_rising        = 200, 
     233                .debounce_falling       = 200, 
     234        }, { 
     235                .name                   = "cam_act", 
     236                .gpio                   = -1, 
     237                .debounce_rising        = 200, 
     238                .debounce_falling       = 200, 
     239        }, { 
     240                .name                   = "cam_turn", 
     241                .gpio                   = -1, 
     242                .debounce_rising        = 100, 
     243                .debounce_falling       = 100, 
     244        }, { 
     245                .name                   = "slide", 
     246                .gpio                   = -1, 
     247                .debounce_rising        = 200, 
     248                .debounce_falling       = 200, 
     249        }, { 
     250                .name                   = "kb_lock", 
     251                .gpio                   = -1, 
     252                .debounce_rising        = 200, 
     253                .debounce_falling       = 200, 
     254        }, 
     255}; 
     256 
     257static void __init n8x0_gpio_switches_init(void) 
     258{ 
     259        /* The switches are actually registered through ATAG mechanism. 
     260         * This just updates the parameters (thus .gpio is -1) */ 
     261        omap_register_gpio_switches(n8x0_gpio_switches, 
     262                                    ARRAY_SIZE(n8x0_gpio_switches)); 
     263} 
     264 
    46265#define TUSB6010_ASYNC_CS       1 
    47266#define TUSB6010_SYNC_CS        4 
    48267#define TUSB6010_GPIO_INT       58 
    static struct omap2_mcspi_device_config 
    146365 
    147366static struct spi_board_info n800_spi_board_info[] __initdata = { 
    148367        { 
     368                .modalias       = "lcd_mipid", 
     369                .bus_num        = 1, 
     370                .chip_select    = 1, 
     371                .max_speed_hz   = 4000000, 
     372                .controller_data= &mipid_mcspi_config, 
     373                .platform_data  = &n8x0_mipid_platform_data, 
     374        }, 
     375        { 
    149376                .modalias       = "p54spi", 
    150377                .bus_num        = 2, 
    151378                .chip_select    = 0, 
    152379                .max_speed_hz   = 48000000, 
    153380                .controller_data = &p54spi_mcspi_config, 
    154381        }, 
     382        { 
     383                .modalias        = "tsc2005", 
     384                .bus_num         = 1, 
     385                .chip_select     = 0, 
     386                .irq             = OMAP_GPIO_IRQ(RX51_TSC2005_IRQ_GPIO), 
     387                .max_speed_hz    = 6000000, 
     388                .controller_data = &tsc2005_mcspi_config, 
     389                .platform_data   = &tsc2005_config, 
     390        }, 
    155391}; 
    156392 
    157393#if defined(CONFIG_MTD_ONENAND_OMAP2) || \ 
    static struct aic3x_pdata n810_aic33_dat 
    727963}; 
    728964 
    729965static struct i2c_board_info n810_i2c_board_info_2[] __initdata = { 
     966        { 
     967                I2C_BOARD_INFO("lm8323", 0x45), 
     968                .irq            = OMAP_GPIO_IRQ(109), 
     969                .platform_data  = &lm8323_pdata, 
     970        }, 
    730971        { 
    731972                I2C_BOARD_INFO("tlv320aic3x", 0x18), 
    732973                .platform_data = &n810_aic33_data, 
    static inline void board_serial_init(voi 
    7961037static void __init n8x0_init_machine(void) 
    7971038{ 
    7981039        omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC); 
     1040        n8x0_gpio_switches_init(); 
    7991041        n8x0_cbus_init(); 
     1042        n8x0_bt_init(); 
    8001043 
    8011044        /* FIXME: add n810 spi devices */ 
     1045        tsc2005_set_config(); 
    8021046        spi_register_board_info(n800_spi_board_info, 
    8031047                                ARRAY_SIZE(n800_spi_board_info)); 
    8041048        omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1, 
    static void __init n8x0_init_machine(voi 
    8081052                i2c_register_board_info(2, n810_i2c_board_info_2, 
    8091053                                        ARRAY_SIZE(n810_i2c_board_info_2)); 
    8101054        board_serial_init(); 
     1055        n8x0_mipid_init(); 
     1056        n8x0_blizzard_init(); 
    8111057        gpmc_onenand_init(board_onenand_data); 
    8121058        n8x0_mmc_init(); 
    8131059        n8x0_usb_init(); 
  • new file 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#define N8X0_BLIZZARD_POWERDOWN_GPIO    15 
     25 
     26// MIPID LCD Panel 
     27 
     28static void mipid_shutdown(struct mipid_platform_data *pdata) 
     29{ 
     30        if (pdata->nreset_gpio != -1) { 
     31                pr_info("shutdown LCD\n"); 
     32                gpio_set_value(pdata->nreset_gpio, 0); 
     33                msleep(120); 
     34        } 
     35} 
     36 
     37struct mipid_platform_data n8x0_mipid_platform_data = { 
     38        .shutdown = mipid_shutdown, 
     39}; 
     40 
     41void __init n8x0_mipid_init(void) 
     42{ 
     43        const struct omap_lcd_config *conf; 
     44        int err; 
     45 
     46        conf = omap_get_config(OMAP_TAG_LCD, struct omap_lcd_config); 
     47        if (conf != NULL) { 
     48                n8x0_mipid_platform_data.nreset_gpio = conf->nreset_gpio; 
     49                n8x0_mipid_platform_data.data_lines = conf->data_lines; 
     50                if (conf->nreset_gpio != -1) { 
     51                        err = gpio_request(conf->nreset_gpio, "MIPID nreset"); 
     52                        if (err) { 
     53                                printk(KERN_ERR "N8x0 MIPID failed to request nreset GPIO %d\n", 
     54                                       conf->nreset_gpio); 
     55                        } else { 
     56                                err = gpio_direction_output(conf->nreset_gpio, 1); 
     57                                if (err) { 
     58                                        printk(KERN_ERR "N8x0 MIPID failed to set nreset GPIO %d\n", 
     59                                               conf->nreset_gpio); 
     60                                } 
     61                        } 
     62                } 
     63                printk(KERN_INFO "N8x0 MIPID config loaded"); 
     64        } 
     65        else 
     66                printk(KERN_INFO "N8x0 MIPID config not provided"); 
     67} 
     68 
     69 
     70// Epson Blizzard LCD Controller 
     71 
     72static struct { 
     73        struct clk *sys_ck; 
     74} blizzard; 
     75 
     76static int blizzard_get_clocks(void) 
     77{ 
     78        blizzard.sys_ck = clk_get(0, "osc_ck"); 
     79        if (IS_ERR(blizzard.sys_ck)) { 
     80                printk(KERN_ERR "can't get Blizzard clock\n"); 
     81                return PTR_ERR(blizzard.sys_ck); 
     82        } 
     83        return 0; 
     84} 
     85 
     86static unsigned long blizzard_get_clock_rate(struct device *dev) 
     87{ 
     88        return clk_get_rate(blizzard.sys_ck); 
     89} 
     90 
     91static void blizzard_enable_clocks(int enable) 
     92{ 
     93        if (enable) 
     94                clk_enable(blizzard.sys_ck); 
     95        else 
     96                clk_disable(blizzard.sys_ck); 
     97} 
     98 
     99static void blizzard_power_up(struct device *dev) 
     100{ 
     101        /* Vcore to 1.475V */ 
     102        tahvo_set_clear_reg_bits(0x07, 0, 0xf); 
     103        msleep(10); 
     104 
     105        blizzard_enable_clocks(1); 
     106        gpio_set_value(N8X0_BLIZZARD_POWERDOWN_GPIO, 1); 
     107} 
     108 
     109static void blizzard_power_down(struct device *dev) 
     110{ 
     111        gpio_set_value(N8X0_BLIZZARD_POWERDOWN_GPIO, 0); 
     112        blizzard_enable_clocks(0); 
     113 
     114        /* Vcore to 1.005V */ 
     115        tahvo_set_clear_reg_bits(0x07, 0xf, 0); 
     116} 
     117 
     118static struct blizzard_platform_data n8x0_blizzard_data = { 
     119        .power_up       = blizzard_power_up, 
     120        .power_down     = blizzard_power_down, 
     121        .get_clock_rate = blizzard_get_clock_rate, 
     122        .te_connected   = 1, 
     123}; 
     124 
     125void __init n8x0_blizzard_init(void) 
     126{ 
     127        int r; 
     128 
     129        r = gpio_request(N8X0_BLIZZARD_POWERDOWN_GPIO, "Blizzard pd"); 
     130        if (r < 0) 
     131        { 
     132                printk(KERN_ERR "Can't get N8x0 Blizzard powerdown GPIO %d\n", N8X0_BLIZZARD_POWERDOWN_GPIO); 
     133                return; 
     134        } 
     135        gpio_direction_output(N8X0_BLIZZARD_POWERDOWN_GPIO, 1); 
     136 
     137        blizzard_get_clocks(); 
     138        omapfb_set_ctrl_platform_data(&n8x0_blizzard_data); 
     139 
     140        printk(KERN_INFO "N8x0 Blizzard initialized"); 
     141} 
  • arch/arm/mach-omap2/Makefile

    a b obj-$(CONFIG_MACH_OMAP_3430SDP) += boar 
    177177                                           hsmmc.o \ 
    178178                                           board-flash.o 
    179179obj-$(CONFIG_MACH_NOKIA_N8X0)           += board-n8x0.o 
     180obj-$(CONFIG_MACH_NOKIA_N8X0)           += board-n8x0-lcd.o 
    180181obj-$(CONFIG_MACH_NOKIA_RM680)          += board-rm680.o \ 
    181182                                           sdram-nokia.o \ 
    182183                                           hsmmc.o 
  • new file arch/arm/plat-omap/include/plat/cbus.h

    - +  
     1/* 
     2 * cbus.h - CBUS platform_data definition 
     3 * 
     4 * Copyright (C) 2004 - 2009 Nokia Corporation 
     5 * 
     6 * Written by Felipe Balbi <felipe.balbi@nokia.com> 
     7 * 
     8 * This file is subject to the terms and conditions of the GNU General 
     9 * Public License. See the file "COPYING" in the main directory of this 
     10 * archive for more details. 
     11 * 
     12 * This program is distributed in the hope that it will be useful, 
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     15 * GNU General Public License for more details. 
     16 * 
     17 * You should have received a copy of the GNU General Public License 
     18 * along with this program; if not, write to the Free Software 
     19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
     20 */ 
     21 
     22#ifndef __PLAT_CBUS_H 
     23#define __PLAT_CBUS_H 
     24 
     25#define CBUS_RETU_DEVICE_ID     0x01 
     26#define CBUS_TAHVO_DEVICE_ID    0x02 
     27 
     28struct cbus_host_platform_data { 
     29        int     dat_gpio; 
     30        int     clk_gpio; 
     31        int     sel_gpio; 
     32}; 
     33 
     34struct cbus_retu_platform_data { 
     35        int     irq_base; 
     36        int     irq_end; 
     37        int     devid; 
     38}; 
     39 
     40#endif /* __PLAT_CBUS_H */ 
  • arch/arm/plat-omap/include/plat/irqs.h

    a b  
    411411#define TWL_IRQ_END             TWL6030_IRQ_END 
    412412#endif 
    413413 
    414 #define NR_IRQS                 TWL_IRQ_END 
     414/* GPMC related */ 
     415#define OMAP_GPMC_IRQ_BASE      (TWL_IRQ_END) 
     416#define OMAP_GPMC_NR_IRQS       7 
     417#define OMAP_GPMC_IRQ_END       (OMAP_GPMC_IRQ_BASE + OMAP_GPMC_NR_IRQS) 
     418 
     419#define CBUS_RETU_IRQ_BASE      OMAP_GPMC_IRQ_END 
     420#ifdef CONFIG_CBUS_RETU 
     421#define CBUS_RETU_NR_IRQS       16 
     422#else 
     423#define CBUS_RETU_NR_IRQS       0 
     424#endif 
     425#define CBUS_RETU_IRQ_END       (CBUS_RETU_IRQ_BASE + CBUS_RETU_NR_IRQS) 
     426 
     427#define NR_IRQS                 CBUS_RETU_IRQ_END 
    415428 
    416429#define OMAP_IRQ_BIT(irq)       (1 << ((irq) % 32)) 
    417430 
  • arch/arm/mach-omap2/omap_hwmod_2420_data.c

    a b static struct omap_hwmod_ocp_if *omap242 
    673673 
    674674static struct omap_hwmod omap2420_gpio1_hwmod = { 
    675675        .name           = "gpio1", 
     676        .flags          = HWMOD_INIT_NO_RESET, /* Workaround: Don't reset the n810 MIPID */ 
    676677        .mpu_irqs       = omap242x_gpio1_irqs, 
    677678        .mpu_irqs_cnt   = ARRAY_SIZE(omap242x_gpio1_irqs), 
    678679        .main_clk       = "gpios_fck", 
Note: See TracBrowser for help on using the repository browser.