Re: Port SDIO GPIO to DTS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Kyle,

On 18.01.2018 01:13, Kyle Evans wrote:
> I have an ASUS TF101(ventana) that I am trying to get running on 
> mainline. It is mostly there, but there are a few issues that I believe 
> to be dts related. I am focusing on one at a time. Currently, when I 
> warm boot/reboot, the wireless SDIO device fails to initialize. It 
> works great on cold boot. I'm fairly certain the problem is in the 
> dts, but I'd like some feedback on the correct way.
> 
> From a working, pre-dts kernel I have stuff like this.
> 
> arch/arm/mach-tegra/board-tf101-sdhci.c:
> ...
> #define TF101_WLAN_RST  TEGRA_GPIO_PK6
> #define TF101_WLAN_WOW  TEGRA_GPIO_PS0
> #define TF101_SDIO_WOW  TEGRA_GPIO_PY6
> ...
> static struct embedded_sdio_data embedded_sdio_data1 = {
>         .cccr   = {
>                 .sdio_vsn       = 2,
>                 .multi_block    = 1,
>                 .low_speed      = 0,
>                 .wide_bus       = 0,
>                 .high_power     = 1,
>                 .high_speed     = 1,
>         },
>         .cis  = {
>                 .vendor         = 0x02d0,
>                 .device         = 0x4329,
>         },
> 
> static struct tegra_sdhci_platform_data tegra_sdhci_platform_data1 = {
>         .mmc_data = {
>                 .register_status_notify = tf101_wifi_status_register,
>                 .embedded_sdio = &embedded_sdio_data1,
>                 .built_in = 0,
>         },
>         .wow_gpio = TF101_SDIO_WOW,
>         .cd_gpio = -1,
>         .wp_gpio = -1,
>         .power_gpio = -1,
>         .max_clk_limit = 40000000,
> };
> ...
> static int tf101_wifi_power(int on)
> {
>         pr_debug("%s: %d\n", __func__, on);
> 
> #if 0
>         gpio_set_value(TF101_WLAN_PWR, on);
>         mdelay(100);
> #endif
>         gpio_set_value(TF101_WLAN_RST, on);
>         mdelay(200);
> 
>         return 0;
> }
> 
> static int tf101_wifi_reset(int on)
> {
>         pr_debug("%s: do nothing\n", __func__);
>         return 0;
> }
> 
> static int __init tf101_wifi_init(void)
> {
>         //gpio_request(TF101_WLAN_PWR, "wlan_power");
>         gpio_request(TF101_WLAN_RST, "wlan_rst");
>         gpio_request(TF101_WLAN_WOW, "bcmsdh_sdmmc");
> 
>         //tegra_gpio_enable(TF101_WLAN_PWR);
>         tegra_gpio_enable(TF101_WLAN_RST);
>         tegra_gpio_enable(TF101_WLAN_WOW);
> 
>         //gpio_direction_output(TF101_WLAN_PWR, 0);
>         gpio_direction_output(TF101_WLAN_RST, 0);
>         gpio_direction_input(TF101_WLAN_WOW);
> 
>         platform_device_register(&tf101_wifi_device);
> 
>         device_init_wakeup(&tf101_wifi_device.dev, 1);
>         device_set_wakeup_enable(&tf101_wifi_device.dev, 0);
> 
>         return 0;
> }
> ...
> 
> It looks like I have three GPIO lines dealing with mmc0/wlan. Can I 
> assume WOW is Wireless pOWer?

WoW should stand for Wake on Wireless [0]. You could ping your TF101 while it
is suspended and it will wake up.

[0] https://wireless.wiki.kernel.org/en/users/documentation/wowlan

> I'm not sure of the difference between WLAN_WOW & SDIO_WOW. I'm 
> assuming one for chip, one for radio, but I don't know their place in 
> the dts.
> 
> From tegra20-ventana.dts I've got:
> 
> 	sdhci@c8000000 {
>                 status = "okay";
>                 power-gpios = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>;
>                 bus-width = <4>;
>                 keep-power-in-suspend;
>         };
> 
> I'm guessing I need to add the other pins to power-gpois and 
> set up mmc-pwrseq?

The 'power-gpois' that you've defined looks fine and probably sufficient to get
WiFi up and running.

Take a look at the changes that were needed to get WiFi working on Acer A500,
maybe some of it also applicable to TF101:

https://github.com/digetx/picasso_upstream_support/commit/beab29d4f172836c5faad91d3232a7c77c5fc6fb
https://github.com/digetx/picasso_upstream_support/commit/165e488e82c97fa1da6ccfe832a43569136000bc
https://github.com/digetx/picasso_upstream_support/commit/7e584ca4108707c6469a04bf92d9b659ce76c5cc
https://github.com/digetx/picasso_upstream_support/commit/4f0d7ac43592826e03f766005a3720ecc5ad1476#diff-4ce775d33b1aadd3981ea13ea140eca6R702

Also note that (at least on A500) BCM chip also provides Bluetooth and the
'power/rst' GPIO affects both Wifi and Bluetooth.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux