From: root Date: Tue, 17 May 2011 13:54:52 +0000 (+0800) Subject: add wm831x restart support X-Git-Tag: firefly_0821_release~10320 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=7569e53e5c85d7846499733d806752c033d9dc3b;p=firefly-linux-kernel-4.4.55.git add wm831x restart support --- diff --git a/arch/arm/mach-rk29/board-rk29-a22.c b/arch/arm/mach-rk29/board-rk29-a22.c index 545093e37b07..3f1966fe00cc 100755 --- a/arch/arm/mach-rk29/board-rk29-a22.c +++ b/arch/arm/mach-rk29/board-rk29-a22.c @@ -3093,15 +3093,24 @@ static void __init machine_rk29_init_irq(void) } #define POWER_ON_PIN RK29_PIN4_PA4 -extern void wm831x_power_off(void); static void rk29_pm_power_off(void) { printk(KERN_ERR "rk29_pm_power_off start...\n"); + gpio_direction_output(POWER_ON_PIN, GPIO_LOW); #if defined(CONFIG_MFD_WM831X) wm831x_device_shutdown(gWm831x); #endif while (1); } +static void rk29_pm_power_restart(void) +{ + printk("%s\n",__FUNCTION__); + mdelay(2); +#if defined(CONFIG_MFD_WM831X) + wm831x_device_restart(gWm831x); +#endif + +} static void __init machine_rk29_board_init(void) { @@ -3111,6 +3120,7 @@ static void __init machine_rk29_board_init(void) gpio_set_value(POWER_ON_PIN, GPIO_HIGH); gpio_direction_output(POWER_ON_PIN, GPIO_HIGH); pm_power_off = rk29_pm_power_off; + arm_pm_restart = rk29_pm_power_restart; platform_add_devices(devices, ARRAY_SIZE(devices)); #ifdef CONFIG_I2C0_RK29 diff --git a/arch/arm/mach-rk29/board-rk29-phonesdk.c b/arch/arm/mach-rk29/board-rk29-phonesdk.c old mode 100755 new mode 100644 index 4addc63d7d41..b0c21d0297c6 --- a/arch/arm/mach-rk29/board-rk29-phonesdk.c +++ b/arch/arm/mach-rk29/board-rk29-phonesdk.c @@ -3099,6 +3099,15 @@ static void rk29_pm_power_off(void) #endif while (1); } +static void rk29_pm_power_restart(void) +{ + printk("%s\n",__FUNCTION__); + mdelay(2); +#if defined(CONFIG_MFD_WM831X) + wm831x_device_restart(gWm831x); +#endif + +} static void __init machine_rk29_board_init(void) { @@ -3108,6 +3117,7 @@ static void __init machine_rk29_board_init(void) gpio_set_value(POWER_ON_PIN, GPIO_HIGH); gpio_direction_output(POWER_ON_PIN, GPIO_HIGH); pm_power_off = rk29_pm_power_off; + arm_pm_restart = rk29_pm_power_restart; platform_add_devices(devices, ARRAY_SIZE(devices)); #ifdef CONFIG_I2C0_RK29 diff --git a/drivers/mfd/wm831x-core.c b/drivers/mfd/wm831x-core.c index 0ce83bee2c84..761f86ea4a88 100755 --- a/drivers/mfd/wm831x-core.c +++ b/drivers/mfd/wm831x-core.c @@ -1809,6 +1809,15 @@ int wm831x_device_shutdown(struct wm831x *wm831x) EXPORT_SYMBOL_GPL(wm831x_device_shutdown); + +int wm831x_device_restart(struct wm831x *wm831x) +{ + wm831x_reg_write(wm831x,WM831X_RESET_ID, 0xffff); + + return 0; +} + + MODULE_DESCRIPTION("Core support for the WM831X AudioPlus PMIC"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Mark Brown"); diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h index 7a9e8805356d..fb21267f0267 100755 --- a/include/linux/mfd/wm831x/core.h +++ b/include/linux/mfd/wm831x/core.h @@ -344,6 +344,7 @@ void wm831x_device_exit(struct wm831x *wm831x); int wm831x_device_suspend(struct wm831x *wm831x); int wm831x_device_resume(struct wm831x *wm831x); int wm831x_device_shutdown(struct wm831x *wm831x); +int wm831x_device_restart(struct wm831x *wm831x); int wm831x_irq_init(struct wm831x *wm831x, int irq); void wm831x_irq_exit(struct wm831x *wm831x);