1
0
mirror of https://github.com/aolofsson/oh.git synced 2025-01-30 02:32:53 +08:00

GPIO: Add raw register access API

Add gpio_reg_write() and gpio_reg_read() functions.

Signed-off-by: Ola Jeppsson <ola@adapteva.com>
This commit is contained in:
Ola Jeppsson 2016-04-13 15:31:47 +02:00
parent 137994f13a
commit 510b6669a8
4 changed files with 86 additions and 0 deletions

View File

@ -65,4 +65,38 @@ int gpio_write(gpio_dev_t *dev, unsigned gpio, int value);
* @return 0 on success, negative on error.
*/
int gpio_toggle(gpio_dev_t *dev, unsigned gpio);
/*** Raw register access API */
#define GPIO_REG_DIR (0x0 << 3)
#define GPIO_REG_IN (0x1 << 3)
#define GPIO_REG_OUT (0x2 << 3)
#define GPIO_REG_OUTCLR (0x3 << 3)
#define GPIO_REG_OUTSET (0x4 << 3)
#define GPIO_REG_OUTXORA (0x5 << 3)
#define GPIO_REG_IMASK (0x6 << 3)
#define GPIO_REG_ITYPE (0x7 << 3)
#define GPIO_REG_IPOL (0x8 << 3)
#define GPIO_REG_ILAT (0x9 << 3)
#define GPIO_REG_ILATCLR (0xA << 3)
/**
* gpio_reg_read - Read a GPIO register
*
* @param dev device structure
* @param reg gpio register
*
* @return Register value, no error checking.
*/
//uint64_t gpio_reg_read(gpio_dev_t *dev, unsigned reg);
/**
* gpio_reg_write - write to a GPIO register
*
* @param dev device structure
* @param reg gpio register
*
*/
//void gpio_reg_write(gpio_dev_t *dev, unsigned reg, uint64_t value);
```

View File

@ -64,3 +64,18 @@ static int _gpio_toggle(struct gpio_generic_dev *dev, unsigned gpio)
return 0;
}
__unused
static uint64_t _gpio_reg_read(struct gpio_generic_dev *dev, unsigned reg)
{
uint64_t *regs = (uint64_t *) dev->regs;
return regs[reg];
}
__unused
static void _gpio_reg_write(struct gpio_generic_dev *dev, unsigned reg,
uint64_t value)
{
uint64_t *regs = (uint64_t *) dev->regs;
regs[reg] = value;
}

View File

@ -27,3 +27,5 @@ static int gpio_init(gpio_dev_t *dev, void *arg)
#define gpio_read _gpio_read
#define gpio_write _gpio_write
#define gpio_toggle _gpio_toggle
#define gpio_reg_read _gpio_reg_read
#define gpio_reg_write _gpio_reg_write

View File

@ -63,6 +63,41 @@
*/
//int gpio_toggle(gpio_dev_t *dev, unsigned gpio);
/*** Raw register access API */
#define GPIO_REG_DIR (0x0 << 3)
#define GPIO_REG_IN (0x1 << 3)
#define GPIO_REG_OUT (0x2 << 3)
#define GPIO_REG_OUTCLR (0x3 << 3)
#define GPIO_REG_OUTSET (0x4 << 3)
#define GPIO_REG_OUTXORA (0x5 << 3)
#define GPIO_REG_IMASK (0x6 << 3)
#define GPIO_REG_ITYPE (0x7 << 3)
#define GPIO_REG_IPOL (0x8 << 3)
#define GPIO_REG_ILAT (0x9 << 3)
#define GPIO_REG_ILATCLR (0xA << 3)
/**
* gpio_reg_read - Read a GPIO register
*
* @param dev device structure
* @param reg gpio register
*
* @return Register value, no error checking.
*/
//uint64_t gpio_reg_read(gpio_dev_t *dev, unsigned reg);
/**
* gpio_reg_write - write to a GPIO register
*
* @param dev device structure
* @param reg gpio register
*
*/
//void gpio_reg_write(gpio_dev_t *dev, unsigned reg, uint64_t value);
#ifndef __unused
# if defined(__GNUC__) || defined(__clang__)
# define __unused __attribute__((unused))