Staging: iio: some uninitialized variable bugs
[pandora-kernel.git] / drivers / staging / iio / dac / ad5624r_spi.c
index a945b18..a5b3776 100644 (file)
@@ -77,7 +77,7 @@ static ssize_t ad5624r_write_dac(struct device *dev,
        long readin;
        int ret;
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
+       struct ad5624r_state *st = iio_priv(indio_dev);
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 
        ret = strict_strtol(buf, 10, &readin);
@@ -94,7 +94,7 @@ static ssize_t ad5624r_read_powerdown_mode(struct device *dev,
                                      struct device_attribute *attr, char *buf)
 {
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
+       struct ad5624r_state *st = iio_priv(indio_dev);
 
        char mode[][15] = {"", "1kohm_to_gnd", "100kohm_to_gnd", "three_state"};
 
@@ -106,7 +106,7 @@ static ssize_t ad5624r_write_powerdown_mode(struct device *dev,
                                       const char *buf, size_t len)
 {
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
+       struct ad5624r_state *st = iio_priv(indio_dev);
        int ret;
 
        if (sysfs_streq(buf, "1kohm_to_gnd"))
@@ -126,7 +126,7 @@ static ssize_t ad5624r_read_dac_powerdown(struct device *dev,
                                           char *buf)
 {
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
+       struct ad5624r_state *st = iio_priv(indio_dev);
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 
        return sprintf(buf, "%d\n",
@@ -140,7 +140,7 @@ static ssize_t ad5624r_write_dac_powerdown(struct device *dev,
        long readin;
        int ret;
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
+       struct ad5624r_state *st = iio_priv(indio_dev);
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
 
        ret = strict_strtol(buf, 10, &readin);
@@ -166,7 +166,7 @@ static ssize_t ad5624r_show_scale(struct device *dev,
                                char *buf)
 {
        struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
+       struct ad5624r_state *st = iio_priv(indio_dev);
        /* Corresponds to Vref / 2^(bits) */
        unsigned int scale_uv = (st->vref_mv * 1000) >> st->chip_info->bits;
 
@@ -174,17 +174,6 @@ static ssize_t ad5624r_show_scale(struct device *dev,
 }
 static IIO_DEVICE_ATTR(out_scale, S_IRUGO, ad5624r_show_scale, NULL, 0);
 
-static ssize_t ad5624r_show_name(struct device *dev,
-                                struct device_attribute *attr,
-                                char *buf)
-{
-       struct iio_dev *indio_dev = dev_get_drvdata(dev);
-       struct ad5624r_state *st = iio_dev_get_devdata(indio_dev);
-
-       return sprintf(buf, "%s\n", spi_get_device_id(st->us)->name);
-}
-static IIO_DEVICE_ATTR(name, S_IRUGO, ad5624r_show_name, NULL, 0);
-
 static IIO_DEV_ATTR_OUT_RAW(0, ad5624r_write_dac, AD5624R_ADDR_DAC0);
 static IIO_DEV_ATTR_OUT_RAW(1, ad5624r_write_dac, AD5624R_ADDR_DAC1);
 static IIO_DEV_ATTR_OUT_RAW(2, ad5624r_write_dac, AD5624R_ADDR_DAC2);
@@ -222,7 +211,6 @@ static struct attribute *ad5624r_attributes[] = {
        &iio_dev_attr_out_powerdown_mode.dev_attr.attr,
        &iio_const_attr_out_powerdown_mode_available.dev_attr.attr,
        &iio_dev_attr_out_scale.dev_attr.attr,
-       &iio_dev_attr_name.dev_attr.attr,
        NULL,
 };
 
@@ -230,27 +218,34 @@ static const struct attribute_group ad5624r_attribute_group = {
        .attrs = ad5624r_attributes,
 };
 
+static const struct iio_info ad5624r_info = {
+       .attrs = &ad5624r_attribute_group,
+       .driver_module = THIS_MODULE,
+};
+
 static int __devinit ad5624r_probe(struct spi_device *spi)
 {
        struct ad5624r_state *st;
+       struct iio_dev *indio_dev;
+       struct regulator *reg;
        int ret, voltage_uv = 0;
 
-       st = kzalloc(sizeof(*st), GFP_KERNEL);
-       if (st == NULL) {
-               ret = -ENOMEM;
-               goto error_ret;
-       }
-       spi_set_drvdata(spi, st);
-
-       st->reg = regulator_get(&spi->dev, "vcc");
-       if (!IS_ERR(st->reg)) {
-               ret = regulator_enable(st->reg);
+       reg = regulator_get(&spi->dev, "vcc");
+       if (!IS_ERR(reg)) {
+               ret = regulator_enable(reg);
                if (ret)
                        goto error_put_reg;
 
-               voltage_uv = regulator_get_voltage(st->reg);
+               voltage_uv = regulator_get_voltage(reg);
        }
-
+       indio_dev = iio_allocate_device(sizeof(*st));
+       if (indio_dev == NULL) {
+               ret = -ENOMEM;
+               goto error_disable_reg;
+       }
+       st = iio_priv(indio_dev);
+       st->reg = reg;
+       spi_set_drvdata(spi, indio_dev);
        st->chip_info =
                &ad5624r_chip_info_tbl[spi_get_device_id(spi)->driver_data];
 
@@ -260,18 +255,13 @@ static int __devinit ad5624r_probe(struct spi_device *spi)
                st->vref_mv = st->chip_info->int_vref_mv;
 
        st->us = spi;
-       st->indio_dev = iio_allocate_device();
-       if (st->indio_dev == NULL) {
-               ret = -ENOMEM;
-               goto error_disable_reg;
-       }
-       st->indio_dev->dev.parent = &spi->dev;
-       st->indio_dev->attrs = &ad5624r_attribute_group;
-       st->indio_dev->dev_data = (void *)(st);
-       st->indio_dev->driver_module = THIS_MODULE;
-       st->indio_dev->modes = INDIO_DIRECT_MODE;
 
-       ret = iio_device_register(st->indio_dev);
+       indio_dev->dev.parent = &spi->dev;
+       indio_dev->name = spi_get_device_id(spi)->name;
+       indio_dev->info = &ad5624r_info;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+
+       ret = iio_device_register(indio_dev);
        if (ret)
                goto error_free_dev;
 
@@ -283,32 +273,29 @@ static int __devinit ad5624r_probe(struct spi_device *spi)
        return 0;
 
 error_free_dev:
-       iio_free_device(st->indio_dev);
+       iio_free_device(indio_dev);
 error_disable_reg:
-       if (!IS_ERR(st->reg))
-               regulator_disable(st->reg);
+       if (!IS_ERR(reg))
+               regulator_disable(reg);
 error_put_reg:
-       if (!IS_ERR(st->reg))
-               regulator_put(st->reg);
+       if (!IS_ERR(reg))
+               regulator_put(reg);
 
-       kfree(st);
-error_ret:
        return ret;
 }
 
 static int __devexit ad5624r_remove(struct spi_device *spi)
 {
-       struct ad5624r_state *st = spi_get_drvdata(spi);
-
-       iio_device_unregister(st->indio_dev);
-
-       if (!IS_ERR(st->reg)) {
-               regulator_disable(st->reg);
-               regulator_put(st->reg);
+       struct iio_dev *indio_dev = spi_get_drvdata(spi);
+       struct ad5624r_state *st = iio_priv(indio_dev);
+       struct regulator *reg = st->reg;
+
+       iio_device_unregister(indio_dev);
+       if (!IS_ERR(reg)) {
+               regulator_disable(reg);
+               regulator_put(reg);
        }
 
-       kfree(st);
-
        return 0;
 }