"Mark A. Greer" <[email protected]> writes:

> From: Mark A. Greer <[email protected]>
>
> Group the pinmux indices for various devices to ease setting up
> the pinmux for a device.  A new routine, da830_pinmux_setup(),
> is added to do the pinmux setup for a group.
>
> Signed-off-by: Mark A. Greer <[email protected]>

This looks fine to me and is well isolated to be da830-specific.

Kevin

> ---
> I'd still like to have the pinmux setup at driver init time
> instead of at boot time but its not necessary right now so
> I'll skip it.
>
> I would still like to make it easier to setup the pinmux for
> the da830 by gathering the pinmux indices for various devices
> into arrays and then make a single call to set all of them up
> for a device.
>
> I'm not that attached to any of this code other than I would
> eventually like some sort of functionality like this.  It
> doesn't seem worth it for the existing davincis since they
> don't have much pinmux contention.
>
> Comments welcome.
>
>  arch/arm/mach-davinci/board-da830-evm.c    |   10 ++
>  arch/arm/mach-davinci/da830.c              |  189 
> ++++++++++++++++++++++++++++
>  arch/arm/mach-davinci/include/mach/da830.h |   28 ++++-
>  3 files changed, 226 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-davinci/board-da830-evm.c 
> b/arch/arm/mach-davinci/board-da830-evm.c
> index a94289f..5350793 100644
> --- a/arch/arm/mach-davinci/board-da830-evm.c
> +++ b/arch/arm/mach-davinci/board-da830-evm.c
> @@ -60,6 +60,11 @@ static __init void da830_evm_init(void)
>               pr_warning("da830_evm_init: edma registration failed: %d\n",
>                               ret);
>  
> +     ret = da830_pinmux_setup(da830_i2c0_pins);
> +     if (ret)
> +             pr_warning("da830_evm_init: i2c0 mux setup failed: %d\n",
> +                             ret);
> +
>       ret = da830_register_i2c(0, &da830_evm_i2c_0_pdata);
>       if (ret)
>               pr_warning("da830_evm_init: i2c0 registration failed: %d\n",
> @@ -69,6 +74,11 @@ static __init void da830_evm_init(void)
>       soc_info->emac_pdata->mdio_max_freq = DA830_EVM_MDIO_FREQUENCY;
>       soc_info->emac_pdata->rmii_en = 1;
>  
> +     ret = da830_pinmux_setup(da830_cpgmac_pins);
> +     if (ret)
> +             pr_warning("da830_evm_init: cpgmac mux setup failed: %d\n",
> +                             ret);
> +
>       ret = da830_register_emac();
>       if (ret)
>               pr_warning("da830_evm_init: emac registration failed: %d\n",
> diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c
> index 4f0e906..2236ec7 100644
> --- a/arch/arm/mach-davinci/da830.c
> +++ b/arch/arm/mach-davinci/da830.c
> @@ -858,6 +858,195 @@ static const struct mux_config da830_pins[] = {
>  #endif
>  };
>  
> +const short da830_emif25_pins[] __initdata = {
> +     DA830_EMA_D_0, DA830_EMA_D_1, DA830_EMA_D_2, DA830_EMA_D_3,
> +     DA830_EMA_D_4, DA830_EMA_D_5, DA830_EMA_D_6, DA830_EMA_D_7,
> +     DA830_EMA_D_8, DA830_EMA_D_9, DA830_EMA_D_10, DA830_EMA_D_11,
> +     DA830_EMA_D_12, DA830_EMA_D_13, DA830_EMA_D_14, DA830_EMA_D_15,
> +     DA830_EMA_A_0, DA830_EMA_A_1, DA830_EMA_A_2, DA830_EMA_A_3,
> +     DA830_EMA_A_4, DA830_EMA_A_5, DA830_EMA_A_6, DA830_EMA_A_7,
> +     DA830_EMA_A_8, DA830_EMA_A_9, DA830_EMA_A_10, DA830_EMA_A_11,
> +     DA830_EMA_A_12, DA830_EMA_BA_0, DA830_EMA_BA_1, DA830_EMA_CLK,
> +     DA830_EMA_SDCKE, DA830_NEMA_CS_4, DA830_NEMA_CS_5, DA830_NEMA_WE,
> +     DA830_NEMA_CS_0, DA830_NEMA_CS_2, DA830_NEMA_CS_3, DA830_NEMA_OE,
> +     DA830_NEMA_WE_DQM_1, DA830_NEMA_WE_DQM_0, DA830_EMA_WAIT_0,
> +     -1
> +};
> +
> +const short da830_spi0_pins[] __initdata = {
> +     DA830_SPI0_SOMI_0, DA830_SPI0_SIMO_0, DA830_SPI0_CLK, DA830_NSPI0_ENA,
> +     DA830_NSPI0_SCS_0,
> +     -1
> +};
> +
> +const short da830_spi1_pins[] __initdata = {
> +     DA830_SPI1_SOMI_0, DA830_SPI1_SIMO_0, DA830_SPI1_CLK, DA830_NSPI1_ENA,
> +     DA830_NSPI1_SCS_0,
> +     -1
> +};
> +
> +const short da830_mmc_sd_pins[] __initdata = {
> +     DA830_MMCSD_DAT_0, DA830_MMCSD_DAT_1, DA830_MMCSD_DAT_2,
> +     DA830_MMCSD_DAT_3, DA830_MMCSD_DAT_4, DA830_MMCSD_DAT_5,
> +     DA830_MMCSD_DAT_6, DA830_MMCSD_DAT_7, DA830_MMCSD_CLK,
> +     DA830_MMCSD_CMD,
> +     -1
> +};
> +
> +const short da830_uart0_pins[] __initdata = {
> +     DA830_NUART0_CTS, DA830_NUART0_RTS, DA830_UART0_RXD, DA830_UART0_TXD,
> +     -1
> +};
> +
> +const short da830_uart1_pins[] __initdata = {
> +     DA830_UART1_RXD, DA830_UART1_TXD,
> +     -1
> +};
> +
> +const short da830_uart2_pins[] __initdata = {
> +     DA830_UART2_RXD, DA830_UART2_TXD,
> +     -1
> +};
> +
> +const short da830_usb20_pins[] __initdata = {
> +     DA830_USB0_DRVVBUS, DA830_USB_REFCLKIN,
> +     -1
> +};
> +
> +const short da830_usb11_pins[] __initdata = {
> +     DA830_USB_REFCLKIN,
> +     -1
> +};
> +
> +const short da830_uhpi_pins[] __initdata = {
> +     DA830_UHPI_HD_0, DA830_UHPI_HD_1, DA830_UHPI_HD_2, DA830_UHPI_HD_3,
> +     DA830_UHPI_HD_4, DA830_UHPI_HD_5, DA830_UHPI_HD_6, DA830_UHPI_HD_7,
> +     DA830_UHPI_HD_8, DA830_UHPI_HD_9, DA830_UHPI_HD_10, DA830_UHPI_HD_11,
> +     DA830_UHPI_HD_12, DA830_UHPI_HD_13, DA830_UHPI_HD_14, DA830_UHPI_HD_15,
> +     DA830_UHPI_HCNTL0, DA830_UHPI_HCNTL1, DA830_UHPI_HHWIL, DA830_UHPI_HRNW,
> +     DA830_NUHPI_HAS, DA830_NUHPI_HCS, DA830_NUHPI_HDS1, DA830_NUHPI_HDS2,
> +     DA830_NUHPI_HINT, DA830_NUHPI_HRDY,
> +     -1
> +};
> +
> +const short da830_cpgmac_pins[] __initdata = {
> +     DA830_RMII_TXD_0, DA830_RMII_TXD_1, DA830_RMII_TXEN, DA830_RMII_CRS_DV,
> +     DA830_RMII_RXD_0, DA830_RMII_RXD_1, DA830_RMII_RXER, DA830_MDIO_CLK,
> +     DA830_MDIO_D,
> +     -1
> +};
> +
> +const short da830_emif3c_pins[] __initdata = {
> +     DA830_EMB_SDCKE, DA830_EMB_CLK_GLUE, DA830_EMB_CLK, DA830_NEMB_CS_0,
> +     DA830_NEMB_CAS, DA830_NEMB_RAS, DA830_NEMB_WE, DA830_EMB_BA_1,
> +     DA830_EMB_BA_0, DA830_EMB_A_0, DA830_EMB_A_1, DA830_EMB_A_2,
> +     DA830_EMB_A_3, DA830_EMB_A_4, DA830_EMB_A_5, DA830_EMB_A_6,
> +     DA830_EMB_A_7, DA830_EMB_A_8, DA830_EMB_A_9, DA830_EMB_A_10,
> +     DA830_EMB_A_11, DA830_EMB_A_12, DA830_NEMB_WE_DQM_3,
> +     DA830_NEMB_WE_DQM_2, DA830_EMB_D_0, DA830_EMB_D_1, DA830_EMB_D_2,
> +     DA830_EMB_D_3, DA830_EMB_D_4, DA830_EMB_D_5, DA830_EMB_D_6,
> +     DA830_EMB_D_7, DA830_EMB_D_8, DA830_EMB_D_9, DA830_EMB_D_10,
> +     DA830_EMB_D_11, DA830_EMB_D_12, DA830_EMB_D_13, DA830_EMB_D_14,
> +     DA830_EMB_D_15, DA830_EMB_D_16, DA830_EMB_D_17, DA830_EMB_D_18,
> +     DA830_EMB_D_19, DA830_EMB_D_20, DA830_EMB_D_21, DA830_EMB_D_22,
> +     DA830_EMB_D_23, DA830_EMB_D_24, DA830_EMB_D_25, DA830_EMB_D_26,
> +     DA830_EMB_D_27, DA830_EMB_D_28, DA830_EMB_D_29, DA830_EMB_D_30,
> +     DA830_EMB_D_31, DA830_NEMB_WE_DQM_1, DA830_NEMB_WE_DQM_0,
> +     -1
> +};
> +
> +const short da830_mcasp0_pins[] __initdata = {
> +     DA830_AHCLKX0, DA830_ACLKX0, DA830_AFSX0,
> +     DA830_AHCLKR0, DA830_ACLKR0, DA830_AFSR0, DA830_AMUTE0,
> +     DA830_AXR0_0, DA830_AXR0_1, DA830_AXR0_2, DA830_AXR0_3,
> +     DA830_AXR0_4, DA830_AXR0_5, DA830_AXR0_6, DA830_AXR0_7,
> +     DA830_AXR0_8, DA830_AXR0_9, DA830_AXR0_10, DA830_AXR0_11,
> +     DA830_AXR0_12, DA830_AXR0_13, DA830_AXR0_14, DA830_AXR0_15,
> +     -1
> +};
> +
> +const short da830_mcasp1_pins[] __initdata = {
> +     DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1,
> +     DA830_AHCLKR1, DA830_ACLKR1, DA830_AFSR1, DA830_AMUTE1,
> +     DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_3,
> +     DA830_AXR1_4, DA830_AXR1_5, DA830_AXR1_6, DA830_AXR1_7,
> +     DA830_AXR1_8, DA830_AXR1_9, DA830_AXR1_10, DA830_AXR1_11,
> +     -1
> +};
> +
> +const short da830_mcasp2_pins[] __initdata = {
> +     DA830_AHCLKX2, DA830_ACLKX2, DA830_AFSX2,
> +     DA830_AHCLKR2, DA830_ACLKR2, DA830_AFSR2, DA830_AMUTE2,
> +     DA830_AXR2_0, DA830_AXR2_1, DA830_AXR2_2, DA830_AXR2_3,
> +     -1
> +};
> +
> +const short da830_i2c0_pins[] __initdata = {
> +     DA830_I2C0_SDA, DA830_I2C0_SCL,
> +     -1
> +};
> +
> +const short da830_i2c1_pins[] __initdata = {
> +     DA830_I2C1_SCL, DA830_I2C1_SDA,
> +     -1
> +};
> +
> +const short da830_lcdcntl_pins[] __initdata = {
> +     DA830_LCD_D_0, DA830_LCD_D_1, DA830_LCD_D_2, DA830_LCD_D_3,
> +     DA830_LCD_D_4, DA830_LCD_D_5, DA830_LCD_D_6, DA830_LCD_D_7,
> +     DA830_LCD_D_8, DA830_LCD_D_9, DA830_LCD_D_10, DA830_LCD_D_11,
> +     DA830_LCD_D_12, DA830_LCD_D_13, DA830_LCD_D_14, DA830_LCD_D_15,
> +     DA830_LCD_PCLK, DA830_LCD_HSYNC, DA830_LCD_VSYNC, DA830_NLCD_AC_ENB_CS,
> +     DA830_LCD_MCLK,
> +     -1
> +};
> +
> +const short da830_pwm_pins[] __initdata = {
> +     DA830_ECAP0_APWM0, DA830_ECAP1_APWM1, DA830_EPWM0B, DA830_EPWM0A,
> +     DA830_EPWMSYNCI, DA830_EPWMSYNC0, DA830_ECAP2_APWM2, DA830_EHRPWMGLUETZ,
> +     DA830_EPWM2B, DA830_EPWM2A, DA830_EPWM1B, DA830_EPWM1A,
> +     -1
> +};
> +
> +const short da830_ecap0_pins[] __initdata = {
> +     DA830_ECAP0_APWM0,
> +     -1
> +};
> +
> +const short da830_ecap1_pins[] __initdata = {
> +     DA830_ECAP1_APWM1,
> +     -1
> +};
> +
> +const short da830_ecap2_pins[] __initdata = {
> +     DA830_ECAP2_APWM2,
> +     -1
> +};
> +
> +const short da830_eqep0_pins[] __initdata = {
> +     DA830_EQEP0I, DA830_EQEP0S, DA830_EQEP0A, DA830_EQEP0B,
> +     -1
> +};
> +
> +const short da830_eqep1_pins[] __initdata = {
> +     DA830_EQEP1I, DA830_EQEP1S, DA830_EQEP1A, DA830_EQEP1B,
> +     -1
> +};
> +
> +int da830_pinmux_setup(const short pins[])
> +{
> +     int i, error = -EINVAL;
> +
> +     if (pins)
> +             for (i = 0; pins[i] >= 0; i++) {
> +                     error = davinci_cfg_reg(pins[i]);
> +                     if (error)
> +                             break;
> +             }
> +
> +     return error;
> +}
> +
>  /* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */
>  static u8 da830_default_priorities[DA830_N_CP_INTC_IRQ] = {
>       [IRQ_DA830_COMMTX]              = 7,
> diff --git a/arch/arm/mach-davinci/include/mach/da830.h 
> b/arch/arm/mach-davinci/include/mach/da830.h
> index ab582d1..ec85d34 100644
> --- a/arch/arm/mach-davinci/include/mach/da830.h
> +++ b/arch/arm/mach-davinci/include/mach/da830.h
> @@ -44,8 +44,34 @@ int da830_register_emac(void);
>  int da830_register_mmc(struct davinci_mmc_config *pdata);
>  int da830_register_rtc(void);
>  
> -
>  extern struct platform_device da830_serial_device;
>  extern struct emac_platform_data da830_emac_pdata;
>  
> +extern const short da830_emif25_pins[];
> +extern const short da830_spi0_pins[];
> +extern const short da830_spi1_pins[];
> +extern const short da830_mmc_sd_pins[];
> +extern const short da830_uart0_pins[];
> +extern const short da830_uart1_pins[];
> +extern const short da830_uart2_pins[];
> +extern const short da830_usb20_pins[];
> +extern const short da830_usb11_pins[];
> +extern const short da830_uhpi_pins[];
> +extern const short da830_cpgmac_pins[];
> +extern const short da830_emif3c_pins[];
> +extern const short da830_mcasp0_pins[];
> +extern const short da830_mcasp1_pins[];
> +extern const short da830_mcasp2_pins[];
> +extern const short da830_i2c0_pins[];
> +extern const short da830_i2c1_pins[];
> +extern const short da830_lcdcntl_pins[];
> +extern const short da830_pwm_pins[];
> +extern const short da830_ecap0_pins[];
> +extern const short da830_ecap1_pins[];
> +extern const short da830_ecap2_pins[];
> +extern const short da830_eqep0_pins[];
> +extern const short da830_eqep1_pins[];
> +
> +int da830_pinmux_setup(const short pins[]);
> +
>  #endif /* __ASM_ARCH_DAVINCI_DA830_H */
> -- 
> 1.6.0.3
>
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> [email protected]
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to