static int wm831x_i2c_poweroff(struct device *dev) { struct wm831x *wm831x = dev_get_drvdata(dev); wm831x_device_shutdown(wm831x); return 0; }
static void rk30_pm_power_off(void) { printk(KERN_ERR "rk30_pm_power_off start...\n"); gpio_direction_output(POWER_ON_PIN, GPIO_LOW); #if defined(CONFIG_MFD_WM831X) wm831x_set_bits(Wm831x,WM831X_GPIO_LEVEL,0x0001,0x0000); //set sys_pwr 0 wm831x_device_shutdown(Wm831x);//wm8326 shutdown #endif while (1); }
static int wm831x_low_power_detection(struct wm831x *wm831x) { wm831x_reg_write(wm831x,WM831X_AUXADC_CONTROL,0x803f); //open adc wm831x_reg_write(wm831x,WM831X_AUXADC_CONTROL,0xd03f); wm831x_reg_write(wm831x,WM831X_AUXADC_SOURCE,0x0001); wm831x_reg_write(wm831x,WM831X_COMPARATOR_CONTROL,0x0001); wm831x_reg_write(wm831x,WM831X_COMPARATOR_1,0x2910); //set the low power is 3.4v wm831x_reg_write(wm831x,WM831X_INTERRUPT_STATUS_1_MASK,0x99ee); wm831x_set_bits(wm831x,WM831X_SYSTEM_INTERRUPTS_MASK,0x0100,0x0000); if (wm831x_reg_read(wm831x,WM831X_AUXADC_DATA)< 0x1900){ printk("The vbat is too low.\n"); wm831x_device_shutdown(wm831x); } return 0; }
static void rk30_pm_power_off(void) { printk(KERN_ERR "rk30_pm_power_off start...\n"); gpio_direction_output(POWER_ON_PIN, GPIO_LOW); #if defined(CONFIG_MFD_WM831X) if(g_pmic_type == PMIC_TYPE_WM8326) { wm831x_set_bits(Wm831x,WM831X_GPIO_LEVEL,0x0001,0x0000); //set sys_pwr 0 wm831x_device_shutdown(Wm831x);//wm8326 shutdown } #endif #if defined(CONFIG_MFD_TPS65910) if(g_pmic_type == PMIC_TYPE_TPS65910) { tps65910_device_shutdown();//tps65910 shutdown } #endif while (1); }
static int wm831x_low_power_detection(struct wm831x *wm831x) { #ifdef CONFIG_BATTERY_RK30_VOL3V8 wm831x_reg_write(wm831x,WM831X_SYSTEM_INTERRUPTS_MASK,0xbe5c); wm831x_set_bits(wm831x,WM831X_INTERRUPT_STATUS_1_MASK,0x8000,0x0000); wm831x_set_bits(wm831x,WM831X_SYSVDD_CONTROL ,0xc077,0x0035); //set pvdd low voltage is 3.1v hi voltage is 3.3v #else wm831x_reg_write(wm831x,WM831X_AUXADC_CONTROL,0x803f); //open adc wm831x_reg_write(wm831x,WM831X_AUXADC_CONTROL,0xd03f); wm831x_reg_write(wm831x,WM831X_AUXADC_SOURCE,0x0001); wm831x_reg_write(wm831x,WM831X_COMPARATOR_CONTROL,0x0001); wm831x_reg_write(wm831x,WM831X_COMPARATOR_1,0x2844); //set the low power is 3.1v wm831x_reg_write(wm831x,WM831X_INTERRUPT_STATUS_1_MASK,0x99ee); wm831x_set_bits(wm831x,WM831X_SYSTEM_INTERRUPTS_MASK,0x0100,0x0000); if (wm831x_reg_read(wm831x,WM831X_AUXADC_DATA)< 0x1844){ printk("The vbat is too low.\n"); wm831x_device_shutdown(wm831x); } #endif return 0; }
static void wm831x_spi_shutdown(struct spi_device *spi) { struct wm831x *wm831x = dev_get_drvdata(&spi->dev); wm831x_device_shutdown(wm831x); }
static void wm831x_i2c_shutdown(struct i2c_client *i2c) { struct wm831x *wm831x = i2c_get_clientdata(i2c); wm831x_device_shutdown(wm831x); }
void wm831x_i2c_shutdown(struct i2c_client *i2c) { struct wm831x *wm831x = i2c_get_clientdata(i2c); printk("%s\n", __FUNCTION__); wm831x_device_shutdown(wm831x); }