
Hi Marek,
On Fri, Jun 28, 2013 at 3:51 PM, Marek Vasut marex@denx.de wrote:
Dear Simon Glass,
Add driver model support for GPIOs. Since existing GPIO drivers do not
use
driver model, this feature must be enabled by CONFIG_DM_GPIO. After all GPO drivers are converted over we can perhaps remove this config.
Tests are provided for the sandbox implementation, and are a sufficient sanity check for basic operation.
The GPIO uclass understands the concept of named banks of GPIOs, with
each
GPIO device providing a single bank. Within each bank the GPIOs are numbered using an offset from 0 to n-1. For example a bank named 'b' with 20 offsets will provide GPIOs named b0 to b19.
Anonymous GPIO banks are also supported, and are just numbered without
any
prefix.
Each time a GPIO driver is added to the uclass, the GPIOs are renumbered accordinging, so there is always a global GPIO numbering order.
[...]
+struct dm_gpio_ops {
int (*request)(struct device *dev, unsigned offset, const char
*label);
int (*free)(struct device *dev, unsigned offset);
int (*direction_input)(struct device *dev, unsigned offset);
int (*direction_output)(struct device *dev, unsigned offset,
int value);
int (*get_value)(struct device *dev, unsigned offset);
int (*set_value)(struct device *dev, unsigned offset, int value);
int (*get_function)(struct device *dev, unsigned offset);
What's this "get_function()" call about? Is this to set GPIO AF ? If so, it's mixing pinmux and GPIO into one, that shouldn't happen.
It's this:
static const char * const gpio_function[] = { "input", "output", "unknown", };
We need to know the whether the pin is in use for GPIO and if so, whether it is input or output.
I have not looked at pinmux, but consider this out of scope for this series.
int (*get_state)(struct device *dev, unsigned offset, char *state,
int maxlen);
+};
[...]
Regards,
Simon