[U-Boot] [PATCH v3 12/16] dm: Add GPIO support and tests

Marek Vasut marex at denx.de
Fri Jun 28 23:51:13 CEST 2013


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.

> +	int (*get_state)(struct device *dev, unsigned offset, char *state,
> +			 int maxlen);
> +};

[...]

Best regards,
Marek Vasut


More information about the U-Boot mailing list