Am 2022-07-04 18:01, schrieb Aidan MacDonald:
Am 2022-07-03 13:10, schrieb Aidan MacDonald:Yeah, I only need direction, but there's no advantage to creating a
Some devices use a multi-bit register field to change the GPIOThanks for working on this. Here are my thoughts on how to improve
input/output direction. Add the ->reg_field_xlate() callback to
support such devices in gpio-regmap.
->reg_field_xlate() builds on ->reg_mask_xlate() by allowing the
driver to return a mask and values to describe a register field.
gpio-regmap will use the mask to isolate the field and compare or
update it using the values to implement GPIO level and direction
get and set ops.
it:
- I'm wary on the value translation of the set and get, you
don't need that at the moment, correct? I'd concentrate on
the direction for now.
- I'd add a xlate_direction(), see below for an example
specific mechanism. I'm not opposed to doing that but I don't see
how it can be done cleanly. Being more general is more consistent
for the API and implementation -- even if the extra flexibility
probably won't be needed, it doesn't hurt.
I'd prefer to keep it to the current use case. I'm not sure if
there are many controllers which have more than one bit for
the input and output state. And if, we are still limited to
one register, what if the bits are distributed among multiple
registers..
I found three drivers (not exhaustive) that have fields for setting the
output level: gpio-amd8111, gpio-creg-snps, and gpio-lp3943. Admittedly
that's more than I expected, so maybe we shouldn't dismiss the idea of
multi-bit output fields.
If you still think the API you're suggesting is better then I can go
with it, but IMHO it's more code and more special cases, even if only
a little bit.