uboot/arch/arm/mach-at91/include/mach/atmel_pio4.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright (C) 2015 Atmel Corporation.
   4 *                    Wenyou Yang <wenyou.yang@atmel.com>
   5 */
   6
   7#ifndef __ATMEL_PIO4_H
   8#define __ATMEL_PIO4_H
   9
  10#ifndef __ASSEMBLY__
  11
  12struct atmel_pio4_port {
  13        u32 mskr;               /* 0x00 PIO Mask Register */
  14        u32 cfgr;               /* 0x04 PIO Configuration Register */
  15        u32 pdsr;               /* 0x08 PIO Pin Data Status Register */
  16        u32 locksr;             /* 0x0C PIO Lock Status Register */
  17        u32 sodr;               /* 0x10 PIO Set Output Data Register */
  18        u32 codr;               /* 0x14 PIO Clear Output Data Register */
  19        u32 odsr;               /* 0x18 PIO Output Data Status Register */
  20        u32 reserved0;
  21        u32 ier;                /* 0x20 PIO Interrupt Enable Register */
  22        u32 idr;                /* 0x24 PIO Interrupt Disable Register */
  23        u32 imr;                /* 0x28 PIO Interrupt Mask Register */
  24        u32 isr;                /* 0x2C PIO Interrupt Status Register */
  25        u32 reserved1[3];
  26        u32 iofr;               /* 0x3C PIO I/O Freeze Register */
  27};
  28
  29#endif
  30
  31/*
  32 * PIO Configuration Register Fields
  33 */
  34#define ATMEL_PIO_CFGR_FUNC_MASK        GENMASK(2, 0)
  35#define ATMEL_PIO_CFGR_FUNC_GPIO        (0x0 << 0)
  36#define ATMEL_PIO_CFGR_FUNC_PERIPH_A    (0x1 << 0)
  37#define ATMEL_PIO_CFGR_FUNC_PERIPH_B    (0x2 << 0)
  38#define ATMEL_PIO_CFGR_FUNC_PERIPH_C    (0x3 << 0)
  39#define ATMEL_PIO_CFGR_FUNC_PERIPH_D    (0x4 << 0)
  40#define ATMEL_PIO_CFGR_FUNC_PERIPH_E    (0x5 << 0)
  41#define ATMEL_PIO_CFGR_FUNC_PERIPH_F    (0x6 << 0)
  42#define ATMEL_PIO_CFGR_FUNC_PERIPH_G    (0x7 << 0)
  43#define ATMEL_PIO_DIR_MASK              BIT(8)
  44#define ATMEL_PIO_PUEN_MASK             BIT(9)
  45#define ATMEL_PIO_PDEN_MASK             BIT(10)
  46#define ATMEL_PIO_IFEN_MASK             BIT(12)
  47#define ATMEL_PIO_IFSCEN_MASK           BIT(13)
  48#define ATMEL_PIO_OPD_MASK              BIT(14)
  49#define ATMEL_PIO_SCHMITT_MASK          BIT(15)
  50#define ATMEL_PIO_DRVSTR_MASK           GENMASK(17, 16)
  51#define ATMEL_PIO_DRVSTR_LO             (1 << 16)
  52#define ATMEL_PIO_DRVSTR_ME             (2 << 16)
  53#define ATMEL_PIO_DRVSTR_HI             (3 << 16)
  54#define ATMEL_PIO_CFGR_EVTSEL_MASK      GENMASK(26, 24)
  55#define ATMEL_PIO_CFGR_EVTSEL_FALLING   (0 << 24)
  56#define ATMEL_PIO_CFGR_EVTSEL_RISING    (1 << 24)
  57#define ATMEL_PIO_CFGR_EVTSEL_BOTH      (2 << 24)
  58#define ATMEL_PIO_CFGR_EVTSEL_LOW       (3 << 24)
  59#define ATMEL_PIO_CFGR_EVTSEL_HIGH      (4 << 24)
  60
  61#define ATMEL_PIO_NPINS_PER_BANK        32
  62#define ATMEL_PIO_BANK(pin_id)          (pin_id / ATMEL_PIO_NPINS_PER_BANK)
  63#define ATMEL_PIO_LINE(pin_id)          (pin_id % ATMEL_PIO_NPINS_PER_BANK)
  64#define ATMEL_PIO_BANK_OFFSET           0x40
  65
  66#define ATMEL_GET_PIN_NO(pinfunc)       ((pinfunc) & 0xff)
  67#define ATMEL_GET_PIN_FUNC(pinfunc)     ((pinfunc >> 16) & 0xf)
  68#define ATMEL_GET_PIN_IOSET(pinfunc)    ((pinfunc >> 20) & 0xf)
  69
  70#define AT91_PIO_PORTA          0x0
  71#define AT91_PIO_PORTB          0x1
  72#define AT91_PIO_PORTC          0x2
  73#define AT91_PIO_PORTD          0x3
  74
  75int atmel_pio4_set_gpio(u32 port, u32 pin, u32 config);
  76int atmel_pio4_set_a_periph(u32 port, u32 pin, u32 config);
  77int atmel_pio4_set_b_periph(u32 port, u32 pin, u32 config);
  78int atmel_pio4_set_c_periph(u32 port, u32 pin, u32 config);
  79int atmel_pio4_set_d_periph(u32 port, u32 pin, u32 config);
  80int atmel_pio4_set_e_periph(u32 port, u32 pin, u32 config);
  81int atmel_pio4_set_f_periph(u32 port, u32 pin, u32 config);
  82int atmel_pio4_set_g_periph(u32 port, u32 pin, u32 config);
  83int atmel_pio4_set_pio_output(u32 port, u32 pin, u32 value);
  84int atmel_pio4_get_pio_input(u32 port, u32 pin);
  85
  86#endif
  87