Blame view

kernel/linux-imx6_3.14.28/include/linux/mfd/smsc.h 2.85 KB
6b13f685e   김민수   BSP 최초 추가
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
  /*
   * SMSC ECE1099
   *
   * Copyright 2012 Texas Instruments Inc.
   *
   * Author: Sourav Poddar <sourav.poddar@ti.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 __LINUX_MFD_SMSC_H
  #define __LINUX_MFD_SMSC_H
  
  #include <linux/regmap.h>
  
  #define SMSC_ID_ECE1099			1
  #define SMSC_NUM_CLIENTS		2
  
  #define SMSC_BASE_ADDR			0x38
  #define OMAP_GPIO_SMSC_IRQ		151
  
  #define SMSC_MAXGPIO         32
  #define SMSC_BANK(offs)      ((offs) >> 3)
  #define SMSC_BIT(offs)       (1u << ((offs) & 0x7))
  
  struct smsc {
  	struct device *dev;
  	struct i2c_client *i2c_clients[SMSC_NUM_CLIENTS];
  	struct regmap *regmap;
  	int clk;
  	/* Stored chip id */
  	int id;
  };
  
  struct smsc_gpio;
  struct smsc_keypad;
  
  static inline int smsc_read(struct device *child, unsigned int reg,
  	unsigned int *dest)
  {
  	struct smsc     *smsc = dev_get_drvdata(child->parent);
  
  	return regmap_read(smsc->regmap, reg, dest);
  }
  
  static inline int smsc_write(struct device *child, unsigned int reg,
  	unsigned int value)
  {
  	struct smsc     *smsc = dev_get_drvdata(child->parent);
  
  	return regmap_write(smsc->regmap, reg, value);
  }
  
  /* Registers for SMSC */
  #define SMSC_RESET						0xF5
  #define SMSC_GRP_INT						0xF9
  #define SMSC_CLK_CTRL						0xFA
  #define SMSC_WKUP_CTRL						0xFB
  #define SMSC_DEV_ID						0xFC
  #define SMSC_DEV_REV						0xFD
  #define SMSC_VEN_ID_L						0xFE
  #define SMSC_VEN_ID_H						0xFF
  
  /* CLK VALUE */
  #define SMSC_CLK_VALUE						0x13
  
  /* Registers for function GPIO INPUT */
  #define SMSC_GPIO_DATA_IN_START					0x00
  
  /* Registers for function GPIO OUPUT */
  #define SMSC_GPIO_DATA_OUT_START                                       0x05
  
  /* Definitions for SMSC GPIO CONFIGURATION REGISTER*/
  #define SMSC_GPIO_INPUT_LOW					0x01
  #define SMSC_GPIO_INPUT_RISING					0x09
  #define SMSC_GPIO_INPUT_FALLING					0x11
  #define SMSC_GPIO_INPUT_BOTH_EDGE				0x19
  #define SMSC_GPIO_OUTPUT_PP					0x21
  #define SMSC_GPIO_OUTPUT_OP					0x31
  
  #define GRP_INT_STAT						0xf9
  #define	SMSC_GPI_INT						0x0f
  #define SMSC_CFG_START						0x0A
  
  /* Registers for SMSC GPIO INTERRUPT STATUS REGISTER*/
  #define SMSC_GPIO_INT_STAT_START                                  0x32
  
  /* Registers for SMSC GPIO INTERRUPT MASK REGISTER*/
  #define SMSC_GPIO_INT_MASK_START                               0x37
  
  /* Registers for SMSC function KEYPAD*/
  #define SMSC_KP_OUT						0x40
  #define SMSC_KP_IN						0x41
  #define SMSC_KP_INT_STAT					0x42
  #define SMSC_KP_INT_MASK					0x43
  
  /* Definitions for keypad */
  #define SMSC_KP_KSO           0x70
  #define SMSC_KP_KSI           0x51
  #define SMSC_KSO_ALL_LOW        0x20
  #define SMSC_KP_SET_LOW_PWR        0x0B
  #define SMSC_KP_SET_HIGH           0xFF
  #define SMSC_KSO_EVAL           0x00
  
  #endif /*  __LINUX_MFD_SMSC_H */