Mostly fixes for 2.6.33
Subsystems (5)
Tony Lindgren
maintainercover Mostly fixes for 2.6.33
Hi all,
Getting into fixes mode for omap, except for the first two patches in this series. The first one adds a mux table for the cm-t35 board, and second one adds a low-level serial init function that is needed if some serial ports are left for other drivers, such as dedicated bluetooth driver.
Other than that, the series contains various fixes from the linux-omap list.
Regards,
Tony
---
Anand Gadiyar (1):
omap3: zoom2/3: make MMC slot work again
Cory Maccarrone (1):
omap1: htcherald: Update defconfig to include mux support
Janusz Krzysztofik (1):
omap1: LCD_DMA: Use some define rather than a hexadecimal
Kalle Valo (1):
omap3: rx51: Use wl1251 in SPI mode 3
Ladislav Michl (1):
omap: arch/arm/plat-omap/devices.c - sort alphabetically
Madhusudhan Chikkature (1):
omap3: Zoom2/3: Update hsmmc board config params
Mika Westerberg (1):
OMAP3: serial - allow platforms specify which UARTs to initialize
Mike Rapoport (1):
omap3: cm-t35: add mux initialization
Sanjeev Premi (1):
omap3: Fix OMAP35XX_REV macros
Sergey Lapin (1):
omap3: id code detection 3525 vs 3515
Vimal Singh (1):
omap: Correcting GPMC_CONFIG1_DEVICETYPE_NAND
manjugk manjugk (1):
omap3 : Enable TWL4030 Keypad for Zoom2 and Zoom3 boards
vikram pandita (2):
omap: header: remove unused data-type
omap: serial: fix non-empty uart fifo read abort
arch/arm/configs/htcherald_defconfig | 9 ++ arch/arm/configs/omap_zoom2_defconfig | 3 + arch/arm/configs/omap_zoom3_defconfig | 3 + arch/arm/mach-omap1/include/mach/lcdc.h | 57 +++++++++++++++ arch/arm/mach-omap1/lcd_dma.c | 3 + arch/arm/mach-omap2/Kconfig | 1 arch/arm/mach-omap2/board-cm-t35.c | 96 ++++++++++++++++++++++++-- arch/arm/mach-omap2/board-rx51-peripherals.c | 2 - arch/arm/mach-omap2/board-zoom-peripherals.c | 14 ++-- arch/arm/mach-omap2/id.c | 4 + arch/arm/mach-omap2/serial.c | 88 ++++++++++++++++++++---- arch/arm/plat-omap/devices.c | 68 +++++++++--------- arch/arm/plat-omap/include/plat/board.h | 9 -- arch/arm/plat-omap/include/plat/cpu.h | 20 +++-- arch/arm/plat-omap/include/plat/gpmc.h | 2 - arch/arm/plat-omap/include/plat/serial.h | 1 drivers/video/omap/lcdc.c | 33 --------- 17 files changed, 291 insertions(+), 122 deletions(-) create mode 100644 arch/arm/mach-omap1/include/mach/lcdc.h
Signature · 1 line
Signature
Tony Lindgren
maintainerPATCH 1/14 omap3: cm-t35: add mux initialization
From: Mike Rapoport <[email protected]>
CM-T35 can be assembled with different set of peripherals thus making certain interfaces available to user as GPIOs or dedicated pins. Because of it CM-T35 bootloader sets up mux configuration only for pins necessary to boot the system and the rest of the mux configuration is done by the kernel. Besides, having mux configuration in the kernel allows to minimize dependancy on bootloader.
--- arch/arm/mach-omap2/Kconfig | 1 arch/arm/mach-omap2/board-cm-t35.c | 96 +++++++++++++++++++++++++++++++++--- 2 files changed, 90 insertions(+), 7 deletions(-)
arch/arm/mach-omap2/Kconfig +1 -0
@@ -135,6 +135,7 @@ config MACH_CM_T35 bool "CompuLab CM-T35 module" depends on ARCH_OMAP3 && ARCH_OMAP34XX select OMAP_PACKAGE_CUS + select OMAP_MUX config MACH_IGEP0020 bool "IGEP0020"
arch/arm/mach-omap2/board-cm-t35.c +89 -7
111 lines not on this page · raw message
Tony Lindgren
maintainerPATCH 2/14 OMAP3: serial - allow platforms specify which UARTs to initialize
In reply to Tony LindgrenFrom: Mika Westerberg <[email protected]>
This patch adds new function: omap_serial_init_port(port) that can be used to initialize only selected UARTs as serial ports. Platforms can then in their board files call this function instead of omap_serial_init() if they don't want to use all UARTs as serial ports.
--- arch/arm/mach-omap2/serial.c | 70 ++++++++++++++++++++++++------ arch/arm/plat-omap/include/plat/serial.h | 1 2 files changed, 56 insertions(+), 15 deletions(-)
arch/arm/mach-omap2/serial.c +55 -15
@@ -631,24 +631,64 @@ void __init omap_serial_early_init(void) } } -void __init omap_serial_init (void ) +/** +* omap_serial_init_port() - initialize single serial port +* @port: serial port number (0-3) +* +* This function initialies serial driver for given @port only. +* Platforms can call this function instead of omap_serial_init() +* if they don't plan to use all available UARTs as serial ports. +* +* Don't mix calls to omap_serial_init_port() and omap_serial_init(), +* use only one of the two. +*/ +void __init omap_serial_init_port (int port) { -int i; +struct omap_uart_state *uart; +struct platform_device *pdev; +struct device *dev; -for (i =0 ; i <ARRAY_SIZE (omap_uart); i++) { -struct omap_uart_state *uart = &omap_uart[i]; -struct platform_device *pdev = &uart->pdev; -struct device *dev = &pdev->dev; +BUG_ON (port <0 ); +BUG_ON (port >=ARRAY_SIZE (omap_uart)); -omap_uart_reset (uart); -omap_uart_idle_init (uart); + uart = &omap_uart[port]; + pdev = &uart->pdev; + dev = &pdev->dev; -if (WARN_ON (platform_device_register (pdev))) -continue ; -if ((cpu_is_omap34xx () && uart->padconf) || - (uart->wk_en && uart->wk_mask)) { -device_init_wakeup (dev, true); -DEV_CREATE_FILE (dev, &dev_attr_sleep_timeout); - } +omap_uart_reset (uart); +omap_uart_idle_init (uart); + +if (WARN_ON (platform_device_register (pdev))) +return ; + +if ((cpu_is_omap34xx () && uart->padconf) || + (uart->wk_en && uart->wk_mask)) { +device_init_wakeup (dev, true); +DEV_CREATE_FILE (dev, &dev_attr_sleep_timeout); } + +/* omap44xx: Never read empty UART fifo +* omap3xxx: Never read empty UART fifo on UARTs +* with IP rev >=0x52 +*/ +if (cpu_is_omap44xx ()) + uart->p->serial_in = serial_in_override; +else if ((serial_read_reg (uart->p,UART_OMAP_MVER ) &0xFF ) + >=UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV ) + uart->p->serial_in = serial_in_override; +} + +/** +* omap_serial_init() - intialize all supported serial ports +* +* Initializes all available UARTs as serial ports. Platforms +* can call this function when they want to have default behaviour +* for serial ports (e.g initialize them all as serial ports). +*/ +void __init omap_serial_init (void ) +{ +int i; + +for (i =0 ; i <ARRAY_SIZE (omap_uart); i++) +omap_serial_init_port (i); }
arch/arm/plat-omap/include/plat/serial.h +1 -0
@@ -53,6 +53,7 @@#ifndef __ASSEMBLER__extern void __init omap_serial_early_init (void );extern void omap_serial_init (void ); +extern void omap_serial_init_port (int port);extern int omap_uart_can_sleep (void );extern void omap_uart_check_wakeup (void );extern void omap_uart_prepare_suspend (void );
Tony Lindgren
maintainerPATCH 3/14 omap: Correcting GPMC_CONFIG1_DEVICETYPE_NAND
In reply to Tony LindgrenFrom: Vimal Singh <[email protected]>
For NAND devices '2' should be used with GPMC_CONFIG1_DEVICETYPE instead of '1'.
--- arch/arm/plat-omap/include/plat/gpmc.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/plat-omap/include/plat/gpmc.h +1 -1
@@ -45,7 +45,7 @@#define GPMC_CONFIG1_DEVICESIZE_16 GPMC_CONFIG1_DEVICESIZE(1)#define GPMC_CONFIG1_DEVICETYPE (val) ((val & 3) << 10)#define GPMC_CONFIG1_DEVICETYPE_NOR GPMC_CONFIG1_DEVICETYPE(0) -#define GPMC_CONFIG1_DEVICETYPE_NAND GPMC_CONFIG1_DEVICETYPE(1) +#define GPMC_CONFIG1_DEVICETYPE_NAND GPMC_CONFIG1_DEVICETYPE(2)#define GPMC_CONFIG1_MUXADDDATA (1 << 9)#define GPMC_CONFIG1_TIME_PARA_GRAN (1 << 4)#define GPMC_CONFIG1_FCLK_DIV (val) (val & 3)
Tony Lindgren
maintainerPATCH 4/14 omap: arch/arm/plat-omap/devices.c - sort alphabetically
In reply to Tony LindgrenFrom: Ladislav Michl <[email protected]>
Comment in omap_init_devices asks to keep init calls and their implementations in alphabetical order, so let it be that way.
--- arch/arm/plat-omap/devices.c | 68 +++++++++++++++++++++--------------------- 1 files changed, 34 insertions(+), 34 deletions(-)
arch/arm/plat-omap/devices.c +34 -34
@@ -242,6 +242,39 @@ fail:/*-------------------------------------------------------------------------*/ +#if defined(CONFIG_HW_RANDOM_OMAP ) || defined(CONFIG_HW_RANDOM_OMAP_MODULE ) + +#ifdef CONFIG_ARCH_OMAP24XX +#define OMAP_RNG_BASE 0x480A0000 +#else +#define OMAP_RNG_BASE 0xfffe5000 +#endif + +static struct resource rng_resources[] = { + { + .start =OMAP_RNG_BASE , + .end =OMAP_RNG_BASE +0x4f , + .flags =IORESOURCE_MEM , + }, +}; + +static struct platform_device omap_rng_device = { + .name ="omap_rng" , + .id =-1 , + .num_resources =ARRAY_SIZE (rng_resources), + .resource = rng_resources, +}; + +static void omap_init_rng (void ) +{ + (void )platform_device_register (&omap_rng_device); +} +#else +static inline void omap_init_rng (void ) {} +#endif + +/*-------------------------------------------------------------------------*/ +/* Numbering for the SPI-capable controllers when used for SPI: * spi = 1 * uwire = 2
@@ -324,39 +357,6 @@ static void omap_init_wdt(void)static inline void omap_init_wdt (void ) {}#endif -/*-------------------------------------------------------------------------*/ - -#if defined(CONFIG_HW_RANDOM_OMAP ) || defined(CONFIG_HW_RANDOM_OMAP_MODULE ) - -#ifdef CONFIG_ARCH_OMAP24XX -#define OMAP_RNG_BASE 0x480A0000 -#else -#define OMAP_RNG_BASE 0xfffe5000 -#endif - -static struct resource rng_resources[] = { - { - .start =OMAP_RNG_BASE , - .end =OMAP_RNG_BASE +0x4f , - .flags =IORESOURCE_MEM , - }, -}; - -static struct platform_device omap_rng_device = { - .name ="omap_rng" , - .id =-1 , - .num_resources =ARRAY_SIZE (rng_resources), - .resource = rng_resources, -}; - -static void omap_init_rng (void ) -{ - (void )platform_device_register (&omap_rng_device); -} -#else -static inline void omap_init_rng (void ) {} -#endif -/* * This gets called after board-specific INIT_MACHINE, and initializes most * on-chip peripherals accessible on this board (except for few like USB):
@@ -384,9 +384,9 @@ static int __init omap_init_devices(void)*/ omap_init_dsp ();omap_init_kp (); +omap_init_rng ();omap_init_uwire ();omap_init_wdt (); -omap_init_rng ();return 0 ; }arch_initcall (omap_init_devices);
Tony Lindgren
maintainerPATCH 5/14 omap: header: remove unused data-type
In reply to Tony LindgrenFrom: vikram pandita <[email protected]>
Remove unused data type omap_gpio_switch_config
Thereby also get rid of following sparse warnings:arch/arm/plat-omap/include/plat/board.h :121:20:
warning: dubious bitfield without explicit signed' or unsigned'arch/arm/plat-omap/include/plat/board.h :122:19:
warning: dubious bitfield without explicit signed' or unsigned'arch/arm/plat-omap/include/plat/board.h :123:24:
warning: dubious bitfield without explicit signed' or unsigned'
--- arch/arm/plat-omap/include/plat/board.h | 9 --------- 1 files changed, 0 insertions(+), 9 deletions(-)
arch/arm/plat-omap/include/plat/board.h +0 -9
@@ -114,15 +114,6 @@ struct omap_pwm_led_platform_data {void (*set_power)(struct omap_pwm_led_platform_data *self,int on_off); }; -/* See arch/arm/plat-omap/include/mach/gpio-switch.h for definitions */ -struct omap_gpio_switch_config { -char name[12 ]; -u16 gpio; -int flags:4 ; -int type:4 ; -int key_code:24 ;/* Linux key code */ -}; -struct omap_uart_config {/* Bit field of UARTs present; bit 0 --> UART1 */ unsigned int enabled_uarts;
Tony Lindgren
maintainerPATCH 6/14 omap1: LCD_DMA: Use some define rather than a hexadecimal
In reply to Tony LindgrenFrom: Janusz Krzysztofik <[email protected]>
The patch corrects the issue introduced with one of my earlier patches:
OMAP: DMA: Fix omapfb/lcdc on OMAP1510 broken when PM set[1]
as pointed out by OMAP subsystem maintainer.
Applies on top of my prevoius patch:
OMAP: DMA: move LCD DMA related code from plat-omap to mach-omap1[2]
Tested on Amstrad Delta
Compile tested with omap_generic_2420_defconfig
[1] http://patchwork.kernel.org/patch/57922/
[2] http://patchwork.kernel.org/patch/61952/
--- arch/arm/mach-omap1/include/mach/lcdc.h | 57 +++++++++++++++++++++++++++++++ arch/arm/mach-omap1/lcd_dma.c | 3 +- drivers/video/omap/lcdc.c | 33 +----------------- 3 files changed, 60 insertions(+), 33 deletions(-) create mode 100644 arch/arm/mach-omap1/include/mach/lcdc.h
arch/arm/mach-omap1/include/mach/lcdc.h new file +57 -0
@@ -0,0 +1,57 @@ +/* +* arch/arm/mach-omap1/include/mach/lcdc.h +* +* Extracted from drivers/video/omap/lcdc.c +* Copyright (C) 2004 Nokia Corporation +* Author: Imre Deak <[email protected]> +* +* 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. +*/ +#ifndef __MACH_LCDC_H__ +#define __MACH_LCDC_H__ + +#define OMAP_LCDC_BASE 0xfffec000 +#define OMAP_LCDC_SIZE 256 +#define OMAP_LCDC_IRQ INT_LCD_CTRL + +#define OMAP_LCDC_CONTROL (OMAP_LCDC_BASE + 0x00) +#define OMAP_LCDC_TIMING0 (OMAP_LCDC_BASE + 0x04) +#define OMAP_LCDC_TIMING1 (OMAP_LCDC_BASE + 0x08) +#define OMAP_LCDC_TIMING2 (OMAP_LCDC_BASE + 0x0c) +#define OMAP_LCDC_STATUS (OMAP_LCDC_BASE + 0x10) +#define OMAP_LCDC_SUBPANEL (OMAP_LCDC_BASE + 0x14) +#define OMAP_LCDC_LINE_INT (OMAP_LCDC_BASE + 0x18) +#define OMAP_LCDC_DISPLAY_STATUS (OMAP_LCDC_BASE + 0x1c) + +#define OMAP_LCDC_STAT_DONE (1 << 0) +#define OMAP_LCDC_STAT_VSYNC (1 << 1) +#define OMAP_LCDC_STAT_SYNC_LOST (1 << 2) +#define OMAP_LCDC_STAT_ABC (1 << 3) +#define OMAP_LCDC_STAT_LINE_INT (1 << 4) +#define OMAP_LCDC_STAT_FUF (1 << 5) +#define OMAP_LCDC_STAT_LOADED_PALETTE (1 << 6) + +#define OMAP_LCDC_CTRL_LCD_EN (1 << 0) +#define OMAP_LCDC_CTRL_LCD_TFT (1 << 7) +#define OMAP_LCDC_CTRL_LINE_IRQ_CLR_SEL (1 << 10) + +#define OMAP_LCDC_IRQ_VSYNC (1 << 2) +#define OMAP_LCDC_IRQ_DONE (1 << 3) +#define OMAP_LCDC_IRQ_LOADED_PALETTE (1 << 4) +#define OMAP_LCDC_IRQ_LINE_NIRQ (1 << 5) +#define OMAP_LCDC_IRQ_LINE (1 << 6) +#define OMAP_LCDC_IRQ_MASK (((1 << 5) - 1) << 2) + +#endif /* __MACH_LCDC_H__ */
arch/arm/mach-omap1/lcd_dma.c +2 -1
@@ -28,6 +28,7 @@#include <linux/io.h> #include <mach/hardware.h> +#include <mach/lcdc.h> #include <plat/dma.h> int omap_lcd_dma_running (void )
@@ -37,7 +38,7 @@ int omap_lcd_dma_running(void)* when it gets enabled, so assume DMA running if LCD enabled. */ if (cpu_is_omap1510 ()) -if (omap_readw (0xfffec000 +0x00 ) & (1 <<0 )) +if (omap_readw (OMAP_LCDC_CONTROL ) &OMAP_LCDC_CTRL_LCD_EN )return 1 ;/* Check if LCD DMA is running */
drivers/video/omap/lcdc.c +1 -32
@@ -29,6 +29,7 @@#include <linux/vmalloc.h> #include <linux/clk.h> +#include <mach/lcdc.h> #include <plat/dma.h> #include <asm/mach-types.h>
@@ -39,38 +40,6 @@#define MODULE_NAME "lcdc" -#define OMAP_LCDC_BASE 0xfffec000 -#define OMAP_LCDC_SIZE 256 -#define OMAP_LCDC_IRQ INT_LCD_CTRL - -#define OMAP_LCDC_CONTROL (OMAP_LCDC_BASE + 0x00) -#define OMAP_LCDC_TIMING0 (OMAP_LCDC_BASE + 0x04) -#define OMAP_LCDC_TIMING1 (OMAP_LCDC_BASE + 0x08) -#define OMAP_LCDC_TIMING2 (OMAP_LCDC_BASE + 0x0c) -#define OMAP_LCDC_STATUS (OMAP_LCDC_BASE + 0x10) -#define OMAP_LCDC_SUBPANEL (OMAP_LCDC_BASE + 0x14) -#define OMAP_LCDC_LINE_INT (OMAP_LCDC_BASE + 0x18) -#define OMAP_LCDC_DISPLAY_STATUS (OMAP_LCDC_BASE + 0x1c) - -#define OMAP_LCDC_STAT_DONE (1 << 0) -#define OMAP_LCDC_STAT_VSYNC (1 << 1) -#define OMAP_LCDC_STAT_SYNC_LOST (1 << 2) -#define OMAP_LCDC_STAT_ABC (1 << 3) -#define OMAP_LCDC_STAT_LINE_INT (1 << 4) -#define OMAP_LCDC_STAT_FUF (1 << 5) -#define OMAP_LCDC_STAT_LOADED_PALETTE (1 << 6) - -#define OMAP_LCDC_CTRL_LCD_EN (1 << 0) -#define OMAP_LCDC_CTRL_LCD_TFT (1 << 7) -#define OMAP_LCDC_CTRL_LINE_IRQ_CLR_SEL (1 << 10) - -#define OMAP_LCDC_IRQ_VSYNC (1 << 2) -#define OMAP_LCDC_IRQ_DONE (1 << 3) -#define OMAP_LCDC_IRQ_LOADED_PALETTE (1 << 4) -#define OMAP_LCDC_IRQ_LINE_NIRQ (1 << 5) -#define OMAP_LCDC_IRQ_LINE (1 << 6) -#define OMAP_LCDC_IRQ_MASK (((1 << 5) - 1) << 2) -#define MAX_PALETTE_SIZE PAGE_SIZEenum lcdc_load_mode {
Tony Lindgren
maintainerPATCH 7/14 omap1: htcherald: Update defconfig to include mux support
In reply to Tony LindgrenFrom: Cory Maccarrone <[email protected]>
The existing htcherald_defconfig did not include mux support, which prevented USB and other functionality from working out of the box. This change updates the defconfig to add it in. It also aligns the defconfig to the -rc8 kernel config.
--- arch/arm/configs/htcherald_defconfig | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
arch/arm/configs/htcherald_defconfig +6 -3
@@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.32-rc6 -# Sat Nov 14 10:56:01 2009 +# Linux kernel version: 2.6.32-rc8 +# Sat Dec 5 12:16:24 2009 # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -198,7 +198,9 @@ CONFIG_ARCH_OMAP1=y # OMAP Feature Selections # # CONFIG_OMAP_RESET_CLOCKS is not set -# CONFIG_OMAP_MUX is not set +CONFIG_OMAP_MUX=y +# CONFIG_OMAP_MUX_DEBUG is not set +CONFIG_OMAP_MUX_WARNINGS=y CONFIG_OMAP_MCBSP=y # CONFIG_OMAP_MBOX_FWK is not set CONFIG_OMAP_MPU_TIMER=y
@@ -207,6 +209,7 @@ CONFIG_OMAP_LL_DEBUG_UART1=y # CONFIG_OMAP_LL_DEBUG_UART2 is not set # CONFIG_OMAP_LL_DEBUG_UART3 is not set # CONFIG_OMAP_LL_DEBUG_NONE is not set +CONFIG_OMAP_SERIAL_WAKE=y # CONFIG_OMAP_PM_NONE is not set CONFIG_OMAP_PM_NOOP=y
Tony Lindgren
maintainerPATCH 8/14 omap3: zoom2/3: make MMC slot work again
In reply to Tony LindgrenFrom: Anand Gadiyar <[email protected]>
omap3: zoom2/3: make MMC slot work again
Commit 12f8dfb56 accidentally broke MMC on zoom2/3. The .vmmc1 field of zoom_twldata was deleted. Restoring it allows the MMC slot to work again
--- arch/arm/mach-omap2/board-zoom-peripherals.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-zoom-peripherals.c +1 -0
@@ -236,6 +236,7 @@ static struct twl4030_platform_data zoom_twldata = { .gpio = &zoom_gpio_data, .keypad = &zoom_kp_twl4030_data, .codec = &zoom_codec_data, + .vmmc1 = &zoom_vmmc1, .vmmc2 = &zoom_vmmc2, .vsim = &zoom_vsim,
Tony Lindgren
maintainerPATCH 9/14 omap3: rx51: Use wl1251 in SPI mode 3
In reply to Tony LindgrenFrom: Kalle Valo <[email protected]>
Otherwise Extreme Lower Power (ELP) wakeup doesn't work properly.
--- arch/arm/mach-omap2/board-rx51-peripherals.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/board-rx51-peripherals.c +1 -1
@@ -60,7 +60,7 @@ static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = { .bus_num = 4, .chip_select = 0, .max_speed_hz = 48000000, - .mode = SPI_MODE_2, + .mode = SPI_MODE_3, .controller_data = &wl1251_mcspi_config, .platform_data = &wl1251_pdata, },
Tony Lindgren
maintainerPATCH 10/14 omap3: id code detection 3525 vs 3515
In reply to Tony LindgrenFrom: Sergey Lapin <[email protected]>
The runtime detection of OMAP3515 and OMAP3525
was reversed.
--- arch/arm/mach-omap2/id.c | 4 ++-- arch/arm/plat-omap/include/plat/cpu.h | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-)
arch/arm/mach-omap2/id.c +2 -2
@@ -302,10 +302,10 @@ void __init omap3_cpuinfo(void) }else if (omap3_has_iva () &&omap3_has_sgx ()) {/* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */ strcpy (cpu_name,"OMAP3430/3530" ); - }else if (omap3_has_sgx ()) { + }else if (omap3_has_iva ()) { omap_revision =OMAP3525_REV (rev);strcpy (cpu_name,"OMAP3525" ); - }else if (omap3_has_iva ()) { + }else if (omap3_has_sgx ()) { omap_revision =OMAP3515_REV (rev);strcpy (cpu_name,"OMAP3515" ); }else {
arch/arm/plat-omap/include/plat/cpu.h +4 -4
@@ -395,11 +395,11 @@ IS_OMAP_TYPE(3517, 0x3517) (!omap3_has_iva()) && \ (!omap3_has_sgx()))# define cpu_is_omap3515 () (cpu_is_omap3430() && \ - (omap3_has_iva()) && \ - (!omap3_has_sgx())) + (!omap3_has_iva()) && \ + (omap3_has_sgx()))# define cpu_is_omap3525 () (cpu_is_omap3430() && \ - (omap3_has_sgx()) && \ - (!omap3_has_iva())) + (!omap3_has_sgx()) && \ + (omap3_has_iva()))# define cpu_is_omap3530 () (cpu_is_omap3430())# define cpu_is_omap3505 () is_omap3505()# define cpu_is_omap3517 () is_omap3517()
Tony Lindgren
maintainerPATCH 11/14 omap3 : Enable TWL4030 Keypad for Zoom2 and Zoom3 boards
In reply to Tony LindgrenFrom: manjugk manjugk <[email protected]>
The TWL4030 keypad driver is not enabled by default for zoom2 and zoom3 boards.
This patch will enable the same for both zoom2 and zoom3 boards.
Tested on zoom2(3430) and zoom3(3630) boards.
--- arch/arm/configs/omap_zoom2_defconfig | 3 ++- arch/arm/configs/omap_zoom3_defconfig | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-)
arch/arm/configs/omap_zoom2_defconfig +2 -1
@@ -610,7 +610,8 @@ CONFIG_INPUT_EVDEV=y # # Input Device Drivers # -# CONFIG_INPUT_KEYBOARD is not set +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_TWL4030=y # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set
arch/arm/configs/omap_zoom3_defconfig +2 -1
@@ -629,7 +629,8 @@ CONFIG_INPUT_EVDEV=y # # Input Device Drivers # -# CONFIG_INPUT_KEYBOARD is not set +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_TWL4030=y # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set
Tony Lindgren
maintainerPATCH 12/14 omap3: Zoom2/3: Update hsmmc board config params
In reply to Tony LindgrenFrom: Madhusudhan Chikkature <[email protected]>
Update the hsmmc zoom peripheral configuration to support:
Power saving mode
mmc2 8-bit support
Configure mmc2 as non removable
--- arch/arm/mach-omap2/board-zoom-peripherals.c | 13 ++++++++----- 1 files changed, 8 insertions(+), 5 deletions(-)
arch/arm/mach-omap2/board-zoom-peripherals.c +8 -5
@@ -152,14 +152,20 @@ static struct regulator_init_data zoom_vsim = {static struct twl4030_hsmmc_info mmc[]__initdata = { { + .name ="external" , .mmc =1 , .wires =4 , .gpio_wp = -EINVAL , + .power_saving = true, }, { + .name ="internal" , .mmc =2 , - .wires =4 , + .wires =8 , + .gpio_cd = -EINVAL , .gpio_wp = -EINVAL , + .nonremovable = true, + .power_saving = true, }, {}/* Terminator */ };
@@ -167,11 +173,8 @@ static struct twl4030_hsmmc_info mmc[] __initdata = {static int zoom_twl_gpio_setup (struct device *dev,unsigned gpio,unsigned ngpio) { -/* gpio + 0 is "mmc0_cd" (input/IRQ), -* gpio + 1 is "mmc1_cd" (input/IRQ) -*/ +/* gpio + 0 is "mmc0_cd" (input/IRQ) */ mmc[0 ].gpio_cd = gpio +0 ; - mmc[1 ].gpio_cd = gpio +1 ;twl4030_mmc_init (mmc);/* link regulators to MMC adapters ... we "know" the
Tony Lindgren
maintainerPATCH 13/14 omap: serial: fix non-empty uart fifo read abort
In reply to Tony LindgrenFrom: vikram pandita <[email protected]>
Date: Tue, 8 Dec 2009 10:17:28 -0800
Subject: [PATCH] omap: serial: fix non-empty uart fifo read abort
OMAP3xxx and OMAP4430 UART IP blocks have a restriction wrt RX FIFO. Empty RX fifo read causes an abort.
OMAP3xxx:
UART IP revision >= 0x52 have this issue MVR register format is: Bits Field Name Description Type Reset 31:8 RESERVED RO 0x0 7:4 MAJOR Major revision number of the module. RO 0x-- 3:0 MINOR Minor revision number of the module. RO 0x--
OMAP4xxx:
All revisions have this issue Revision id check is not used as the format of MVR resigster has changed For omap4 MVR register reads as: 0x50410602 => Revision id = 0x0602 Format of MVR register on omap4 is: (Courtesy: Cousson, Benoit) Bits Field Name Description Type Reset 31:30 SCHEME Scheme revision number of module RO 0x1 29:28 RESERVED RO 0x1 27:16 FUNC Function revision number of module RO 0x041 15:11 RTL Rtl revision number of module RO 0x00 10:8 MAJOR Major revision number of the module. RO 0x6 7:6 CUSTOM Custom revision number of the module. RO 0x0 5:0 MINOR Minor revision number of the module. RO 0x02
Override the default 8250 read handler: mem_serial_in() by a custom handler: serial_in_8250()
which makes sure that RX fifo is not read when empty
tested on zoom3(3630) board
arch/arm/mach-omap2/serial.c +27 -9
@@ -33,6 +33,7 @@#include "pm.h" #include "prm-regbits-34xx.h" +#define UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV 0x52#define UART_OMAP_WER 0x17/* Wake-up enable register */ #define DEFAULT_TIMEOUT (5 * HZ)
@@ -572,6 +573,23 @@ static struct omap_uart_state omap_uart[] = {#endif }; +/* +* Override the default 8250 read handler: mem_serial_in() +* Empty RX fifo read causes an abort on omap3630 and omap4 +* This function makes sure that an empty rx fifo is not read on these silicons +* (OMAP1/2/3430 are not affected) +*/ +static unsigned int serial_in_override (struct uart_port *up,int offset) +{ +if (UART_RX == offset) { +unsigned int lsr; + lsr =serial_read_reg (omap_uart[up->line].p,UART_LSR ); +if (!(lsr &UART_LSR_DR )) +return -EPERM ; + } +return serial_read_reg (omap_uart[up->line].p, offset); +} +void __init omap_serial_early_init (void ) {int i;
@@ -667,15 +685,15 @@ void __init omap_serial_init_port(int port)DEV_CREATE_FILE (dev, &dev_attr_sleep_timeout); } -/* omap44xx: Never read empty UART fifo -* omap3xxx: Never read empty UART fifo on UARTs -* with IP rev >=0x52 -*/ -if (cpu_is_omap44xx ()) - uart->p->serial_in = serial_in_override; -else if ((serial_read_reg (uart->p,UART_OMAP_MVER ) &0xFF ) - >=UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV ) - uart->p->serial_in = serial_in_override; +/* omap44xx: Never read empty UART fifo +* omap3xxx: Never read empty UART fifo on UARTs +* with IP rev >=0x52 +*/ +if (cpu_is_omap44xx ()) + uart->p->serial_in = serial_in_override; +else if ((serial_read_reg (uart->p,UART_OMAP_MVER ) &0xFF ) + >=UART_OMAP_NO_EMPTY_FIFO_READ_IP_REV ) + uart->p->serial_in = serial_in_override; }/**
Tony Lindgren
maintainerPATCH 14/14 omap3: Fix OMAP35XX_REV macros
In reply to Tony LindgrenFrom: Sanjeev Premi <[email protected]>
Date: Thu, 10 Dec 2009 14:51:35 +0000
Subject: [PATCH] omap3: Fix OMAP35XX_REV macros
In original implementation, the revision passed to these macros contained revision number in lower nibble.
But, later the revision bits (OMAP_REVBITS_XX) were defined to use omap_revision[15:08] where revision number is containied in higher nibble.
This patch updates the macros; else incorrect revision is detected for OMAP35xx devices.
arch/arm/plat-omap/include/plat/cpu.h +6 -6
@@ -438,12 +438,12 @@ IS_OMAP_TYPE(3517, 0x3517)#define OMAP3630_REV_ES1_0 0x36300034#define OMAP35XX_CLASS 0x35000034 -#define OMAP3503_REV (v) (OMAP35XX_CLASS | (0x3503 << 16) | (v << 12)) -#define OMAP3515_REV (v) (OMAP35XX_CLASS | (0x3515 << 16) | (v << 12)) -#define OMAP3525_REV (v) (OMAP35XX_CLASS | (0x3525 << 16) | (v << 12)) -#define OMAP3530_REV (v) (OMAP35XX_CLASS | (0x3530 << 16) | (v << 12)) -#define OMAP3505_REV (v) (OMAP35XX_CLASS | (0x3505 << 16) | (v << 12)) -#define OMAP3517_REV (v) (OMAP35XX_CLASS | (0x3517 << 16) | (v << 12)) +#define OMAP3503_REV (v) (OMAP35XX_CLASS | (0x3503 << 16) | (v << 8)) +#define OMAP3515_REV (v) (OMAP35XX_CLASS | (0x3515 << 16) | (v << 8)) +#define OMAP3525_REV (v) (OMAP35XX_CLASS | (0x3525 << 16) | (v << 8)) +#define OMAP3530_REV (v) (OMAP35XX_CLASS | (0x3530 << 16) | (v << 8)) +#define OMAP3505_REV (v) (OMAP35XX_CLASS | (0x3505 << 16) | (v << 8)) +#define OMAP3517_REV (v) (OMAP35XX_CLASS | (0x3517 << 16) | (v << 8))#define OMAP443X_CLASS 0x44300044#define OMAP4430_REV_ES1_0 0x44300044