Blame view

kernel/linux-rt-4.4.41/include/linux/basic_mmio_gpio.h 2.23 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  /*
   * Basic memory-mapped GPIO controllers.
   *
   * Copyright 2008 MontaVista Software, Inc.
   * Copyright 2008,2010 Anton Vorontsov <cbouatmailru@gmail.com>
   *
   * This program is free software; you can redistribute  it and/or modify it
   * under  the terms of  the GNU General  Public License as published by the
   * Free Software Foundation;  either version 2 of the  License, or (at your
   * option) any later version.
   */
  
  #ifndef __BASIC_MMIO_GPIO_H
  #define __BASIC_MMIO_GPIO_H
  
  #include <linux/gpio.h>
  #include <linux/types.h>
  #include <linux/compiler.h>
  #include <linux/spinlock_types.h>
  
  struct bgpio_pdata {
  	const char *label;
  	int base;
  	int ngpio;
  };
  
  struct device;
  
  struct bgpio_chip {
  	struct gpio_chip gc;
  
  	unsigned long (*read_reg)(void __iomem *reg);
  	void (*write_reg)(void __iomem *reg, unsigned long data);
  
  	void __iomem *reg_dat;
  	void __iomem *reg_set;
  	void __iomem *reg_clr;
  	void __iomem *reg_dir;
  
  	/* Number of bits (GPIOs): <register width> * 8. */
  	int bits;
  
  	/*
  	 * Some GPIO controllers work with the big-endian bits notation,
  	 * e.g. in a 8-bits register, GPIO7 is the least significant bit.
  	 */
  	unsigned long (*pin2mask)(struct bgpio_chip *bgc, unsigned int pin);
  
  	/*
  	 * Used to lock bgpio_chip->data. Also, this is needed to keep
  	 * shadowed and real data registers writes together.
  	 */
  	spinlock_t lock;
  
  	/* Shadowed data register to clear/set bits safely. */
  	unsigned long data;
  
  	/* Shadowed direction registers to clear/set direction safely. */
  	unsigned long dir;
  };
  
  static inline struct bgpio_chip *to_bgpio_chip(struct gpio_chip *gc)
  {
  	return container_of(gc, struct bgpio_chip, gc);
  }
  
  int bgpio_remove(struct bgpio_chip *bgc);
  int bgpio_init(struct bgpio_chip *bgc, struct device *dev,
  	       unsigned long sz, void __iomem *dat, void __iomem *set,
  	       void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
  	       unsigned long flags);
  
  #define BGPIOF_BIG_ENDIAN		BIT(0)
  #define BGPIOF_UNREADABLE_REG_SET	BIT(1) /* reg_set is unreadable */
  #define BGPIOF_UNREADABLE_REG_DIR	BIT(2) /* reg_dir is unreadable */
  #define BGPIOF_BIG_ENDIAN_BYTE_ORDER	BIT(3)
  #define BGPIOF_READ_OUTPUT_REG_SET     BIT(4) /* reg_set stores output value */
  #define BGPIOF_NO_OUTPUT		BIT(5) /* only input */
  
  #endif /* __BASIC_MMIO_GPIO_H */