msm: Add gpiolib devices to MSM7x30 and QSD8x50.
Subsystems (2)
v3 cover msm: Add gpiolib devices to MSM7x30 and QSD8x50.
Hi folks:
Here is a proposed patch series which adds the configuration and devices needed to enable gpiolib on the MSM7x30 and QSD8x50 chipsets.
Thanks,
G
Gregory Bean (3):
msm: Add gpio register address mapping information.
msm: 7x30: Add gpio device configuration.
msm: 8x50: add gpio device configuration.
arch/arm/mach-msm/board-msm7x30.c | 27 ++++++++- arch/arm/mach-msm/board-qsd8x50.c | 27 ++++++++- arch/arm/mach-msm/devices-msm7x30.c | 21 +++++++ arch/arm/mach-msm/devices-qsd8x50.c | 21 +++++++ arch/arm/mach-msm/devices.h | 33 +++++++++++ arch/arm/mach-msm/gpio_hw-7x30.h | 100 +++++++++++++++++++++++++++++++++ arch/arm/mach-msm/gpio_hw-7xxx.h | 84 +++++++++++++++++++++++++++ arch/arm/mach-msm/gpio_hw-8x50.h | 100 +++++++++++++++++++++++++++++++++ arch/arm/mach-msm/gpio_hw.h | 35 +++++++++++ arch/arm/mach-msm/include/mach/gpio.h | 2 + 10 files changed, 446 insertions(+), 4 deletions(-) create mode 100644 arch/arm/mach-msm/gpio_hw-7x30.h create mode 100644 arch/arm/mach-msm/gpio_hw-7xxx.h create mode 100644 arch/arm/mach-msm/gpio_hw-8x50.h create mode 100644 arch/arm/mach-msm/gpio_hw.h
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
PATCH v3 1/3 msm: Add gpio register address mapping information.
Add tables containing iomap information for gpio registers on all supported MSM7x and QSD8x targets.
--- arch/arm/mach-msm/gpio_hw-7x30.h | 100 ++++++++++++++++++++++++++++++++++++++ arch/arm/mach-msm/gpio_hw-7xxx.h | 84 ++++++++++++++++++++++++++++++++ arch/arm/mach-msm/gpio_hw-8x50.h | 100 ++++++++++++++++++++++++++++++++++++++ arch/arm/mach-msm/gpio_hw.h | 35 +++++++++++++ 4 files changed, 319 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-msm/gpio_hw-7x30.h create mode 100644 arch/arm/mach-msm/gpio_hw-7xxx.h create mode 100644 arch/arm/mach-msm/gpio_hw-8x50.h create mode 100644 arch/arm/mach-msm/gpio_hw.h
arch/arm/mach-msm/gpio_hw-7x30.h new file +100 -0
@@ -0,0 +1,100 @@ +/* Copyright (c) 2010, Code Aurora Forum. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 and +* only version 2 as published by the Free Software Foundation. +* +* 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., 51 Franklin Street, Fifth Floor, Boston, MA +* 02110-1301, USA. +*/ +#ifndef __ARCH_ARM_MACH_MSM_GPIO_HW_7X30_H +#define __ARCH_ARM_MACH_MSM_GPIO_HW_7X30_H + +/* output value */ +#define GPIO_OUT_0 GPIO1_REG(0x00)/* gpio 15-0 */ +#define GPIO_OUT_1 GPIO2_REG(0x00)/* gpio 43-16 */ +#define GPIO_OUT_2 GPIO1_REG(0x04)/* gpio 67-44 */ +#define GPIO_OUT_3 GPIO1_REG(0x08)/* gpio 94-68 */ +#define GPIO_OUT_4 GPIO1_REG(0x0C)/* gpio 106-95 */ +#define GPIO_OUT_5 GPIO1_REG(0x50)/* gpio 133-107 */ +#define GPIO_OUT_6 GPIO1_REG(0xC4)/* gpio 150-134 */ +#define GPIO_OUT_7 GPIO1_REG(0x214)/* gpio 181-151 */ + +/* same pin map as above, output enable */ +#define GPIO_OE_0 GPIO1_REG(0x10) +#define GPIO_OE_1 GPIO2_REG(0x08) +#define GPIO_OE_2 GPIO1_REG(0x14) +#define GPIO_OE_3 GPIO1_REG(0x18) +#define GPIO_OE_4 GPIO1_REG(0x1C) +#define GPIO_OE_5 GPIO1_REG(0x54) +#define GPIO_OE_6 GPIO1_REG(0xC8) +#define GPIO_OE_7 GPIO1_REG(0x218) + +/* same pin map as above, input read */ +#define GPIO_IN_0 GPIO1_REG(0x34) +#define GPIO_IN_1 GPIO2_REG(0x20) +#define GPIO_IN_2 GPIO1_REG(0x38) +#define GPIO_IN_3 GPIO1_REG(0x3C) +#define GPIO_IN_4 GPIO1_REG(0x40) +#define GPIO_IN_5 GPIO1_REG(0x44) +#define GPIO_IN_6 GPIO1_REG(0xCC) +#define GPIO_IN_7 GPIO1_REG(0x21C) + +/* same pin map as above, 1=edge 0=level interrupt */ +#define GPIO_INT_EDGE_0 GPIO1_REG(0x60) +#define GPIO_INT_EDGE_1 GPIO2_REG(0x50) +#define GPIO_INT_EDGE_2 GPIO1_REG(0x64) +#define GPIO_INT_EDGE_3 GPIO1_REG(0x68) +#define GPIO_INT_EDGE_4 GPIO1_REG(0x6C) +#define GPIO_INT_EDGE_5 GPIO1_REG(0xC0) +#define GPIO_INT_EDGE_6 GPIO1_REG(0xD0) +#define GPIO_INT_EDGE_7 GPIO1_REG(0x240) + +/* same pin map as above, 1=positive 0=negative */ +#define GPIO_INT_POS_0 GPIO1_REG(0x70) +#define GPIO_INT_POS_1 GPIO2_REG(0x58) +#define GPIO_INT_POS_2 GPIO1_REG(0x74) +#define GPIO_INT_POS_3 GPIO1_REG(0x78) +#define GPIO_INT_POS_4 GPIO1_REG(0x7C) +#define GPIO_INT_POS_5 GPIO1_REG(0xBC) +#define GPIO_INT_POS_6 GPIO1_REG(0xD4) +#define GPIO_INT_POS_7 GPIO1_REG(0x228) + +/* same pin map as above, interrupt enable */ +#define GPIO_INT_EN_0 GPIO1_REG(0x80) +#define GPIO_INT_EN_1 GPIO2_REG(0x60) +#define GPIO_INT_EN_2 GPIO1_REG(0x84) +#define GPIO_INT_EN_3 GPIO1_REG(0x88) +#define GPIO_INT_EN_4 GPIO1_REG(0x8C) +#define GPIO_INT_EN_5 GPIO1_REG(0xB8) +#define GPIO_INT_EN_6 GPIO1_REG(0xD8) +#define GPIO_INT_EN_7 GPIO1_REG(0x22C) + +/* same pin map as above, write 1 to clear interrupt */ +#define GPIO_INT_CLEAR_0 GPIO1_REG(0x90) +#define GPIO_INT_CLEAR_1 GPIO2_REG(0x68) +#define GPIO_INT_CLEAR_2 GPIO1_REG(0x94) +#define GPIO_INT_CLEAR_3 GPIO1_REG(0x98) +#define GPIO_INT_CLEAR_4 GPIO1_REG(0x9C) +#define GPIO_INT_CLEAR_5 GPIO1_REG(0xB4) +#define GPIO_INT_CLEAR_6 GPIO1_REG(0xDC) +#define GPIO_INT_CLEAR_7 GPIO1_REG(0x230) + +/* same pin map as above, 1=interrupt pending */ +#define GPIO_INT_STATUS_0 GPIO1_REG(0xA0) +#define GPIO_INT_STATUS_1 GPIO2_REG(0x70) +#define GPIO_INT_STATUS_2 GPIO1_REG(0xA4) +#define GPIO_INT_STATUS_3 GPIO1_REG(0xA8) +#define GPIO_INT_STATUS_4 GPIO1_REG(0xAC) +#define GPIO_INT_STATUS_5 GPIO1_REG(0xB0) +#define GPIO_INT_STATUS_6 GPIO1_REG(0xE0) +#define GPIO_INT_STATUS_7 GPIO1_REG(0x234) + +#endif
arch/arm/mach-msm/gpio_hw-7xxx.h new file +84 -0
84 lines not on this page · raw message
arch/arm/mach-msm/gpio_hw-8x50.h new file +100 -0
100 lines not on this page · raw message
arch/arm/mach-msm/gpio_hw.h new file +35 -0
@@ -0,0 +1,35 @@ +/* Copyright (c) 2007, Google, Inc. +* Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. +* +* This software is licensed under the terms of the GNU General Public +* License version 2, as published by the Free Software Foundation, and +* may be copied, distributed, and modified under those terms. +* +* 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. +* +*/ +#ifndef __ARCH_ARM_MACH_MSM_GPIO_HW_H +#define __ARCH_ARM_MACH_MSM_GPIO_HW_H + +#include <mach/msm_iomap.h> + +#if defined(CONFIG_ARCH_MSM7X30 ) +#define GPIO1_REG (off) (MSM_GPIO1_BASE + (off)) +#define GPIO2_REG (off) (MSM_GPIO2_BASE + 0x400 + (off)) +#else +#define GPIO1_REG (off) (MSM_GPIO1_BASE + 0x800 + (off)) +#define GPIO2_REG (off) (MSM_GPIO2_BASE + 0xC00 + (off)) +#endif + +#if defined(CONFIG_ARCH_QSD8X50 ) +#include "gpio_hw-8x50.h" +#elif defined(CONFIG_ARCH_MSM7X30 ) +#include "gpio_hw-7x30.h" +#else +#include "gpio_hw-7xxx.h" +#endif + +#endif
Signature · 5 lines
1.7.0.4 -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
PATCH v3 2/3 msm: 7x30: Add gpio device configuration.
In reply to Gregory BeanAdd device configuration and board-init for gpio on the MSM7x30.
--- arch/arm/mach-msm/board-msm7x30.c | 27 +++++++++++++++++++++++++-- arch/arm/mach-msm/devices-msm7x30.c | 21 +++++++++++++++++++++ arch/arm/mach-msm/devices.h | 33 +++++++++++++++++++++++++++++++++ arch/arm/mach-msm/include/mach/gpio.h | 2 ++ 4 files changed, 81 insertions(+), 2 deletions(-)
arch/arm/mach-msm/board-msm7x30.c +25 -2
@@ -55,7 +55,29 @@ static void msm7x30_init_uart2(void) }#endif -static struct platform_device *devices[] __initdata = { +/* +* Early devices are those which provide a system service which will be +* required by one or more of the function calls in msm7x30_init. +* These devices must be probed and online first in order for +* the init routine to run successfully. +*/ +static struct platform_device *early_devices[]__initdata = { + &msm_gpio_devices[0 ], + &msm_gpio_devices[1 ], + &msm_gpio_devices[2 ], + &msm_gpio_devices[3 ], + &msm_gpio_devices[4 ], + &msm_gpio_devices[5 ], + &msm_gpio_devices[6 ], + &msm_gpio_devices[7 ], +}; + +/* +* Late devices are those which are dependent upon services initialized +* by msm7x30_init, or which simply have no dependents and can have +* their initialization deferred. +*/ +static struct platform_device *late_devices[] __initdata = {#if defined(CONFIG_SERIAL_MSM ) || defined(CONFIG_MSM_SERIAL_DEBUGGER ) &msm_device_uart2,#endif
@@ -69,10 +91,11 @@ static void __init msm7x30_init_irq(void)static void __init msm7x30_init (void ) { +platform_add_devices (early_devices,ARRAY_SIZE (early_devices));#ifdef CONFIG_SERIAL_MSM_CONSOLE msm7x30_init_uart2 ();#endif -platform_add_devices (devices,ARRAY_SIZE (devices)); +platform_add_devices (late_devices,ARRAY_SIZE (late_devices)); }static void __init msm7x30_map_io (void )
arch/arm/mach-msm/devices-msm7x30.c +21 -0
@@ -126,3 +126,24 @@ struct clk msm_clocks_7x30[] = {unsigned msm_num_clocks_7x30 =ARRAY_SIZE (msm_clocks_7x30); +static struct msm7200a_gpio_platform_data gpio_platform_data[] = { +MSM7200A_GPIO_PLATFORM_DATA (0 ,0 ,15 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (1 ,16 ,43 ,INT_GPIO_GROUP2 ), +MSM7200A_GPIO_PLATFORM_DATA (2 ,44 ,67 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (3 ,68 ,94 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (4 ,95 ,106 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (5 ,107 ,133 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (6 ,134 ,150 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (7 ,151 ,181 ,INT_GPIO_GROUP1 ), +}; + +struct platform_device msm_gpio_devices[] = { +MSM7200A_GPIO_DEVICE (0 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (1 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (2 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (3 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (4 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (5 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (6 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (7 , gpio_platform_data), +};
arch/arm/mach-msm/devices.h +33 -0
@@ -17,6 +17,8 @@#define __ARCH_ARM_MACH_MSM_DEVICES_H#include "clock.h" +#include "gpio_hw.h" +#include "msm7200a-gpio.h" extern struct platform_device msm_device_uart1;extern struct platform_device msm_device_uart2;
@@ -44,4 +46,35 @@ extern unsigned msm_num_clocks_7x30;extern struct clk msm_clocks_8x50[];extern unsigned msm_num_clocks_8x50; +#define MSM7200A_GPIO_PLATFORM_DATA (ix, begin, end, irq) \ + [ix] = { \ + .gpio_base = begin, \ + .ngpio = end - begin + 1, \ + .irq_base = MSM_GPIO_TO_INT(begin), \ + .irq_summary = irq, \ + .latch_level_irqs = false, \ + .regs = { \ + .in = GPIO_IN_ ## ix, \ + .out = GPIO_OUT_ ## ix, \ + .oe = GPIO_OE_ ## ix, \ + .int_status = GPIO_INT_STATUS_ ## ix, \ + .int_clear = GPIO_INT_CLEAR_ ## ix, \ + .int_en = GPIO_INT_EN_ ## ix, \ + .int_edge = GPIO_INT_EDGE_ ## ix, \ + .int_pos = GPIO_INT_POS_ ## ix, \ + }, \ + } + +#define MSM7200A_GPIO_DEVICE (ix, pdata) \ + { \ + .name = "msm7200a-gpio", \ + .id = ix, \ + .num_resources = 0, \ + .dev = { \ + .platform_data = &pdata[ix], \ + }, \ + } + +extern struct platform_device msm_gpio_devices[]; +#endif
arch/arm/mach-msm/include/mach/gpio.h +2 -0
@@ -16,6 +16,8 @@#ifndef __ASM_ARCH_MSM_GPIO_H#define __ASM_ARCH_MSM_GPIO_H +#define ARCH_NR_GPIOS 512 +#include <asm-generic/gpio.h> #define gpio_get_value __gpio_get_value
Signature · 5 lines
1.7.0.4 -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
PATCH v3 3/3 msm: 8x50: add gpio device configuration.
In reply to Gregory BeanAdd device configuration and board-init for gpio support on the QSD8x50.
--- arch/arm/mach-msm/board-qsd8x50.c | 27 +++++++++++++++++++++++++-- arch/arm/mach-msm/devices-qsd8x50.c | 21 +++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-)
arch/arm/mach-msm/board-qsd8x50.c +25 -2
@@ -40,7 +40,29 @@ static struct msm_gpio uart3_config_data[] = { { GPIO_CFG(87, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA), "UART2_Tx"}, }; -static struct platform_device *devices[]__initdata = { +/* +* Early devices are those which provide a system service which will be +* required by one or more of the function calls in qsd8x50_init. +* These devices must be probed and online first in order for +* the init routine to run successfully. +*/ +static struct platform_device *early_devices[]__initdata = { + &msm_gpio_devices[0 ], + &msm_gpio_devices[1 ], + &msm_gpio_devices[2 ], + &msm_gpio_devices[3 ], + &msm_gpio_devices[4 ], + &msm_gpio_devices[5 ], + &msm_gpio_devices[6 ], + &msm_gpio_devices[7 ], +}; + +/* +* Late devices are those which are dependent upon services initialized +* by qsd8x50_init, or which simply have no dependents and can have +* their initialization deferred. +*/ +static struct platform_device *late_devices[]__initdata = { &msm_device_uart3, };
@@ -64,8 +86,9 @@ static void __init qsd8x50_init_irq(void)static void __init qsd8x50_init (void ) { +platform_add_devices (early_devices,ARRAY_SIZE (early_devices));msm8x50_init_uart3 (); -platform_add_devices (devices,ARRAY_SIZE (devices)); +platform_add_devices (late_devices,ARRAY_SIZE (late_devices)); }MACHINE_START (QSD8X50_SURF ,"QCT QSD8X50 SURF" )
arch/arm/mach-msm/devices-qsd8x50.c +21 -0
@@ -90,3 +90,24 @@ struct clk msm_clocks_8x50[] = {unsigned msm_num_clocks_8x50 =ARRAY_SIZE (msm_clocks_8x50); +static struct msm7200a_gpio_platform_data gpio_platform_data[] = { +MSM7200A_GPIO_PLATFORM_DATA (0 ,0 ,15 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (1 ,16 ,42 ,INT_GPIO_GROUP2 ), +MSM7200A_GPIO_PLATFORM_DATA (2 ,43 ,67 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (3 ,68 ,94 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (4 ,95 ,103 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (5 ,104 ,121 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (6 ,122 ,152 ,INT_GPIO_GROUP1 ), +MSM7200A_GPIO_PLATFORM_DATA (7 ,153 ,164 ,INT_GPIO_GROUP1 ), +}; + +struct platform_device msm_gpio_devices[] = { +MSM7200A_GPIO_DEVICE (0 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (1 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (2 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (3 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (4 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (5 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (6 , gpio_platform_data), +MSM7200A_GPIO_DEVICE (7 , gpio_platform_data), +};
Signature · 5 lines
1.7.0.4 -- Employee of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.