Home | History | Annotate | Download | only in mach
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (C) 2015 Atmel Corporation.
      4  *		      Wenyou Yang <wenyou.yang (at) atmel.com>
      5  */
      6 
      7 #ifndef __ATMEL_PIO4_H
      8 #define __ATMEL_PIO4_H
      9 
     10 #ifndef __ASSEMBLY__
     11 
     12 struct 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 
     75 int atmel_pio4_set_gpio(u32 port, u32 pin, u32 config);
     76 int atmel_pio4_set_a_periph(u32 port, u32 pin, u32 config);
     77 int atmel_pio4_set_b_periph(u32 port, u32 pin, u32 config);
     78 int atmel_pio4_set_c_periph(u32 port, u32 pin, u32 config);
     79 int atmel_pio4_set_d_periph(u32 port, u32 pin, u32 config);
     80 int atmel_pio4_set_e_periph(u32 port, u32 pin, u32 config);
     81 int atmel_pio4_set_f_periph(u32 port, u32 pin, u32 config);
     82 int atmel_pio4_set_g_periph(u32 port, u32 pin, u32 config);
     83 int atmel_pio4_set_pio_output(u32 port, u32 pin, u32 value);
     84 int atmel_pio4_get_pio_input(u32 port, u32 pin);
     85 
     86 #endif
     87