/* * include/media/i2c/adp1653.h * * Copyright (C) 2008--2011 Nokia Corporation * * Contact: Sakari Ailus * * Contributors: * Sakari Ailus * Tuukka Toivonen * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * */ #ifndef ADP1653_H #define ADP1653_H #include #include #include #include #include #define ADP1653_NAME "adp1653" #define ADP1653_I2C_ADDR (0x60 >> 1) /* Register definitions */ #define ADP1653_REG_OUT_SEL 0x00 #define ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN 0x01 #define ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX 0x0b #define ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN 0x0c #define ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX 0x1f #define ADP1653_REG_OUT_SEL_HPLED_SHIFT 3 #define ADP1653_REG_OUT_SEL_ILED_MAX 0x07 #define ADP1653_REG_OUT_SEL_ILED_SHIFT 0 #define ADP1653_REG_CONFIG 0x01 #define ADP1653_REG_CONFIG_TMR_CFG (1 << 4) #define ADP1653_REG_CONFIG_TMR_SET_MAX 0x0f #define ADP1653_REG_CONFIG_TMR_SET_SHIFT 0 #define ADP1653_REG_SW_STROBE 0x02 #define ADP1653_REG_SW_STROBE_SW_STROBE (1 << 0) #define ADP1653_REG_FAULT 0x03 #define ADP1653_REG_FAULT_FLT_SCP (1 << 3) #define ADP1653_REG_FAULT_FLT_OT (1 << 2) #define ADP1653_REG_FAULT_FLT_TMR (1 << 1) #define ADP1653_REG_FAULT_FLT_OV (1 << 0) #define ADP1653_INDICATOR_INTENSITY_MIN 0 #define ADP1653_INDICATOR_INTENSITY_STEP 2500 #define ADP1653_INDICATOR_INTENSITY_MAX \ (ADP1653_REG_OUT_SEL_ILED_MAX * ADP1653_INDICATOR_INTENSITY_STEP) #define ADP1653_INDICATOR_INTENSITY_uA_TO_REG(a) \ ((a) / ADP1653_INDICATOR_INTENSITY_STEP) #define ADP1653_INDICATOR_INTENSITY_REG_TO_uA(a) \ ((a) * ADP1653_INDICATOR_INTENSITY_STEP) #define ADP1653_FLASH_INTENSITY_BASE 35 #define ADP1653_FLASH_INTENSITY_STEP 15 #define ADP1653_FLASH_INTENSITY_MIN \ (ADP1653_FLASH_INTENSITY_BASE \ + ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN * ADP1653_FLASH_INTENSITY_STEP) #define ADP1653_FLASH_INTENSITY_MAX \ (ADP1653_FLASH_INTENSITY_MIN + \ (ADP1653_REG_OUT_SEL_HPLED_FLASH_MAX - \ ADP1653_REG_OUT_SEL_HPLED_FLASH_MIN + 1) * \ ADP1653_FLASH_INTENSITY_STEP) #define ADP1653_FLASH_INTENSITY_mA_TO_REG(a) \ ((a) < ADP1653_FLASH_INTENSITY_BASE ? 0 : \ (((a) - ADP1653_FLASH_INTENSITY_BASE) / ADP1653_FLASH_INTENSITY_STEP)) #define ADP1653_FLASH_INTENSITY_REG_TO_mA(a) \ ((a) * ADP1653_FLASH_INTENSITY_STEP + ADP1653_FLASH_INTENSITY_BASE) #define ADP1653_TORCH_INTENSITY_MIN \ (ADP1653_FLASH_INTENSITY_BASE \ + ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN * ADP1653_FLASH_INTENSITY_STEP) #define ADP1653_TORCH_INTENSITY_MAX \ (ADP1653_TORCH_INTENSITY_MIN + \ (ADP1653_REG_OUT_SEL_HPLED_TORCH_MAX - \ ADP1653_REG_OUT_SEL_HPLED_TORCH_MIN + 1) * \ ADP1653_FLASH_INTENSITY_STEP) struct adp1653_platform_data { int (*power)(struct v4l2_subdev *sd, int on); u32 max_flash_timeout; /* flash light timeout in us */ u32 max_flash_intensity; /* led intensity, flash mode, mA */ u32 max_torch_intensity; /* led intensity, torch mode, mA */ u32 max_indicator_intensity; /* indicator led intensity, uA */ struct gpio_desc *enable_gpio; /* for device-tree based boot */ }; #define to_adp1653_flash(sd) container_of(sd, struct adp1653_flash, subdev) struct adp1653_flash { struct v4l2_subdev subdev; struct adp1653_platform_data *platform_data; struct v4l2_ctrl_handler ctrls; struct v4l2_ctrl *led_mode; struct v4l2_ctrl *flash_timeout; struct v4l2_ctrl *flash_intensity; struct v4l2_ctrl *torch_intensity; struct v4l2_ctrl *indicator_intensity; struct mutex power_lock; int power_count; int fault; }; #endif /* ADP1653_H */ ='0' selected='selected'>includemode:
authorChen-Yu Tsai <wens@csie.org>2016-11-11 11:12:43 +0800
committerMark Brown <broonie@kernel.org>2016-11-11 15:34:45 +0000
commit618c808968852609d2d9f0e5cfc351a4807ef8d0 (patch)
tree01a8d928c06fe7bef488f55bade6ba37b958bb5f /include/dt-bindings/clock/gxbb-clkc.h
parent1001354ca34179f3db924eb66672442a173147dc (diff)
regulator: axp20x: Fix axp809 ldo_io registration error on cold boot
The maximum supported voltage for ldo_io# is 3.3V, but on cold boot the selector comes up at 0x1f, which maps to 3.8V. This was previously corrected by Allwinner's U-boot, which set all regulators on the PMICs to some pre-configured voltage. With recent progress in U-boot SPL support, this is no longer the case. In any case we should handle this quirk in the kernel driver as well. This invalid setting causes _regulator_get_voltage() to fail with -EINVAL which causes regulator registration to fail when constrains are used: [ 1.054181] vcc-pg: failed to get the current voltage(-22) [ 1.059670] axp20x-regulator axp20x-regulator.0: Failed to register ldo_io0 [ 1.069749] axp20x-regulator: probe of axp20x-regulator.0 failed with error -22 This commits makes the axp20x regulator driver accept the 0x1f register value, fixing this. The datasheet does not guarantee reliable operation above 3.3V, so on boards where this regulator is used the regulator-max-microvolt setting must be 3.3V or less. This is essentially the same as the commit f40d4896bf32 ("regulator: axp20x: Fix axp22x ldo_io registration error on cold boot") for AXP22x PMICs. Fixes: a51f9f4622a3 ("regulator: axp20x: support AXP809 variant") Signed-off-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'include/dt-bindings/clock/gxbb-clkc.h')