Thread (8 messages) 8 messages, 4 authors, 2020-08-01

Re: [PATCH v2 2/2] iio: light: as73211: New driver

From: Jonathan Cameron <jic23@kernel.org>
Date: 2020-08-01 15:55:28
Also in: linux-iio, lkml

On Thu, 30 Jul 2020 12:18:56 +0200
Christian Eggers [off-list ref] wrote:
Hi Jonathan.

got your review nearly simultaneous with Andy's. There are many overlaps
between both. Most is already integrated, below I left only the open points.

On Tuesday, 28 July 2020, 20:01:14 CEST, Jonathan Cameron wrote:
quoted
Hi Christian,

I took a fairly quick look. Not divided into the datasheet or anything yet!  
quoted
Christian Eggers [off-list ref] wrote:  
quoted
+/**
+ * struct as73211_data - Instance data for one AS73211
+ * @client: I2C client.
+ * @osr:    Cached Operational State Register.
+ * @creg1:  Cached Configuration Register 1.
+ * @creg2:  Cached Configuration Register 2.
+ * @creg3:  Cached Configuration Register 3.  
Just a thought, but why not creg[3]?;  
creg[3] would be indexed from 0 to 2. But the datasheet names them 1 to 3.
quoted
quoted
+ * @buffer: Buffer for triggered measurements.  
?  Run kernel-doc, or build with W=1 and to check docs.  
I ran "make htmldoc" and enabled W=1. Are there any errors I should see?
quoted
quoted
+static unsigned int as73211_integration_time_us(struct as73211_data
*data)
+{
+   /* Integration time has 15 steps, the step size depends on the  
clock. */
quoted
quoted
+   unsigned int mul = 1 << (3 - (data->creg3 & 0b11));  /* 8 = 1.024  
MHz, 4
quoted
quoted
= 2.048 MHz ...*/ + unsigned int time_cycles =
as73211_integration_time_cycles(data); +    unsigned int time_us =
time_cycles * 125 * mul;  
This would be easier to read as

      unsigned int mul, time_cycles;

      mul = ...

      return time_cycles * 125 * mul;
 
changed this according to Andy's proposal.
quoted
quoted
+static int as73211_read_raw(struct iio_dev *indio_dev,
+                   struct iio_chan_spec const *chan,
+                   int *val, int *val2, long mask)  
Align parameters with opening bracket.  
Mixed tabs(8) and spaces or only spaces?
Tabs and spaces.
quoted
quoted
+static int _as73211_write_raw(struct iio_dev *indio_dev,
+                   struct iio_chan_spec const *chan  
__always_unused,
quoted
Whilst true, what's the benefit of marking that as __always_unused?
 
I read somewhere in the process docs that I should build with EXTRA_CFLAGS=-W
Probably a bit paranoid for a callback, but doesn't really matter.
quoted
quoted
+           } else {
+                   /* saturate all channels (useful for  
overflows) */
quoted
quoted
+                   iio_buffer[1] = 0xffff;
+                   iio_buffer[2] = 0xffff;
+                   iio_buffer[3] = 0xffff;  
That is rather non standard.  
How do other drivers handle measurement errors in buffered mode? The
application needs to know about measurement overflows as the integration
time and gain have to be adjusted in case.
It's actually pretty rare to have a device that reports and error.
Many just saturate.  So it's probably fine to mimic that here as long
as the issue is definitely saturation rather than some other error.
If it's another error, don't push data and log some sort of message.
Unfortunately there isn't really a standard interface for
reporting hardware faults in these sort of devices.

From what you have said I'll assume we are just looking at overflow
so can mimic saturation. In which case what you have done is fine.
quoted
quoted
+static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(as73211_show_samp_freq_available);
+static IIO_DEV_ATTR_INT_TIME_AVAIL(as73211_show_int_time_available);
+static IIO_DEVICE_ATTR(hardwaregain_available, S_IRUGO,
+           as73211_show_hardwaregain_available, NULL, 0);
+static IIO_CONST_ATTR_TEMP_OFFSET("-66.9");
+static IIO_CONST_ATTR_TEMP_SCALE("0.05");
+
+static struct attribute *as73211_attributes[] = {
+   &iio_dev_attr_sampling_frequency_available.dev_attr.attr,
+   &iio_dev_attr_integration_time_available.dev_attr.attr,
+   &iio_dev_attr_hardwaregain_available.dev_attr.attr,
+   &iio_const_attr_in_temp_offset.dev_attr.attr,
+   &iio_const_attr_in_temp_scale.dev_attr.attr,  
These should be handled via read_raw.  
Only the last two ones?
Yup
quoted
Ideally do the _available ones via the core callbacks
and _avail masks as well. For the more complex values,
compute the table on first read or at probe and cache it.  
The list of available values can depend on the setting of other attributes
(e.g. available integration times depends on sampling frequency).
That's not that unusual.  It's fine to calculate the values
returned as needed, or pick from a selection of options.
quoted
quoted
+   indio_dev->dev.parent = &client->dev;  
That is now set by the IIO core, so no need to set it manually.  
Can you please give me a pointer? Before removing this in my branch, I need to
make sure that this is already available in the kernel I'm using (5.4.latest).
I think I mentioned in a later thread, that's in linux-next now.
Though there was a bit of a messup where we added it then accidentally broke
it again, then fixed it finally.

Jonathan
quoted
quoted
+buffer_cleanup:
+   iio_triggered_buffer_cleanup(indio_dev);  
Should we not powerdown on error?  
yes, we should.
quoted
Also rather feels like we should have a trivial powerup function to
match with powerdown.  
changed as73211_powerdown() to as73211_power()

regards
Christian



________________________________
 [http://assets.arri.com/media/sign/2020-04-03-E-mail-signature-Stellar2_V1.jpg] <https://microsites.arri.com/stellar/>

Get all the latest information from www.arri.com<https://www.arri.com/>, Facebook<https://www.facebook.com/TeamARRI>, Twitter<https://twitter.com/ARRIChannel>, Instagram<https://instagram.com/arri> and YouTube<https://www.youtube.com/user/ARRIChannel>.

Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
Sitz: München - Registergericht: Amtsgericht München - Handelsregisternummer: HRA 57918
Persönlich haftender Gesellschafter: Arnold & Richter Cine Technik GmbH
Sitz: München - Registergericht: Amtsgericht München - Handelsregisternummer: HRB 54477
Geschäftsführer: Dr. Michael Neuhäuser; Stephan Schenk; Walter Trauninger; Markus Zeiler
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help