static int vprbrd_adc_remove(struct platform_device *pdev) { struct iio_dev *indio_dev = platform_get_drvdata(pdev); iio_device_unregister(indio_dev); iio_device_free(indio_dev); return 0; }
static int mcp3422_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct iio_dev *iio; struct mcp3422 *adc; int err; u8 config; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -ENODEV; iio = iio_device_alloc(sizeof(*adc)); if (!iio) return -ENOMEM; adc = iio_priv(iio); adc->i2c = client; mutex_init(&adc->lock); iio->dev.parent = &client->dev; iio->name = dev_name(&client->dev); iio->modes = INDIO_DIRECT_MODE; iio->info = &mcp3422_info; switch ((unsigned int)(id->driver_data)) { case 2: case 3: iio->channels = mcp3422_channels; iio->num_channels = ARRAY_SIZE(mcp3422_channels); break; case 4: iio->channels = mcp3424_channels; iio->num_channels = ARRAY_SIZE(mcp3424_channels); break; } /* meaningful default configuration */ config = (MCP3422_CONT_SAMPLING | MCP3422_CHANNEL_VALUE(1) | MCP3422_PGA_VALUE(MCP3422_PGA_1) | MCP3422_SAMPLE_RATE_VALUE(MCP3422_SRATE_240)); mcp3422_update_config(adc, config); err = iio_device_register(iio); if (err < 0) goto iio_free; i2c_set_clientdata(client, iio); return 0; iio_free: iio_device_free(iio); return err; }
static int st_hub_euler_probe(struct platform_device *pdev) { int err; struct iio_dev *indio_dev; struct st_hub_pdata_info *info; struct st_hub_sensor_data *adata; struct st_sensor_hub_callbacks callback; indio_dev = iio_device_alloc(sizeof(*adata)); if (!indio_dev) return -ENOMEM; platform_set_drvdata(pdev, indio_dev); indio_dev->channels = st_hub_euler_ch; indio_dev->num_channels = ARRAY_SIZE(st_hub_euler_ch); indio_dev->dev.parent = &pdev->dev; indio_dev->info = &st_hub_euler_info; indio_dev->name = pdev->name; indio_dev->modes = INDIO_DIRECT_MODE; adata = iio_priv(indio_dev); info = pdev->dev.platform_data; st_hub_get_common_data(info->hdata, info->index, &adata->cdata); err = st_hub_set_default_values(adata, info, indio_dev); if (err < 0) goto st_hub_deallocate_device; err = iio_triggered_buffer_setup(indio_dev, NULL, NULL, &st_hub_buffer_setup_ops); if (err) goto st_hub_deallocate_device; err = st_hub_setup_trigger_sensor(indio_dev, adata); if (err < 0) goto st_hub_clear_buffer; err = iio_device_register(indio_dev); if (err) goto st_hub_remove_trigger; callback.pdev = pdev; callback.push_data = &st_hub_euler_push_data; st_hub_register_callback(info->hdata, &callback, info->index); return 0; st_hub_remove_trigger: st_hub_remove_trigger(adata); st_hub_clear_buffer: iio_triggered_buffer_cleanup(indio_dev); st_hub_deallocate_device: iio_device_free(indio_dev); return err; }
static int isl29018_remove(struct i2c_client *client) { struct iio_dev *indio_dev = i2c_get_clientdata(client); dev_dbg(&client->dev, "%s()\n", __func__); iio_device_unregister(indio_dev); iio_device_free(indio_dev); return 0; }
static int hmc5843_remove(struct i2c_client *client) { struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); /* sleep mode to save power */ hmc5843_configure(client, HMC5843_MODE_SLEEP); iio_device_free(indio_dev); return 0; }
static int isl29018_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct isl29018_chip *chip; struct iio_dev *indio_dev; int err; indio_dev = iio_device_alloc(sizeof(*chip)); if (indio_dev == NULL) { dev_err(&client->dev, "iio allocation fails\n"); err = -ENOMEM; goto exit; } chip = iio_priv(indio_dev); i2c_set_clientdata(client, indio_dev); chip->dev = &client->dev; mutex_init(&chip->lock); chip->lux_scale = 1; chip->range = 1000; chip->adc_bit = 16; chip->suspended = false; chip->regmap = devm_regmap_init_i2c(client, &isl29018_regmap_config); if (IS_ERR(chip->regmap)) { err = PTR_ERR(chip->regmap); dev_err(chip->dev, "regmap initialization failed: %d\n", err); goto exit; } err = isl29018_chip_init(chip); if (err) goto exit_iio_free; indio_dev->info = &isl29108_info; indio_dev->channels = isl29018_channels; indio_dev->num_channels = ARRAY_SIZE(isl29018_channels); indio_dev->name = id->name; indio_dev->dev.parent = &client->dev; indio_dev->modes = INDIO_DIRECT_MODE; err = iio_device_register(indio_dev); if (err) { dev_err(&client->dev, "iio registration fails\n"); goto exit_iio_free; } return 0; exit_iio_free: iio_device_free(indio_dev); exit: return err; }
void st_press_common_remove(struct iio_dev *indio_dev) { struct st_sensor_data *pdata = iio_priv(indio_dev); iio_device_unregister(indio_dev); if (pdata->get_irq_data_ready(indio_dev) > 0) { st_sensors_deallocate_trigger(indio_dev); st_press_deallocate_ring(indio_dev); } iio_device_free(indio_dev); }
static int __devexit tiadc_remove(struct platform_device *pdev) { struct iio_dev *indio_dev = platform_get_drvdata(pdev); iio_device_unregister(indio_dev); tiadc_channels_remove(indio_dev); iio_device_free(indio_dev); return 0; }
static int max517_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct max517_data *data; struct iio_dev *indio_dev; struct max517_platform_data *platform_data = client->dev.platform_data; int err; indio_dev = iio_device_alloc(sizeof(*data)); if (indio_dev == NULL) { err = -ENOMEM; goto exit; } data = iio_priv(indio_dev); i2c_set_clientdata(client, indio_dev); data->client = client; /* establish that the iio_dev is a child of the i2c device */ indio_dev->dev.parent = &client->dev; /* reduced channel set for MAX517 */ if (id->driver_data == ID_MAX517) indio_dev->num_channels = 1; else indio_dev->num_channels = 2; indio_dev->channels = max517_channels; indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->info = &max517_info; /* * Reference voltage on MAX518 and default is 5V, else take vref_mv * from platform_data */ if (id->driver_data == ID_MAX518 || !platform_data) { data->vref_mv[0] = data->vref_mv[1] = 5000; /* mV */ } else { data->vref_mv[0] = platform_data->vref_mv[0]; data->vref_mv[1] = platform_data->vref_mv[1]; } err = iio_device_register(indio_dev); if (err) goto exit_free_device; dev_info(&client->dev, "DAC registered\n"); return 0; exit_free_device: iio_device_free(indio_dev); exit: return err; }
static int st_hub_step_detector_remove(struct platform_device *pdev) { struct iio_dev *indio_dev = platform_get_drvdata(pdev); struct st_hub_sensor_data *adata = iio_priv(indio_dev); iio_device_unregister(indio_dev); st_hub_remove_trigger(adata); iio_triggered_buffer_cleanup(indio_dev); iio_device_free(indio_dev); return 0; }
static int __devinit tiadc_probe(struct platform_device *pdev) { struct iio_dev *indio_dev; struct tiadc_device *adc_dev; struct ti_tscadc_dev *tscadc_dev = pdev->dev.platform_data; struct mfd_tscadc_board *pdata; int err; pdata = tscadc_dev->dev->platform_data; if (!pdata || !pdata->adc_init) { dev_err(&pdev->dev, "Could not find platform data\n"); return -EINVAL; } indio_dev = iio_device_alloc(sizeof(struct tiadc_device)); if (indio_dev == NULL) { dev_err(&pdev->dev, "failed to allocate iio device\n"); err = -ENOMEM; goto err_ret; } adc_dev = iio_priv(indio_dev); adc_dev->mfd_tscadc = tscadc_dev; adc_dev->channels = pdata->adc_init->adc_channels; indio_dev->dev.parent = &pdev->dev; indio_dev->name = dev_name(&pdev->dev); indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->info = &tiadc_info; tiadc_step_config(adc_dev); err = tiadc_channel_init(indio_dev, adc_dev); if (err < 0) goto err_free_device; err = iio_device_register(indio_dev); if (err) goto err_free_channels; platform_set_drvdata(pdev, indio_dev); dev_info(&pdev->dev, "Initialized\n"); return 0; err_free_channels: tiadc_channels_remove(indio_dev); err_free_device: iio_device_free(indio_dev); err_ret: return err; }
static void m4pas_remove_iiodev(struct iio_dev *iio) { struct m4pas_driver_data *dd = iio_priv(iio); /* Remember, only call when dd->mutex is locked */ iio_kfifo_free(iio->buffer); iio_buffer_unregister(iio); iio_device_unregister(iio); mutex_destroy(&(dd->mutex)); iio_device_free(iio); /* dd is freed here */ return; }
static int adis16400_probe(struct spi_device *spi) { struct adis16400_state *st; struct iio_dev *indio_dev; int ret; indio_dev = iio_device_alloc(sizeof(*st)); if (indio_dev == NULL) return -ENOMEM; st = iio_priv(indio_dev); /* this is only used for removal purposes */ spi_set_drvdata(spi, indio_dev); /* setup the industrialio driver allocated elements */ st->variant = &adis16400_chips[spi_get_device_id(spi)->driver_data]; indio_dev->dev.parent = &spi->dev; indio_dev->name = spi_get_device_id(spi)->name; indio_dev->channels = st->variant->channels; indio_dev->num_channels = st->variant->num_channels; indio_dev->info = &adis16400_info; indio_dev->modes = INDIO_DIRECT_MODE; if (!(st->variant->flags & ADIS16400_NO_BURST)) indio_dev->available_scan_masks = adis16400_burst_scan_mask; ret = adis_init(&st->adis, indio_dev, spi, &adis16400_data); if (ret) goto error_free_dev; ret = adis_setup_buffer_and_trigger(&st->adis, indio_dev, adis16400_trigger_handler); if (ret) goto error_free_dev; /* Get the device into a sane initial state */ ret = adis16400_initial_setup(indio_dev); if (ret) goto error_cleanup_buffer; ret = iio_device_register(indio_dev); if (ret) goto error_cleanup_buffer; adis16400_debugfs_init(indio_dev); return 0; error_cleanup_buffer: adis_cleanup_buffer_and_trigger(&st->adis, indio_dev); error_free_dev: iio_device_free(indio_dev); return ret; }
static int spear_adc_remove(struct platform_device *pdev) { struct iio_dev *iodev = platform_get_drvdata(pdev); struct spear_adc_info *info = iio_priv(iodev); iio_device_unregister(iodev); clk_disable_unprepare(info->clk); clk_put(info->clk); iounmap(info->adc_base_spear6xx); iio_device_free(iodev); return 0; }
static int ak8975_remove(struct i2c_client *client) { struct iio_dev *indio_dev = i2c_get_clientdata(client); struct ak8975_data *data = iio_priv(indio_dev); iio_device_unregister(indio_dev); if (gpio_is_valid(data->eoc_gpio)) gpio_free(data->eoc_gpio); iio_device_free(indio_dev); return 0; }
static int adis16400_remove(struct spi_device *spi) { struct iio_dev *indio_dev = spi_get_drvdata(spi); struct adis16400_state *st = iio_priv(indio_dev); iio_device_unregister(indio_dev); adis16400_stop_device(indio_dev); adis_cleanup_buffer_and_trigger(&st->adis, indio_dev); iio_device_free(indio_dev); return 0; }
static int isl29028_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct isl29028_chip *chip; struct iio_dev *indio_dev; int ret; indio_dev = iio_device_alloc(sizeof(*chip)); if (!indio_dev) { dev_err(&client->dev, "iio allocation fails\n"); return -ENOMEM; } chip = iio_priv(indio_dev); i2c_set_clientdata(client, indio_dev); chip->dev = &client->dev; mutex_init(&chip->lock); chip->regmap = devm_regmap_init_i2c(client, &isl29028_regmap_config); if (IS_ERR(chip->regmap)) { ret = PTR_ERR(chip->regmap); dev_err(chip->dev, "regmap initialization failed: %d\n", ret); goto exit_iio_free; } ret = isl29028_chip_init(chip); if (ret < 0) { dev_err(chip->dev, "chip initialization failed: %d\n", ret); goto exit_iio_free; } indio_dev->info = &isl29028_info; indio_dev->channels = isl29028_channels; indio_dev->num_channels = ARRAY_SIZE(isl29028_channels); indio_dev->name = id->name; indio_dev->dev.parent = &client->dev; indio_dev->modes = INDIO_DIRECT_MODE; ret = iio_device_register(indio_dev); if (ret < 0) { dev_err(chip->dev, "iio registration fails with error %d\n", ret); goto exit_iio_free; } return 0; exit_iio_free: iio_device_free(indio_dev); return ret; }
static int ad7298_remove(struct spi_device *spi) { struct iio_dev *indio_dev = spi_get_drvdata(spi); struct ad7298_state *st = iio_priv(indio_dev); iio_device_unregister(indio_dev); iio_triggered_buffer_cleanup(indio_dev); if (st->ext_ref) { regulator_disable(st->reg); regulator_put(st->reg); } iio_device_free(indio_dev); return 0; }
static int __devexit ad7298_remove(struct spi_device *spi) { struct iio_dev *indio_dev = spi_get_drvdata(spi); struct ad7298_state *st = iio_priv(indio_dev); iio_device_unregister(indio_dev); ad7298_ring_cleanup(indio_dev); if (!IS_ERR(st->reg)) { regulator_disable(st->reg); regulator_put(st->reg); } iio_device_free(indio_dev); return 0; }
static int __devexit lpc32xx_adc_remove(struct platform_device *pdev) { struct iio_dev *iodev = platform_get_drvdata(pdev); struct lpc32xx_adc_info *info = iio_priv(iodev); int irq = platform_get_irq(pdev, 0); iio_device_unregister(iodev); free_irq(irq, iodev); platform_set_drvdata(pdev, NULL); clk_put(info->clk); iounmap(info->adc_base); iio_device_free(iodev); return 0; }
static int palmas_gpadc_remove(struct platform_device *pdev) { struct iio_dev *iodev = dev_to_iio_dev(&pdev->dev); struct palmas_gpadc *adc = iio_priv(iodev); struct palmas_platform_data *pdata = dev_get_platdata(pdev->dev.parent); if (pdata->gpadc_pdata->iio_maps) iio_map_array_unregister(iodev); iio_device_unregister(iodev); free_irq(adc->irq, adc); if (adc->wakeup1_enable) free_irq(adc->irq_auto_0, adc); if (adc->wakeup2_enable) free_irq(adc->irq_auto_1, adc); iio_device_free(iodev); return 0; }
static int bcove_gpadc_remove(struct platform_device *pdev) { struct iio_dev *indio_dev = platform_get_drvdata(pdev); struct gpadc_info *info = iio_priv(indio_dev); sysfs_remove_group(&pdev->dev.kobj, &intel_basincove_gpadc_attr_group); iio_device_unregister(indio_dev); iio_map_array_unregister(indio_dev); free_irq(info->irq, info); iounmap(info->intr); iio_device_free(indio_dev); return 0; }
static int ad5504_remove(struct spi_device *spi) { struct iio_dev *indio_dev = spi_get_drvdata(spi); struct ad5504_state *st = iio_priv(indio_dev); iio_device_unregister(indio_dev); if (spi->irq) free_irq(spi->irq, indio_dev); if (!IS_ERR(st->reg)) { regulator_disable(st->reg); regulator_put(st->reg); } iio_device_free(indio_dev); return 0; }
static int m4pas_create_iiodev(struct iio_dev *iio) { int err = 0; struct m4pas_driver_data *dd = iio_priv(iio); iio->name = M4PAS_DRIVER_NAME; iio->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_HARDWARE; iio->num_channels = 1; iio->info = &m4pas_iio_info; iio->channels = m4pas_iio_channels; iio->buffer = iio_kfifo_allocate(iio); if (iio->buffer == NULL) { m4pas_err("%s: Failed to allocate IIO buffer.\n", __func__); err = -ENOMEM; goto m4pas_create_iiodev_kfifo_fail; } iio->buffer->scan_timestamp = true; iio->buffer->access->set_bytes_per_datum(iio->buffer, sizeof(dd->iiodat)); err = iio_buffer_register(iio, iio->channels, iio->num_channels); if (err < 0) { m4pas_err("%s: Failed to register IIO buffer.\n", __func__); goto m4pas_create_iiodev_buffer_fail; } err = iio_device_register(iio); if (err < 0) { m4pas_err("%s: Failed to register IIO device.\n", __func__); goto m4pas_create_iiodev_iioreg_fail; } goto m4pas_create_iiodev_exit; m4pas_create_iiodev_iioreg_fail: iio_buffer_unregister(iio); m4pas_create_iiodev_buffer_fail: iio_kfifo_free(iio->buffer); m4pas_create_iiodev_kfifo_fail: iio_device_free(iio); /* dd is freed here */ m4pas_create_iiodev_exit: return err; }
static int __devinit ad7152_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret = 0; struct ad7152_chip_info *chip; struct iio_dev *indio_dev; indio_dev = iio_device_alloc(sizeof(*chip)); if (indio_dev == NULL) { ret = -ENOMEM; goto error_ret; } chip = iio_priv(indio_dev); /* this is only used for device removal purposes */ i2c_set_clientdata(client, indio_dev); chip->client = client; /* Establish that the iio_dev is a child of the i2c device */ indio_dev->name = id->name; indio_dev->dev.parent = &client->dev; indio_dev->info = &ad7152_info; indio_dev->channels = ad7152_channels; if (id->driver_data == 0) indio_dev->num_channels = ARRAY_SIZE(ad7152_channels); else indio_dev->num_channels = 2; indio_dev->num_channels = ARRAY_SIZE(ad7152_channels); indio_dev->modes = INDIO_DIRECT_MODE; ret = iio_device_register(indio_dev); if (ret) goto error_free_dev; dev_err(&client->dev, "%s capacitive sensor registered\n", id->name); return 0; error_free_dev: iio_device_free(indio_dev); error_ret: return ret; }
static int yas_remove(struct i2c_client *i2c) { struct iio_dev *indio_dev = i2c_get_clientdata(i2c); struct yas_state *st; if (indio_dev) { st = iio_priv(indio_dev); #ifdef CONFIG_HAS_EARLYSUSPEND unregister_early_suspend(&st->sus); #endif yas_pseudo_irq_disable(indio_dev); st->acc.term(); iio_device_unregister(indio_dev); yas_remove_trigger(indio_dev); yas_remove_buffer(indio_dev); iio_device_free(indio_dev); this_client = NULL; } return 0; }
static int nuc970_adc_remove(struct platform_device *pdev) { struct iio_dev *indio_dev = platform_get_drvdata(pdev); struct nuc970_adc_device *info = iio_priv(indio_dev); iio_device_unregister(indio_dev); nuc970_adc_channels_remove(indio_dev); iio_device_free(indio_dev); clk_disable_unprepare(info->clk); clk_disable_unprepare(info->eclk); nuc970_adc_buffer_remove(indio_dev); free_irq(info->irq, info); writel(0, info->regs + CONF); //disable NACEN writel(0, info->regs + CTL); //enable AD_EN return 0; }
static int hmc5843_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct hmc5843_data *data; struct iio_dev *indio_dev; int err = 0; indio_dev = iio_device_alloc(sizeof(*data)); if (indio_dev == NULL) { err = -ENOMEM; goto exit; } /* default settings at probe */ data = iio_priv(indio_dev); data->meas_conf = HMC5843_MEAS_CONF_NORMAL; data->range = HMC5843_RANGE_GAIN_DEFAULT; data->operating_mode = HMC5843_MODE_CONVERSION_CONTINUOUS; i2c_set_clientdata(client, indio_dev); hmc5843_init_client(client, id); indio_dev->info = &hmc5843_info; indio_dev->name = id->name; indio_dev->dev.parent = &client->dev; indio_dev->modes = INDIO_DIRECT_MODE; err = iio_device_register(indio_dev); if (err) goto exit_free2; return 0; exit_free2: iio_device_free(indio_dev); exit: return err; }
static int vprbrd_adc_probe(struct platform_device *pdev) { struct vprbrd *vb = dev_get_drvdata(pdev->dev.parent); struct vprbrd_adc *adc; struct iio_dev *indio_dev; int ret; /* registering iio */ indio_dev = iio_device_alloc(sizeof(*adc)); if (!indio_dev) { dev_err(&pdev->dev, "failed allocating iio device\n"); return -ENOMEM; } adc = iio_priv(indio_dev); adc->vb = vb; indio_dev->name = "viperboard adc"; indio_dev->dev.parent = &pdev->dev; indio_dev->info = &vprbrd_adc_iio_info; indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->channels = vprbrd_adc_iio_channels; indio_dev->num_channels = ARRAY_SIZE(vprbrd_adc_iio_channels); ret = iio_device_register(indio_dev); if (ret) { dev_err(&pdev->dev, "could not register iio (adc)"); goto error; } platform_set_drvdata(pdev, indio_dev); return 0; error: iio_device_free(indio_dev); return ret; }
static int __devinit ad9852_probe(struct spi_device *spi) { struct ad9852_state *st; struct iio_dev *idev; int ret = 0; idev = iio_device_alloc(sizeof(*st)); if (idev == NULL) { ret = -ENOMEM; goto error_ret; } st = iio_priv(idev); spi_set_drvdata(spi, idev); mutex_init(&st->lock); st->sdev = spi; idev->dev.parent = &spi->dev; idev->info = &ad9852_info; idev->modes = INDIO_DIRECT_MODE; ret = iio_device_register(idev); if (ret) goto error_free_dev; spi->max_speed_hz = 2000000; spi->mode = SPI_MODE_3; spi->bits_per_word = 8; spi_setup(spi); ad9852_init(st); return 0; error_free_dev: iio_device_free(idev); error_ret: return ret; }