From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Fri, 28 Jun 2013 23:51:13 +0200 Subject: [U-Boot] [PATCH v3 12/16] dm: Add GPIO support and tests In-Reply-To: <1371613960-28678-13-git-send-email-sjg@chromium.org> References: <1371613960-28678-1-git-send-email-sjg@chromium.org> <1371613960-28678-13-git-send-email-sjg@chromium.org> Message-ID: <201306282351.13410.marex@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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