Hi Mark,
thanks a lot for your feedback! Much appreciated.
On 07/14/2014 11:52 AM, Mark Rutland wrote:
> On Fri, Jul 11, 2014 at 11:06:33AM +0100, Daniel Mack wrote:
>> +++ b/Documentation/devicetree/bindings/input/cap1106.txt
>> @@ -0,0 +1,63 @@
>> +Device tree bindings for Microchip CAP1106, 6 channel capacitive touch
>> sensor
>> +
>> +The node for this driver must be a child of a I2C controller node, as the
>> +device communication via I2C only.
>> +
>> +Required properties:
>> +
>> + compatible: Must be "microchip,cap1106"
>> + reg: The I2C slave address of the device.
>> + Only 0x28 is valid.
>> + interrupt: Node describing the interrupt line the
>> device's
>> + ALERT#/CM_IRQ# pin is connected to.
>
> s/interrupt/interrupts/
>
> This is a _property_, not a node.
Yes, I reworded that description a couple of times. Together with
interrupt-parent, it's actually a property referencing a node ;) Will fix.
> I take it the device only has a single interrupt line?
Yes.
>> +
>> +Optional properties:
>> +
>> + autorepeat: Enables the Linux input system's autorepeat
>> + feature on the input device.
>> + microchip,sensor-gain: Defines the gain of the sensor circuitry.
>> This
>> + effectively controls the sensitivity, as a
>> + smaller delta capacitance is required to
>> + generate the same delta count values.
>> + Valid values are 1, 2, 4, and 8.
>> + By default, a gain of 1 is set.
>
> Does the official documentation describe this in absolute terms?
The documentation describes the gain feature as "1, 2, 4, or 8", so I
kept it like this in the bindings. Internally, the register stores that
value in 2 bits. The driver takes care for the translation.
>> +To define details of each individual button channel, six subnodes can be
>> +specified. Inside each of those, the following property is valid:
>> +
>> + linux,keycode: Specify the numeric identifier of the keycode to be
>> + generated when this channel is activated. If this
>> + property is omitted, KEY_A, KEY_B, etc are used as
>> + defaults.
>
> What are those subnodes, and how are they told apart? Name, compatible?
>
> I strongly recommend against relying on the order of the DT. It's very
> easy for that to get messed up and makes things hard to read.
>
> Is is not possible to use linux,keymap and treat the buttons as a
> matrix keypad? Then you don't need subnodes at all, and you can have a
> sparse keymap if you want.
Hmm, I thought about that, but there are - in theory - more details that
could be specified per channel. I left those functions out for the first
version, as I have no good way to test them.
Hence, my idea was to have everything related to one channel nicely
grouped in a subnode. I've also seen bindings that rely on the order of
subnodes before, for example in regulator drivers.
But I agree with you that it makes board definitions error-prone.
linux,keycode feels a bit overkill here though, so I'd rather go for a
fixed-size linux,keycodes property. The number of entries is fixed,
anyway. Would you be fine with that?
>> +struct cap1106_priv {
>> + struct regmap *regmap;
>> + struct input_dev *idev;
>> + struct work_struct work;
>> + spinlock_t lock;
>> + bool closed:1;
>
> I don't think you're saving anything here by trying to have a bool
> bitfield.
That variable has been dropped in v3 already :)
>> + i = 0;
>> + for_each_child_of_node(node, child) {
>> + if (i == CAP1106_NUM_CHN) {
>> + dev_err(dev, "Too many button nodes.\n");
>> + return -EINVAL;
>> + }
>> +
>> + if (!of_property_read_u32(child, "linux,keycode", &tmp32))
>> + priv->keycodes[i] = tmp32;
>> +
>> + i++;
>> + }
>
> I don't think that it is a good idea to rely on the order of sub-nodes
> in the DTB.
Jup, I agree. As mentioned above, I'd like to solve that with
linux,keycode for now.
> [...]
>
>> + if (of_get_property(node, "autorepeat", NULL))
>> + __set_bit(EV_REP, priv->idev->evbit);
>
> Use of_property_read_bool.
Will do, thanks.
> /me mutters usual grumblings about the autorepeat property.
I took that from the gpio-keys driver. Is there a better way to denote
such a feature?
Thanks,
Daniel
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html