Re: [PATCH 054/113] rtl8xxxu: Implement 8723bu power on sequence

2016-03-10 Thread Jes Sorensen
Kalle Valo  writes:
> jes.soren...@redhat.com writes:
>
>> From: Jes Sorensen 
>>
>> This implements the 8723bu specific power on sequence as it is
>> different from that of the 8723au chips.
>>
>> Signed-off-by: Jes Sorensen 
>
> [...]
>
>> @@ -140,7 +144,10 @@
>>  #define REG_MAC_PINMUX_CFG  0x0043
>>  #define REG_GPIO_PIN_CTRL   0x0044
>>  #define REG_GPIO_INTM   0x0048
>> +#define  GPIO_INTM_EDGE_TRIG_IRQBIT(9)
>> +
>>  #define REG_LEDCFG0 0x004c
>> +#define  LEDCFG0_DPDT_SELECTBIT(23)
>>  #define REG_LEDCFG1 0x004d
>>  #define REG_LEDCFG2 0x004e
>>  #define  LEDCFG2_DPDT_SELECTBIT(7)
>> @@ -154,9 +161,13 @@
>>  #define REG_GPIO_PIN_CTRL_2 0x0060
>>  /*  RTL8723 WIFI/BT/GPS Multi-Function GPIO Select. */
>>  #define REG_GPIO_IO_SEL_2   0x0062
>> +#define  GPIO_IO_SEL_2_GPIO09_INPUT BIT(1)
>> +#define  GPIO_IO_SEL_2_GPIO09_IRQ   BIT(9)
>>  
>>  /*  RTL8723B */
>>  #define REG_PAD_CTRL1   0x0064
>> +#define  PAD_CTRL1_SW_DPDT_SEL_DATA BIT(0)
>
> Why two spaces after define?

I use two spaces for bit defines, so it refers to the register
above. It's consistent throughout the code.

Jes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 054/113] rtl8xxxu: Implement 8723bu power on sequence

2016-03-10 Thread Kalle Valo
jes.soren...@redhat.com writes:

> From: Jes Sorensen 
>
> This implements the 8723bu specific power on sequence as it is
> different from that of the 8723au chips.
>
> Signed-off-by: Jes Sorensen 

[...]

> @@ -140,7 +144,10 @@
>  #define REG_MAC_PINMUX_CFG   0x0043
>  #define REG_GPIO_PIN_CTRL0x0044
>  #define REG_GPIO_INTM0x0048
> +#define  GPIO_INTM_EDGE_TRIG_IRQ BIT(9)
> +
>  #define REG_LEDCFG0  0x004c
> +#define  LEDCFG0_DPDT_SELECT BIT(23)
>  #define REG_LEDCFG1  0x004d
>  #define REG_LEDCFG2  0x004e
>  #define  LEDCFG2_DPDT_SELECT BIT(7)
> @@ -154,9 +161,13 @@
>  #define REG_GPIO_PIN_CTRL_2  0x0060
>  /*  RTL8723 WIFI/BT/GPS Multi-Function GPIO Select. */
>  #define REG_GPIO_IO_SEL_20x0062
> +#define  GPIO_IO_SEL_2_GPIO09_INPUT  BIT(1)
> +#define  GPIO_IO_SEL_2_GPIO09_IRQBIT(9)
>  
>  /*  RTL8723B */
>  #define REG_PAD_CTRL10x0064
> +#define  PAD_CTRL1_SW_DPDT_SEL_DATA  BIT(0)

Why two spaces after define?

-- 
Kalle Valo
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 054/113] rtl8xxxu: Implement 8723bu power on sequence

2016-02-29 Thread Jes . Sorensen
From: Jes Sorensen 

This implements the 8723bu specific power on sequence as it is
different from that of the 8723au chips.

Signed-off-by: Jes Sorensen 
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c   | 183 -
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h  |  11 ++
 2 files changed, 189 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c 
b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 7f17e69..a8b7b75 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -2933,10 +2933,6 @@ static void rtl8723bu_phy_init_antenna_selection(struct 
rtl8xxxu_priv *priv)
val32 &= 0xff00;
val32 |= 0x77;
rtl8xxxu_write32(priv, 0x0930, val32);
-
-   val32 = rtl8xxxu_read32(priv, REG_PWR_DATA);
-   val32 |= BIT(11);
-   rtl8xxxu_write32(priv, REG_PWR_DATA, val32);
 }
 
 static int
@@ -5359,6 +5355,127 @@ exit:
return ret;
 }
 
