> Except this, LGTM. > > Documentation and DT patch: > > Reviewed-by: David Heidelberg <david@xxxxxxx> > > + > > + return IIO_VAL_INT; > > + case IIO_CHAN_INFO_SCALE: > > + *val = 1; > > + > > + return IIO_VAL_INT; > > + default: > > + return -EINVAL; > > + } > > +} > > + > > +static const struct iio_info al3000a_info = { > > + .read_raw = al3000a_read_raw, > > +}; > > + > > +static int al3000a_probe(struct i2c_client *client) > > +{ > > + struct al3000a_data *data; > > + struct device *dev = &client->dev; > > + struct iio_dev *indio_dev; > > + int ret; > > + > > + indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); > > + if (!indio_dev) > > + return -ENOMEM; > > + > > + data = iio_priv(indio_dev); > > + i2c_set_clientdata(client, indio_dev); > > + > > + data->regmap = devm_regmap_init_i2c(client, &al3000a_regmap_config); > > + if (IS_ERR(data->regmap)) > > + return dev_err_probe(dev, PTR_ERR(data->regmap), > > + "cannot allocate regmap\n"); > > + > > + data->vdd_supply = devm_regulator_get(dev, "vdd"); > > + if (IS_ERR(data->vdd_supply)) > > + return dev_err_probe(dev, PTR_ERR(data->vdd_supply), > > + "failed to get vdd regulator\n"); > > + > > + indio_dev->info = &al3000a_info; > > + indio_dev->name = AL3000A_DRV_NAME; > > + indio_dev->channels = al3000a_channels; > > + indio_dev->num_channels = ARRAY_SIZE(al3000a_channels); > > + indio_dev->modes = INDIO_DIRECT_MODE; > > + > > + ret = al3000a_init(data); > > + if (ret < 0) > > + return dev_err_probe(dev, ret, "failed to init ALS\n"); > > + > > + ret = devm_add_action_or_reset(dev, al3000a_set_pwr_off, data); > > + if (ret < 0) > > + return dev_err_probe(dev, ret, "failed to add action\n"); > > + > > + return devm_iio_device_register(dev, indio_dev); > > +} > > + > > +static int al3000a_suspend(struct device *dev) > > +{ > > + struct al3000a_data *data = iio_priv(dev_get_drvdata(dev)); > > + > > + return al3000a_set_pwr(data, false); > > +} > > + > > +static int al3000a_resume(struct device *dev) > > +{ > > + struct al3000a_data *data = iio_priv(dev_get_drvdata(dev)); > > + > > + return al3000a_set_pwr(data, true); > > +} > > + > > +static DEFINE_SIMPLE_DEV_PM_OPS(al3000a_pm_ops, al3000a_suspend, al3000a_resume); > > + > > +static const struct of_device_id al3000a_of_match[] = { > > + { .compatible = "dynaimage,al3000a" }, > > + { /* sentinel */ } > > +}; > > +MODULE_DEVICE_TABLE(of, al3000a_of_match); > > + > > +static struct i2c_driver al3000a_driver = { > > + .driver = { > > + .name = AL3000A_DRV_NAME, > > + .of_match_table = al3000a_of_match, > > + .pm = pm_sleep_ptr(&al3000a_pm_ops), > > + }, > > + .probe = al3000a_probe, > > +}; > > +module_i2c_driver(al3000a_driver); > > + > > +MODULE_AUTHOR("Svyatolsav Ryhel <clamor95@xxxxxxxxx>"); > > +MODULE_DESCRIPTION("al3000a Ambient Light Sensor driver"); > > +MODULE_LICENSE("GPL"); > > -- > David Heidelberg >