Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: as3722: Disable auto-power-on when AC OK

On ams AS3722, power on when AC OK is enabled by default.
Making this option as disable by default and enable only
when platform need this explicitly.

Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Tested-by: Bibek Basu <bbasu@nvidia.com>
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>

authored by

Marcel Ziswiler and committed by
Lee Jones
c8fda5bf 99e19b7c

+17
+2
Documentation/devicetree/bindings/mfd/as3722.txt
··· 20 20 - ams,enable-internal-i2c-pullup: Boolean property, to enable internal pullup on 21 21 i2c scl/sda pins. Missing this will disable internal pullup on i2c 22 22 scl/sda lines. 23 + - ams,enable-ac-ok-power-on: Boolean property, to enable exit out of power off 24 + mode with AC_OK pin (pin enabled in power off mode). 23 25 24 26 Optional submodule and their properties: 25 27 =======================================
+12
drivers/mfd/as3722.c
··· 349 349 "ams,enable-internal-int-pullup"); 350 350 as3722->en_intern_i2c_pullup = of_property_read_bool(np, 351 351 "ams,enable-internal-i2c-pullup"); 352 + as3722->en_ac_ok_pwr_on = of_property_read_bool(np, 353 + "ams,enable-ac-ok-power-on"); 352 354 as3722->irq_flags = irqd_get_trigger_type(irq_data); 353 355 dev_dbg(&i2c->dev, "IRQ flags are 0x%08lx\n", as3722->irq_flags); 354 356 return 0; ··· 362 360 struct as3722 *as3722; 363 361 unsigned long irq_flags; 364 362 int ret; 363 + u8 val = 0; 365 364 366 365 as3722 = devm_kzalloc(&i2c->dev, sizeof(struct as3722), GFP_KERNEL); 367 366 if (!as3722) ··· 400 397 ret = as3722_configure_pullups(as3722); 401 398 if (ret < 0) 402 399 return ret; 400 + 401 + if (as3722->en_ac_ok_pwr_on) 402 + val = AS3722_CTRL_SEQU1_AC_OK_PWR_ON; 403 + ret = as3722_update_bits(as3722, AS3722_CTRL_SEQU1_REG, 404 + AS3722_CTRL_SEQU1_AC_OK_PWR_ON, val); 405 + if (ret < 0) { 406 + dev_err(as3722->dev, "CTRLsequ1 update failed: %d\n", ret); 407 + return ret; 408 + } 403 409 404 410 ret = devm_mfd_add_devices(&i2c->dev, -1, as3722_devs, 405 411 ARRAY_SIZE(as3722_devs), NULL, 0,
+3
include/linux/mfd/as3722.h
··· 296 296 #define AS3722_ADC1_CONV_NOTREADY BIT(7) 297 297 #define AS3722_ADC1_SOURCE_SELECT_MASK 0x1F 298 298 299 + #define AS3722_CTRL_SEQU1_AC_OK_PWR_ON BIT(0) 300 + 299 301 /* GPIO modes */ 300 302 #define AS3722_GPIO_MODE_MASK 0x07 301 303 #define AS3722_GPIO_MODE_INPUT 0x00 ··· 393 391 unsigned long irq_flags; 394 392 bool en_intern_int_pullup; 395 393 bool en_intern_i2c_pullup; 394 + bool en_ac_ok_pwr_on; 396 395 struct regmap_irq_chip_data *irq_data; 397 396 }; 398 397