From: 张昊 Date: Fri, 18 Nov 2011 11:18:58 +0000 (+0800) Subject: wm831x:fix wm831x init error X-Git-Tag: firefly_0821_release~9735^2~2^2~3 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d1c00eb4f142393f272ec11448ae96255092adb0;p=firefly-linux-kernel-4.4.55.git wm831x:fix wm831x init error --- diff --git a/arch/arm/mach-rk29/board-rk29-phonesdk.c b/arch/arm/mach-rk29/board-rk29-phonesdk.c index 509fae12868e..8d5fbf9a4731 100755 --- a/arch/arm/mach-rk29/board-rk29-phonesdk.c +++ b/arch/arm/mach-rk29/board-rk29-phonesdk.c @@ -160,6 +160,8 @@ #define WLAN_SECTION_SIZE_3 (PREALLOC_WLAN_BUF_NUM * 1024) #define WLAN_SKB_BUF_NUM 16 +#define UNLOCK_SECURITY_KEY ~(0x1<<5) +#define LOCK_SECURITY_KEY 0x00 static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM]; @@ -712,9 +714,14 @@ int wm831x_pre_init(struct wm831x *parm) wm831x_reg_write(parm, WM831X_POWER_STATE, (ret&0xfff8) | 0x04); //BATT_FET_ENA = 1 - wm831x_set_bits(parm, WM831X_RESET_CONTROL,0x1000,0x1000); - ret = wm831x_reg_read(parm, WM831X_RESET_CONTROL) & 0xffff; - printk("%s:WM831X_RESET_CONTROL=0x%x\n",__FUNCTION__,ret); + wm831x_reg_write(parm,WM831X_SECURITY_KEY,0x9716); // unlock security key + wm831x_set_bits(parm, WM831X_RESET_CONTROL,0x1000,0x1000); + ret = wm831x_reg_read(parm, WM831X_RESET_CONTROL) & 0xffff&UNLOCK_SECURITY_KEY;// enternal reset active in sleep + printk("%s:WM831X_RESET_CONTROL=0x%x\n",__FUNCTION__,ret); + wm831x_reg_write(parm, WM831X_RESET_CONTROL, ret); + + + wm831x_reg_write(parm,WM831X_SECURITY_KEY,LOCK_SECURITY_KEY); // lock securit #if 0 wm831x_set_bits(parm, WM831X_LDO_ENABLE, (1 << 3), 0); diff --git a/drivers/mfd/wm831x-irq.c b/drivers/mfd/wm831x-irq.c index 04f3a69943b7..7070c3c916f5 100755 --- a/drivers/mfd/wm831x-irq.c +++ b/drivers/mfd/wm831x-irq.c @@ -407,7 +407,7 @@ static int wm831x_irq_set_type(struct irq_data *data, unsigned int type) struct wm831x *wm831x = irq_data_get_irq_chip_data(data); int val, irq = 0; - irq = irq - wm831x->irq_base; + irq = data->irq - wm831x->irq_base; if (irq < WM831X_IRQ_GPIO_1 || irq > WM831X_IRQ_GPIO_12) { /* Ignore internal-only IRQs */ if (irq >= 0 && irq < WM831X_NUM_IRQS)