On Tue, Sep 22, 2009 at 18:35:12, Sergei Shtylyov wrote:
> Hello.
> 
> Chaithrika U S wrote:
> 
> > DA850/OMAP-L138 EVM has a RMII Ethernet PHY on the UI daughter card. The PHY
> > is enabled by proper programming of the IO Expander (TCA6416) ports. Also 
> > for
> > RMII PHY to work, the MDIO clock of MII PHY has to be disabled since both 
> > the
> > PHYs have the same address. This is done via the GPIO2[6] pin. This patch 
> > adds
> > support for RMII PHY.
> > 
> > This patch also adds a menuconfig option to select UI card and peripherals
> > present on it. Currently, the only sub-option in this menu is RMII.
> > This menuconfig option is similar to the one present for UI card on
> > DA830/OMAP-L137 EVM.
> > 
> > Signed-off-by: Chaithrika U S <[email protected]>
> 
> [...]
> 
> > diff --git a/arch/arm/mach-davinci/Kconfig b/arch/arm/mach-davinci/Kconfig
> > index 7b6dddf..4ee61cc 100644
> > --- a/arch/arm/mach-davinci/Kconfig
> > +++ b/arch/arm/mach-davinci/Kconfig
> > @@ -129,6 +129,32 @@ config MACH_DAVINCI_DA850_EVM
> >     help
> >       Say Y here to select the TI DA850/OMAP-L138 Evaluation Module.
> >  
> > +config DA850_UI
> > +   bool "DA850/OMAP-L138 UI (User Interface) board support"
> > +   depends on MACH_DAVINCI_DA850_EVM
> > +   help
> > +     Say Y here if you have the DA850/OMAP-L138 UI
> > +     (User Interface) board installed and you want to
> > +     enable the peripherals located on User Interface
> > +     board.
> > +
> > +choice
> > +   prompt "Select DA850/OMAP-L138 UI board peripheral"
> > +   depends on DA850_UI
> 
>      Are the devices on the UI board really mutually exclusive?
> 

Yes, the devices are mutually exclusive.

> > +
> > +config DA850_UI_RMII
> > +   bool "RMII Ethernet PHY"
> > +   help
> > +     Say Y if you want to use the RMII PHY on the DA850/OMAP-L138 EVM.
> > +     This PHY is found on the UI daughter card that is supplied with
> > +     the EVM.
> > +     NOTE: Please take care while choosing this option, MII PHY will
> > +     not be functional if RMII mode is selected. This also affects
> > +     the operation of video devices as they are pin multiplexed with
> > +     RMII pins.
> 
>     Perhaps it's worth printing out a message about this when DA850_UI_RMII 
> is enabled?
> 

OK.

> > diff --git a/arch/arm/mach-davinci/board-da850-evm.c 
> > b/arch/arm/mach-davinci/board-da850-evm.c
> > index 25ae007..43cc629 100644
> > --- a/arch/arm/mach-davinci/board-da850-evm.c
> > +++ b/arch/arm/mach-davinci/board-da850-evm.c
> [...]
> > @@ -43,6 +44,8 @@
> >  #define DA850_MMCSD_CD_PIN         GPIO_TO_PIN(4, 0)
> >  #define DA850_MMCSD_WP_PIN         GPIO_TO_PIN(4, 1)
> >  
> > +#define DA850_MII_MDIO_CLKEN_PIN   GPIO_TO_PIN(2, 6)
> > +
> >  static struct mtd_partition da850_evm_norflash_partition[] = {
> >     {
> >             .name           = "NOR filesystem",
> > @@ -270,11 +273,141 @@ static const short da850_evm_lcdc_pins[] = {
> >     -1
> >  };
> >  
> > +#ifdef CONFIG_DA850_UI
> > +static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned 
> > gpio,
> > +                                           unsigned ngpio, void *c)
> > +{
> > +   struct davinci_soc_info *soc_info = &davinci_soc_info;
> > +   int sel_a, sel_b, sel_c, ret;
> > +
> > +   sel_a = gpio + 7;
> > +   sel_b = gpio + 6;
> > +   sel_c = gpio + 5;
> > +
> > +   ret = gpio_request(sel_a, "sel_a");
> > +   if (ret) {
> > +           pr_warning("Cannot open UI expander pin %d\n", sel_a);
> > +           goto exp_setup_sela_fail;
> > +   }
> > +
> > +   ret = gpio_request(sel_b, "sel_b");
> > +   if (ret) {
> > +           pr_warning("Cannot open UI expander pin %d\n", sel_b);
> > +           goto exp_setup_selb_fail;
> > +   }
> > +
> > +   ret = gpio_request(sel_c, "sel_c");
> > +   if (ret) {
> > +           pr_warning("Cannot open UI expander pin %d\n", sel_c);
> > +           goto exp_setup_selc_fail;
> > +   }
> > +
> > +   /* deselect all fucntionalities */
> > +   gpio_direction_output(sel_a, 1);
> > +   gpio_direction_output(sel_b, 1);
> > +   gpio_direction_output(sel_c, 1);
> > +
> > +   if (soc_info->emac_pdata->rmii_en)
> > +           /* enable RMII */
> > +           gpio_direction_output(sel_a, 0);
> 
>     gpio_set_value() is enough.
> 
> > +static int da850_evm_ui_expander_teardown(struct i2c_client *client,
> > +                                   unsigned gpio, unsigned ngpio, void *c)
> > +{
> > +   /* deselect all fucntionalities */
> 
>     Functionalities. :-)
> 
> > +static int __init da850_evm_config_emac(u8 rmii_en)
> > +{
> > +   void __iomem *cfg_chip3_base;
> > +   int ret;
> > +   u32 val;
> > +
> > +   cfg_chip3_base = DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP3_REG);
> > +
> > +   /* configure the CFGCHIP3 register for RMII or MII */
> > +   val = __raw_readl(cfg_chip3_base);
> > +   if (rmii_en)
> > +           val |= BIT(8);
> > +   else
> > +           val &= ~BIT(8);
> > +
> > +   __raw_writel(val, cfg_chip3_base);
> > +
> > +   if (!rmii_en)
> > +           ret = da8xx_pinmux_setup(da850_cpgmac_pins);
> > +   else
> > +           ret = da8xx_pinmux_setup(da850_rmii_pins);
> > +   if (ret)
> > +           pr_warning("da850_evm_init: cpgmac/rmii mux setup failed: %d\n",
> > +                           ret);
> > +
> > +   if (rmii_en) {
> > +           /* Disable MII MDIO clock */
> > +           ret = davinci_cfg_reg(DA850_GPIO2_6);
> > +           if (ret)
> > +                   pr_warning("da850_evm_init:GPIO(2,6) mux setup "
> > +                                                   "failed\n");
> > +
> > +           ret = gpio_request(DA850_MII_MDIO_CLKEN_PIN, "mdio_clk_en");
> > +           if (ret) {
> > +                   pr_warning("Cannot open GPIO %d\n",
> > +                                           DA850_MII_MDIO_CLKEN_PIN);
> > +                   return ret;
> > +           }
> > +
> > +           gpio_direction_output(DA850_MII_MDIO_CLKEN_PIN, 1);
> > +   }
> 
>     I guess you need to request GPIO2[6] anyway (and then set it to 0) also 
> in case when rmii_en is 0...
> 
> WBR, Sergei
> 

Will post an updated patch soon.

Regards, 
Chaithrika


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

Reply via email to