On Mon, Nov 28, 2016 at 01:25:37PM -0800, John Muir wrote: > > > On Nov 28, 2016, at 11:58 AM, Guenter Roeck <li...@roeck-us.net> wrote: > > > > On Mon, Nov 28, 2016 at 11:40:42AM -0800, John Muir wrote: > >>>> +static void tmp108_update_ready_time(struct tmp108 *tmp108) > >>>> +{ > >>>> + tmp108->ready_time = jiffies; > >>>> + if ((tmp108->config & TMP108_CONF_MODE_MASK) > >>>> + == TMP108_MODE_CONTINUOUS) { > >>> > >>> Don't you want a "!" here ? Presumably the delay is only needed > >>> if the original configuration was not for continuous mode. > >>> > >>>> + tmp108->ready_time += > >>>> + msecs_to_jiffies(TMP108_CONVERSION_TIME_MS); > >>>> + } > >>>> +} > >> The delay is required for both really. When the device is set into > >> continuous mode it starts converting and the first temperature is ready > >> (just under) 30ms later. > >> > > > > The datasheet states, though, that the chip will start converting as soon > > as the device powers up. The kernel would have to start really fast after > > that > > to have to wait another 30 ms. > > > > The current code ends up waiting if it doesn't have to (because it waits > > if the chip was originally configured for continuous mode), and not waiting > > if it has to (because the chip was not configured for continuous mode), > > which doesn't seem to be such a good idea. > > You are referring to the statement under “Conversion Rate” in the data sheet? > > "After power-up or a general-call reset, the TMP108 immediately starts a > conversion, as shown in Figure 9. The first result is available after 27 ms > (typical).” > > The datasheet also states that in ’shutdown’ mode, the device is only > powering the serial interface (see "Mode Bits”). So, I assumed that the > conversions weren’t happening during in that state, and that there would be > the delay after moving from the ‘shutdown' state (as is described by the > one-shot mode as well where the device state returns to ’shutdown’ when the > conversion has taken place).
The device is, after power-on, not in shutdown mode. > > My intention was that the delay is enforced after PM resume, and for > convenience I re-used the same function during probe to initialize the > ready_time. I was assuming that the device could be in the shutdown state - > for example if the module had previously been unloaded. I agree that this is > not required at system startup time. Perhaps I should check to see if the > previous configuration had the device in the ‘shutdown’ state, and in that > instance apply the delay? In my opinion it doesn’t really matter either way. > > FYI, this same logic exists in the TMP102 device driver. The TMP102 device is > very similar. > The tmp102 driver adds the timeout if the device was in shutdown mode (SD=1). if (tmp102->config_orig & TMP102_CONF_SD) { ... tmp102->ready_time += msecs_to_jiffies(CONVERSION_TIME_MS); } Your code adds the timeout if the device was in continuous operation mode (M1=1). if ((tmp108->config & TMP108_CONF_MODE_MASK) == TMP108_MODE_CONTINUOUS) { tmp108->ready_time += msecs_to_jiffies(TMP108_CONVERSION_TIME_MS); } Unless I am missing something, that is exactly the opposite. Side note: Per datasheet, M0 is irrelevant if M1=1. The above check does not match M1=1, M0=1, but that condition would still reflect continuous mode. Guenter -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html