MLK-17341-1: max9286: Add power up pin setting
authorSandor Yu <Sandor.yu@nxp.com>
Thu, 4 Jan 2018 09:19:51 +0000 (17:19 +0800)
committerNitin Garg <nitin.garg@nxp.com>
Tue, 20 Mar 2018 19:52:31 +0000 (14:52 -0500)
Add power up pin setting for max9286 driver.

Acked-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Sandor Yu <Sandor.yu@nxp.com>
drivers/media/platform/imx8/max9286.c
drivers/media/platform/imx8/max9286.h

index d3b83fc..73841a8 100644 (file)
@@ -2821,6 +2821,17 @@ static int max9286_probe(struct i2c_client *client,
                return retval;
        }
 
+       /* request power down pin */
+       max9286_data->pwn_gpio = of_get_named_gpio(dev->of_node, "pwn-gpios", 0);
+       if (!gpio_is_valid(max9286_data->pwn_gpio)) {
+               dev_err(dev, "no sensor pwdn pin available\n");
+               return -ENODEV;
+       }
+       retval = devm_gpio_request_one(dev, max9286_data->pwn_gpio, GPIOF_OUT_INIT_HIGH,
+                                       "max9286_pwd");
+       if (retval < 0)
+               return retval;
+
        clk_prepare_enable(max9286_data->sensor_clk);
 
        max9286_data->i2c_client = client;
@@ -2844,6 +2855,7 @@ static int max9286_probe(struct i2c_client *client,
        if (retval != 0x40) {
                pr_warning("max9286 is not found, chip id reg 0x1e = 0x%x.\n", retval);
                clk_disable_unprepare(max9286_data->sensor_clk);
+               devm_gpio_free(dev, max9286_data->pwn_gpio);
                return -ENODEV;
        }
 
@@ -2852,6 +2864,7 @@ static int max9286_probe(struct i2c_client *client,
        if  (max9286_data->sensor_num == 0) {
                pr_warning("cameras are not found,\n");
                clk_disable_unprepare(max9286_data->sensor_clk);
+               devm_gpio_free(dev, max9286_data->pwn_gpio);
                return -ENODEV;
        }
 
index bf4bf98..8688b86 100644 (file)
@@ -84,5 +84,6 @@ struct sensor_data {
 
        unsigned int sensor_num;       /* sensor num connect max9271 */
        unsigned char sensor_is_there; /* Bit 0~3 for 4 cameras, 0b1= is there; 0b0 = is not there */
+       int pwn_gpio;
 };
 #endif