Messages in this thread | | | Date | Wed, 20 Apr 2022 11:36:20 +0200 | Subject | Re: [PATCH 2/2] iio: stk3310: Export near level property for proximity sensor | From | Arnaud Ferraris <> |
| |
Hi Jonathan,
Le 16/04/2022 à 18:26, Jonathan Cameron a écrit : > On Fri, 15 Apr 2022 10:50:18 +0200 > Arnaud Ferraris <arnaud.ferraris@collabora.com> wrote: > >> This makes the value from which an object should be considered "near" >> available to userspace. This hardware-dependent value should be set >> in the device-tree. >> >> Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com> > Hi Arnaud, > > Minor request to slightly modify how you do this inline. > Otherwise looks good to me. > > Thanks, > > Jonathan > >> --- >> drivers/iio/light/stk3310.c | 26 ++++++++++++++++++++++++++ >> 1 file changed, 26 insertions(+) >> >> diff --git a/drivers/iio/light/stk3310.c b/drivers/iio/light/stk3310.c >> index 1d02dfbc29d1..7792456323ef 100644 >> --- a/drivers/iio/light/stk3310.c >> +++ b/drivers/iio/light/stk3310.c >> @@ -106,6 +106,7 @@ struct stk3310_data { >> struct mutex lock; >> bool als_enabled; >> bool ps_enabled; >> + uint32_t ps_near_level; >> u64 timestamp; >> struct regmap *regmap; >> struct regmap_field *reg_state; >> @@ -135,6 +136,25 @@ static const struct iio_event_spec stk3310_events[] = { >> }, >> }; >> >> +static ssize_t stk3310_read_near_level(struct iio_dev *indio_dev, >> + uintptr_t priv, >> + const struct iio_chan_spec *chan, >> + char *buf) >> +{ >> + struct stk3310_data *data = iio_priv(indio_dev); >> + >> + return sprintf(buf, "%u\n", data->ps_near_level); >> +} >> + >> +static const struct iio_chan_spec_ext_info stk3310_ext_info[] = { >> + { >> + .name = "nearlevel", >> + .shared = IIO_SEPARATE, >> + .read = stk3310_read_near_level, >> + }, >> + { /* sentinel */ } >> +}; >> + >> static const struct iio_chan_spec stk3310_channels[] = { >> { >> .type = IIO_LIGHT, >> @@ -151,6 +171,7 @@ static const struct iio_chan_spec stk3310_channels[] = { >> BIT(IIO_CHAN_INFO_INT_TIME), >> .event_spec = stk3310_events, >> .num_event_specs = ARRAY_SIZE(stk3310_events), >> + .ext_info = stk3310_ext_info, >> } >> }; >> >> @@ -581,6 +602,11 @@ static int stk3310_probe(struct i2c_client *client, >> data = iio_priv(indio_dev); >> data->client = client; >> i2c_set_clientdata(client, indio_dev); >> + >> + if (device_property_read_u32(&client->dev, "proximity-near-level", >> + &data->ps_near_level)) >> + data->ps_near_level = 0; > > Prefer this pattern. > > data->ps_near_level = 0; > device_property_read_u32(&client->dev, "proximity-near-level", > &data->ps_near_level); > taking advantage of the fact that the output won't be set unless > the property read succeeds.
That's a good suggestion indeed! We can even get rid of the initial assignment as the struct is zero-initialized on alloc, will send a v2 in a moment.
Thanks, Arnaud
> >> + >> mutex_init(&data->lock); >> >> ret = stk3310_regmap_init(data); >
| |