[PATCH 1/1] arm: imx: share imx5x_register_gpios for mach-mx5

Richard Zhao linuxzsc at gmail.com
Thu Nov 25 01:44:48 EST 2010


> IMO the machine files shouldn't need to know how many gpio banks are
> available.  This is a per-SoC thing and so should be set in a SoC function.
But we don't have SoC level device file.
>
> How do you want to continue this change?  mx51 and mx53 have the same
> number of ports?  Does mx50 have more or less?  The addresses are the
> same?
mx53 and mx50 have similar memory map. but mx51 is different.  Sorry,
I forgot upstream version IO_ADDR can not handler differnt SoC base
addr offset. It can not be shared with mx51, but it can be shared with
mx50/53, correct? May plan is mx53/50 share
arch/arm/plat-mxc/include/mach/mx5x.h file.
It seems mx53 gpio don't work here. It can not share mxc_gpio_ports with mx50.
>
> Best regards
> Uwe
>
>>       mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51_pads,
>>                                       ARRAY_SIZE(eukrea_cpuimx51_pads));
>>
>> diff --git a/arch/arm/mach-mx5/board-cpuimx51sd.c b/arch/arm/mach-mx5/board-cpuimx51sd.c
>> index ff1f45e..e47345a 100644
>> --- a/arch/arm/mach-mx5/board-cpuimx51sd.c
>> +++ b/arch/arm/mach-mx5/board-cpuimx51sd.c
>> @@ -262,6 +262,8 @@ static struct platform_device *platform_devices[] __initdata = {
>>
>>  static void __init eukrea_cpuimx51sd_init(void)
>>  {
>> +     mx5x_gpio_port_cnt = 4;
>> +
>>       mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx51sd_pads,
>>                                       ARRAY_SIZE(eukrea_cpuimx51sd_pads));
>>
>> diff --git a/arch/arm/mach-mx5/board-mx51_3ds.c b/arch/arm/mach-mx5/board-mx51_3ds.c
>> index 6cc2805..cb22fc3 100644
>> --- a/arch/arm/mach-mx5/board-mx51_3ds.c
>> +++ b/arch/arm/mach-mx5/board-mx51_3ds.c
>> @@ -160,6 +160,8 @@ static struct spi_board_info mx51_3ds_spi_nor_device[] = {
>>   */
>>  static void __init mxc_board_init(void)
>>  {
>> +     mx5x_gpio_port_cnt = 4;
>> +
>>       mxc_iomux_v3_setup_multiple_pads(mx51_3ds_pads,
>>                                       ARRAY_SIZE(mx51_3ds_pads));
>>       mxc_init_imx_uart();
>> diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c
>> index ef32843..8054c09 100644
>> --- a/arch/arm/mach-mx5/board-mx51_babbage.c
>> +++ b/arch/arm/mach-mx5/board-mx51_babbage.c
>> @@ -347,9 +347,12 @@ static const struct spi_imx_master mx51_babbage_spi_pdata __initconst = {
>>   */
>>  static void __init mxc_board_init(void)
>>  {
>> +     mx5x_gpio_port_cnt = 4;
>> +
>>       iomux_v3_cfg_t usbh1stp = MX51_PAD_USBH1_STP__USBH1_STP;
>>       iomux_v3_cfg_t power_key = MX51_PAD_EIM_A27__GPIO_2_21;
>>
>> +     mx5x_gpio_port_cnt = 4;
>>  #if defined(CONFIG_CPU_FREQ_IMX)
>>       get_cpu_op = mx51_get_cpu_op;
>>  #endif
>> diff --git a/arch/arm/mach-mx5/board-mx51_efikamx.c b/arch/arm/mach-mx5/board-mx51_efikamx.c
>> index 4b2718b..cf315cb 100644
>> --- a/arch/arm/mach-mx5/board-mx51_efikamx.c
>> +++ b/arch/arm/mach-mx5/board-mx51_efikamx.c
>> @@ -314,6 +314,8 @@ void mx51_efikamx_reset(void)
>>
>>  static void __init mxc_board_init(void)
>>  {
>> +     mx5x_gpio_port_cnt = 4;
>> +
>>       mxc_iomux_v3_setup_multiple_pads(mx51efikamx_pads,
>>                                       ARRAY_SIZE(mx51efikamx_pads));
>>       mx51_efikamx_board_id();
>> diff --git a/arch/arm/mach-mx5/devices.c b/arch/arm/mach-mx5/devices.c
>> index d926203..b8371d2 100644
>> --- a/arch/arm/mach-mx5/devices.c
>> +++ b/arch/arm/mach-mx5/devices.c
>> @@ -183,13 +183,11 @@ static struct mxc_gpio_port mxc_gpio_ports[] = {
>>       },
>>  };
>>
>> -int __init imx51_register_gpios(void)
>> -{
>> -     return mxc_gpio_init(mxc_gpio_ports, 4);
>> -}
>> +int mx5x_gpio_port_cnt;
>>
>> -int __init imx53_register_gpios(void)
>> +int __init imx5x_register_gpios(void)
>>  {
>> -     return mxc_gpio_init(mxc_gpio_ports, ARRAY_SIZE(mxc_gpio_ports));
>> +     if (mx5x_gpio_port_cnt)
>> +             return mxc_gpio_init(mxc_gpio_ports, mx5x_gpio_port_cnt);
>> +     return -EINVAL;
>>  }
>> -
>> diff --git a/arch/arm/mach-mx5/devices.h b/arch/arm/mach-mx5/devices.h
>> index af1d07c..d3411dc 100644
>> --- a/arch/arm/mach-mx5/devices.h
>> +++ b/arch/arm/mach-mx5/devices.h
>> @@ -4,3 +4,5 @@ extern struct platform_device mxc_usbdr_udc_device;
>>  extern struct platform_device mxc_wdt;
>>  extern struct platform_device mxc_hsi2c_device;
>>  extern struct platform_device mxc_keypad_device;
>> +
>> +extern int mx5x_gpio_port_cnt;
>> diff --git a/arch/arm/mach-mx5/mm.c b/arch/arm/mach-mx5/mm.c
>> index e57f968..b0ea57b 100644
>> --- a/arch/arm/mach-mx5/mm.c
>> +++ b/arch/arm/mach-mx5/mm.c
>> @@ -61,7 +61,7 @@ void __init mx53_map_io(void)
>>       iotable_init(mx53_io_desc, ARRAY_SIZE(mx53_io_desc));
>>  }
>>
>> -int imx51_register_gpios(void);
>> +int imx5x_register_gpios(void);
>>
>>  void __init mx51_init_irq(void)
>>  {
>> @@ -78,11 +78,9 @@ void __init mx51_init_irq(void)
>>               panic("unable to map TZIC interrupt controller\n");
>>
>>       tzic_init_irq(tzic_virt);
>> -     imx51_register_gpios();
>> +     imx5x_register_gpios();
>>  }
>>
>> -int imx53_register_gpios(void);
>> -
>>  void __init mx53_init_irq(void)
>>  {
>>       unsigned long tzic_addr;
>> @@ -95,5 +93,5 @@ void __init mx53_init_irq(void)
>>               panic("unable to map TZIC interrupt controller\n");
>>
>>       tzic_init_irq(tzic_virt);
>> -     imx53_register_gpios();
>> +     imx5x_register_gpios();
>>  }
>> --
>> 1.7.1
>>
>>
>>
>
> --
> Pengutronix e.K.                           | Uwe Kleine-König            |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
>



More information about the linux-arm-kernel mailing list