]> Pileus Git - ~andy/linux/blobdiff - drivers/media/i2c/noon010pc30.c
Merge branch 'for-3.14' of git://linux-nfs.org/~bfields/linux
[~andy/linux] / drivers / media / i2c / noon010pc30.c
index 8554b47f993a373f4f1b5558d5055ae3a45a197f..271d0b7967a6f3f7b875a2187352de690634a5ac 100644 (file)
@@ -19,7 +19,6 @@
 #include <linux/slab.h>
 #include <linux/regulator/consumer.h>
 #include <media/noon010pc30.h>
-#include <media/v4l2-chip-ident.h>
 #include <linux/videodev2.h>
 #include <linux/module.h>
 #include <media/v4l2-ctrls.h>
@@ -712,7 +711,7 @@ static int noon010_probe(struct i2c_client *client,
                return -EIO;
        }
 
-       info = kzalloc(sizeof(*info), GFP_KERNEL);
+       info = devm_kzalloc(&client->dev, sizeof(*info), GFP_KERNEL);
        if (!info)
                return -ENOMEM;
 
@@ -746,57 +745,50 @@ static int noon010_probe(struct i2c_client *client,
        info->curr_win          = &noon010_sizes[0];
 
        if (gpio_is_valid(pdata->gpio_nreset)) {
-               ret = gpio_request(pdata->gpio_nreset, "NOON010PC30 NRST");
+               ret = devm_gpio_request_one(&client->dev, pdata->gpio_nreset,
+                                           GPIOF_OUT_INIT_LOW,
+                                           "NOON010PC30 NRST");
                if (ret) {
                        dev_err(&client->dev, "GPIO request error: %d\n", ret);
                        goto np_err;
                }
                info->gpio_nreset = pdata->gpio_nreset;
-               gpio_direction_output(info->gpio_nreset, 0);
                gpio_export(info->gpio_nreset, 0);
        }
 
        if (gpio_is_valid(pdata->gpio_nstby)) {
-               ret = gpio_request(pdata->gpio_nstby, "NOON010PC30 NSTBY");
+               ret = devm_gpio_request_one(&client->dev, pdata->gpio_nstby,
+                                           GPIOF_OUT_INIT_LOW,
+                                           "NOON010PC30 NSTBY");
                if (ret) {
                        dev_err(&client->dev, "GPIO request error: %d\n", ret);
-                       goto np_gpio_err;
+                       goto np_err;
                }
                info->gpio_nstby = pdata->gpio_nstby;
-               gpio_direction_output(info->gpio_nstby, 0);
                gpio_export(info->gpio_nstby, 0);
        }
 
        for (i = 0; i < NOON010_NUM_SUPPLIES; i++)
                info->supply[i].supply = noon010_supply_name[i];
 
-       ret = regulator_bulk_get(&client->dev, NOON010_NUM_SUPPLIES,
+       ret = devm_regulator_bulk_get(&client->dev, NOON010_NUM_SUPPLIES,
                                 info->supply);
        if (ret)
-               goto np_reg_err;
+               goto np_err;
 
        info->pad.flags = MEDIA_PAD_FL_SOURCE;
        sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_SENSOR;
        ret = media_entity_init(&sd->entity, 1, &info->pad, 0);
        if (ret < 0)
-               goto np_me_err;
+               goto np_err;
 
        ret = noon010_detect(client, info);
        if (!ret)
                return 0;
 
-np_me_err:
-       regulator_bulk_free(NOON010_NUM_SUPPLIES, info->supply);
-np_reg_err:
-       if (gpio_is_valid(info->gpio_nstby))
-               gpio_free(info->gpio_nstby);
-np_gpio_err:
-       if (gpio_is_valid(info->gpio_nreset))
-               gpio_free(info->gpio_nreset);
 np_err:
        v4l2_ctrl_handler_free(&info->hdl);
        v4l2_device_unregister_subdev(sd);
-       kfree(info);
        return ret;
 }
 
@@ -807,17 +799,8 @@ static int noon010_remove(struct i2c_client *client)
 
        v4l2_device_unregister_subdev(sd);
        v4l2_ctrl_handler_free(&info->hdl);
-
-       regulator_bulk_free(NOON010_NUM_SUPPLIES, info->supply);
-
-       if (gpio_is_valid(info->gpio_nreset))
-               gpio_free(info->gpio_nreset);
-
-       if (gpio_is_valid(info->gpio_nstby))
-               gpio_free(info->gpio_nstby);
-
        media_entity_cleanup(&sd->entity);
-       kfree(info);
+
        return 0;
 }