On Wed, Sep 26, 2018 at 01:44:55PM -0700, Guenter Roeck wrote: > On Wed, Sep 26, 2018 at 01:25:20PM -0700, Nicolin Chen wrote: > > Hello, > > > > On Wed, Sep 26, 2018 at 12:58:17PM -0700, Guenter Roeck wrote: > > > On Wed, Sep 26, 2018 at 11:02:44AM -0700, Nicolin Chen wrote: > > > > On Wed, Sep 26, 2018 at 06:06:32AM -0700, Guenter Roeck wrote: > > > > > On 09/25/2018 11:42 PM, Nicolin Chen wrote: > > > > > > The inX_enable interface allows user space to enable or disable > > > > > > the corresponding channel. Meanwhile, according to hwmon ABI, a > > > > > > disabled channel/sensor should return -ENODATA as a read result. > > > > > > > > > > > > However, there're configurable nodes sharing the same __show() > > > > > > functions. So this change also adds to check if the attribute is > > > > > > read-only to make sure it's not reading a configuration but the > > > > > > sensor data. > > > > > > > > > One necessary high level change I don't see below: With this change, > > > > > we should no longer drop a channel entirely if it is disabled from > > > > > devicetree. All channels should be visible but report -ENODATA if > > > > > disabled. In other words, it should be possible for the 'enable' flag > > > > > to override settings in DT. > > > > > > > > Hmm...I don't feel so convinced here. The status in DT binding isn't > > > > exactly a setting but a physical status: if a hardware design leaves > > > > a channel to be disconnected, I don't really see a point in enabling > > > > it in the runtime. Or maybe you can shed some light on it? > > > > > > > > > > You are making an assumption from your use case. It might as well be that > > > some or all channels are disabled in DT by default to conserve power, > > > not because they are disconnected. > > > > I think I probably should update my DT binding somehow to say it > > explicitly that the property should be only used in cases of the > > physical disconnections, although I feel the current binding "no > > input source" already has the same meaning. > > > > In my opinion, disabling channels in DT to save power isn't very > > plausible, because it sounds more likely a user decision, while, > > as we know, DT merely describes the hardware design. > > > > I try to avoid making such assumptions. All I know is that I'll have > to deal with the fallout if a single person wants to use the property > differently. I can understand your point (or pain lol). But I believe in such a case, DT maintainers should reject such a DT change. Let's say if this kinda "default setting" in DT is allowable, other things such as having a default mode setting between polling or one-shot modes, and as default critical current settings would be able to put into DT. But we know that these would be rejected as a reason of "not being hardware design but a user decision". > This is similar to disabling an entire subsystem in DT > because it isn't used in a specific system - say, a SPI or I2C bus > which has nothing connected on some shipping hardware, even though > the board has a connector for it. Your argument is that one shall > not use the status property do disable loading the driver, and that > one must not remove a set of properties for unused hardware either. > That doesn't sound very realistic to me. SPI/I2C is a good example comparing to my case. And you do make a point. In that case, I think DT overlay is designed for it -- one shall overlay the status property from "disable" (defined in the DTS of the shipping hardware -- the main board) to "okay" in the overlay DTS where a connection actually happens. And even in this case, it makes sense to me to disable both the status and the driver of SPI/I2C for the main board. Otherwise, memory could be wasted for standalone main board users at those unused SPI/I2C buses -- and the memory might be larger than one could expect depending on where drivers allocate data buffers. > Point is that I don't _know_ how this is going to be used, so I'd > rather keep it flexible. Well, taking one step back, I am okay to follow your way if you are really firm about it. Just please give me a more reply and I will merge this change to that v5, dropping the is_visible(). Actually neither the is_visible nor inX_enable is that essential for me. I am just trying to do what I feel right. Thank you Nicolin