+static int rtl8723b_emu_to_active(struct rtl8xxxu_priv *priv)
+{
+   u8 val8;
+   u32 val32;
+   int count, ret = 0;
+
+   /* 0x20[0] = 1 enable LDOA12 MACRO block for all interface */
+   val8 = rtl8xxxu_read8(priv, REG_LDOA15_CTRL);
+   val8 |= LDOA15_ENABLE;
+   rtl8xxxu_write8(priv, REG_LDOA15_CTRL, val8);
+
+   /* 0x67[0] = 0 to disable BT_GPS_SEL pins*/
+   val8 = rtl8xxxu_read8(priv, 0x0067);
+   val8 &= ~BIT(4);
+   rtl8xxxu_write8(priv, 0x0067, val8);
+
+   mdelay(1);
+
+   /* 0x00[5] = 0 release analog Ips to digital, 1:isolation */
+   val8 = rtl8xxxu_read8(priv, REG_SYS_ISO_CTRL);
+   val8 &= ~SYS_ISO_ANALOG_IPS;
+   rtl8xxxu_write8(priv, REG_SYS_ISO_CTRL, val8);
+
+   /* Disable SW LPS 0x04[10]= 0 */
+   val32 = rtl8xxxu_read8(priv, REG_APS_FSMCO);
+   val32 &= ~APS_FSMCO_SW_LPS;
+   rtl8xxxu_write32(priv, REG_APS_FSMCO, val32);
+
+   /* Wait until 0x04[17] = 1 power ready */
+   for (count = RTL8XXXU_MAX_REG_POLL; count; count--) {
+   val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
+   if (val32 & BIT(17))
+   break;
+
+   udelay(10);
+   }
+
+   if (!count) {
+   ret = -EBUSY;
+   goto exit;
+   }
+
+   /* We should be able to optimize the following three entries into one */
+
+   /* Release WLON reset 0x04[16]= 1*/
+   val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
+   val32 |= APS_FSMCO_WLON_RESET;
+   rtl8xxxu_write32(priv, REG_APS_FSMCO, val32);
+
+   /* Disable HWPDN 0x04[15]= 0*/
+   val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
+   val32 &= ~APS_FSMCO_HW_POWERDOWN;
+   rtl8xxxu_write32(priv, REG_APS_FSMCO, val32);
+
+   /* Disable WL suspend*/
+   val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
+   val32 &= ~(APS_FSMCO_HW_SUSPEND | APS_FSMCO_PCIE);
+   rtl8xxxu_write32(priv, REG_APS_FSMCO, val32);
+
+   /* Set, then poll until 0 */
+   val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
+   val32 |= APS_FSMCO_MAC_ENABLE;
+   rtl8xxxu_write32(priv, REG_APS_FSMCO, val32);
+
+   for (count = RTL8XXXU_MAX_REG_POLL; count; count--) {
+   val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
+   if ((val32 & APS_FSMCO_MAC_ENABLE) == 0) {
+   ret = 0;
+   break;
+   }
+   udelay(10);
+   }
+
+   if (!count) {
+   ret = -EBUSY;
+   goto exit;
+   }
+
+   /* Enable WL control XTAL setting */
+   val8 = rtl8xxxu_read8(priv, REG_AFE_MISC);
+   val8 |= AFE_MISC_WL_XTAL_CTRL;
+   rtl8xxxu_write8(priv, REG_AFE_MISC, val8);
+
+   /* Enable falling edge triggering interrupt */
+   val8 = rtl8xxxu_read8(priv, REG_GPIO_INTM + 1);
+   val8 |= BIT(1);
+   rtl8xxxu_write8(priv, REG_GPIO_INTM + 1, val8);
+
+   /* Enable GPIO9 interrupt mode */
+   val8 = rtl8xxxu_read8(priv, REG_GPIO_IO_SEL_2 + 1);
+   val8 |= BIT(1);
+   rtl8xxxu_write8(priv, REG_GPIO_IO_SEL_2 + 1, val8);
+
+   /* Enable GPIO9 input mode */
+   val8 = rtl8xxxu_read8(priv, REG_GPIO_IO_SEL_2);
+   val8 &= ~BIT(1);
+   rtl8xxxu_write8(priv, REG_GPIO_IO_SEL_2, val8);
+
+   /* Enable HSISR GPIO[C:0] interrupt */
+   val8 = rtl8xxxu_read8(priv, REG_HSIMR);
+   val8 |= BIT(0);
+   rtl8xxxu_write8(priv, REG_HSIMR, val8);
+
+   /* Enable HSISR GPIO9 interrupt */
+   val8 = rtl8xxxu_read8(priv, REG_HSIMR + 2);
+   val8 |= BIT(1);
+   rtl8xxxu_write8(priv, REG_HSIMR + 2, val8);
+
+   val8 = rtl8xxxu_read8(priv, REG_MULTI_FUNC_CTRL);
+   val8 |= MULTI_WIFI_HW_ROF_EN;
+   rtl8xxxu_write8(priv, REG_MULTI_FUNC_CTRL, val8);
+
+   /* For GPIO9 internal pull high setting BIT(14) */
+   val8 = rtl8xxxu_read8(priv, REG_MULTI_FUNC_CTRL + 1);
+   val8 |= BIT(6);
+   rtl8xxxu_write8(priv, REG_M