summaryrefslogtreecommitdiff
path: root/drivers/media/i2c
diff options
context:
space:
mode:
authorShiju Mathew <shijum@codeaurora.org>2016-05-25 21:35:46 -0400
committerGerrit - the friendly Code Review server <code-review@localhost>2017-05-26 01:39:27 -0700
commit8ff7c3b809aa1a1624252c5418b657862501bffc (patch)
tree2b5862e39c97da39c03ec8bcc8e336e624d3aba5 /drivers/media/i2c
parent626fd0016f880c03b52b9d7a933ef7b62a06f290 (diff)
adv7481: Add voltage regulator configurations for adv7481
Configure voltage regulator for adv7481 CCI interface. CRs-Fixed: 1021381 Change-Id: I6a9f023a84450d56ba313af2bcee2216a1008213 Signed-off-by: Shiju Mathew <shijum@codeaurora.org>
Diffstat (limited to 'drivers/media/i2c')
-rw-r--r--drivers/media/i2c/adv7481.c45
1 files changed, 38 insertions, 7 deletions
diff --git a/drivers/media/i2c/adv7481.c b/drivers/media/i2c/adv7481.c
index ea42320c0532..447fa23e713c 100644
--- a/drivers/media/i2c/adv7481.c
+++ b/drivers/media/i2c/adv7481.c
@@ -79,6 +79,11 @@ enum adv7481_gpio_t {
struct adv7481_state {
struct device *dev;
+ /* VREG */
+ struct camera_vreg_t *cci_vreg;
+ struct regulator *cci_reg_ptr[MAX_REGULATOR];
+ int32_t regulator_count;
+
/* I2C */
struct msm_camera_i2c_client i2c_client;
u32 cci_master;
@@ -2044,11 +2049,13 @@ err_cci_init:
return ret;
}
-static int adv7481_parse_dt(struct adv7481_state *state)
+static int adv7481_parse_dt(struct platform_device *pdev,
+ struct adv7481_state *state)
{
struct device_node *np = state->dev->of_node;
uint32_t i = 0;
int gpio_count = 0;
+ struct resource *adv_addr_res = NULL;
int ret = 0;
/* config CCI */
@@ -2060,13 +2067,12 @@ static int adv7481_parse_dt(struct adv7481_state *state)
goto exit;
}
pr_debug("%s: cci_master: 0x%x\n", __func__, state->cci_master);
- ret = of_property_read_u32(np, "qcom,slave-addr",
- &state->i2c_slave_addr);
- if (ret < 0) {
- pr_err("%s: failed to read slave-addr. ret %d\n",
- __func__, ret);
+ adv_addr_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!adv_addr_res) {
+ pr_err("%s: failed to read adv7481 resource.\n", __func__);
goto exit;
}
+ state->i2c_slave_addr = adv_addr_res->start;
pr_debug("%s: i2c_slave_addr: 0x%x\n", __func__, state->i2c_slave_addr);
state->i2c_io_addr = (uint8_t)state->i2c_slave_addr;
@@ -2124,7 +2130,7 @@ static int adv7481_probe(struct platform_device *pdev)
state->dev = &pdev->dev;
mutex_init(&state->mutex);
- ret = adv7481_parse_dt(state);
+ ret = adv7481_parse_dt(pdev, state);
if (ret < 0) {
pr_err("Error parsing dt tree\n");
goto err_mem_free;
@@ -2136,6 +2142,31 @@ static int adv7481_probe(struct platform_device *pdev)
goto err_mem_free;
}
+ /* config VREG */
+ ret = msm_camera_get_dt_vreg_data(pdev->dev.of_node,
+ &(state->cci_vreg), &(state->regulator_count));
+ if (ret < 0) {
+ pr_err("%s:cci get_dt_vreg failed\n", __func__);
+ goto err_mem_free;
+ }
+
+ ret = msm_camera_config_vreg(&pdev->dev, state->cci_vreg,
+ state->regulator_count, NULL, 0,
+ &state->cci_reg_ptr[0], 1);
+ if (ret < 0) {
+ pr_err("%s:cci config_vreg failed\n", __func__);
+ goto err_mem_free;
+ }
+
+ ret = msm_camera_enable_vreg(&pdev->dev, state->cci_vreg,
+ state->regulator_count, NULL, 0,
+ &state->cci_reg_ptr[0], 1);
+ if (ret < 0) {
+ pr_err("%s:cci enable_vreg failed\n", __func__);
+ goto err_mem_free;
+ }
+ pr_debug("%s - VREG Initialized...\n", __func__);
+
/* Configure and Register V4L2 Sub-device */
sd = &state->sd;
v4l2_subdev_init(sd, &adv7481_ops);