Changeset 19022
- Timestamp:
- 2010-01-03T21:19:32+01:00 (8 years ago)
- Location:
- trunk/target/linux/ar7
- Files:
-
- 3 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/target/linux/ar7/files/arch/mips/ar7/gpio.c
r15245 r19022 22 22 #include <asm/ar7/gpio.h> 23 23 24 static const char *ar7_gpio_list[ AR7_GPIO_MAX];24 static const char *ar7_gpio_list[TITAN_GPIO_MAX]; 25 25 26 26 int gpio_request(unsigned gpio, const char *label) 27 27 { 28 if (gpio >= AR7_GPIO_MAX)28 if (gpio >= (ar7_is_titan() ? TITAN_GPIO_MAX : AR7_GPIO_MAX)) 29 29 return -EINVAL; 30 30 -
trunk/target/linux/ar7/files/arch/mips/ar7/setup.c
r16240 r19022 24 24 #include <asm/time.h> 25 25 #include <asm/ar7/ar7.h> 26 #include <asm/ar7/gpio.h> 26 27 #include <asm/ar7/prom.h> 27 28 29 static int titan_variant; /*hold the results of the gpio_init_titan_variant() so that it is only called once*/ 28 30 static void ar7_machine_restart(char *command); 29 31 static void ar7_machine_halt(void); … … 60 62 case AR7_CHIP_7200: 61 63 return "TI AR7 (TNETD7200)"; 64 case AR7_CHIP_TITAN: 65 titan_variant = ar7_init_titan_variant(); 66 switch (titan_variant /*(gpio_get_value_titan(1) >> 12) & 0xf*/) { 67 case TITAN_CHIP_1050: 68 return "TI AR7 (TNETV1050)"; 69 case TITAN_CHIP_1055: 70 return "TI AR7 (TNETV1055)"; 71 case TITAN_CHIP_1056: 72 return "TI AR7 (TNETV1056)"; 73 case TITAN_CHIP_1060: 74 return "TI AR7 (TNETV1060)"; 75 } 62 76 default: 63 77 return "TI AR7 (Unknown)"; -
trunk/target/linux/ar7/files/drivers/char/ar7_gpio.c
r15245 r19022 99 99 int m = iminor(inode); 100 100 101 if (m >= AR7_GPIO_MAX)101 if (m >= (ar7_is_titan() ? TITAN_GPIO_MAX : AR7_GPIO_MAX)) 102 102 return -EINVAL; 103 103 -
trunk/target/linux/ar7/files/include/asm-mips/ar7/ar7.h
r15245 r19022 45 45 #define UR8_REGS_UART1 (AR7_REGS_BASE + 0x0f00) 46 46 47 #define TITAN_REGS_MAC0 (0x08640000) 48 #define TITAN_REGS_MAC1 (TITAN_REGS_MAC0 + 0x0800) 49 #define TITAN_REGS_VLYNQ0 (AR7_REGS_BASE + 0x1c00) 50 #define TITAN_REGS_VLYNQ1 (AR7_REGS_BASE + 0x1300) 51 47 52 #define AR7_RESET_PEREPHERIAL 0x0 48 53 #define AR7_RESET_SOFTWARE 0x4 … … 54 59 #define AR7_RESET_BIT_EPHY 26 55 60 61 #define TITAN_RESET_BIT_EPHY1 28 62 56 63 /* GPIO control registers */ 57 64 #define AR7_GPIO_INPUT 0x0 … … 59 66 #define AR7_GPIO_DIR 0x8 60 67 #define AR7_GPIO_ENABLE 0xc 68 #define TITAN_GPIO_INPUT_0 0x0 69 #define TITAN_GPIO_INPUT_1 0x4 70 #define TITAN_GPIO_OUTPUT_0 0x8 71 #define TITAN_GPIO_OUTPUT_1 0xc 72 #define TITAN_GPIO_DIR_0 0x10 73 #define TITAN_GPIO_DIR_1 0x14 74 #define TITAN_GPIO_ENBL_0 0x18 75 #define TITAN_GPIO_ENBL_1 0x1c 61 76 62 77 #define AR7_CHIP_7100 0x18 63 78 #define AR7_CHIP_7200 0x2b 64 79 #define AR7_CHIP_7300 0x05 80 #define AR7_CHIP_TITAN 0x07 81 #define TITAN_CHIP_1050 0x0f 82 #define TITAN_CHIP_1055 0x0e 83 #define TITAN_CHIP_1056 0x0d 84 #define TITAN_CHIP_1060 0x07 65 85 66 86 /* Interrupts */ … … 87 107 extern int ar7_cpu_clock, ar7_bus_clock, ar7_dsp_clock; 88 108 109 static inline int ar7_is_titan(void) 110 { 111 return (readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x24)) & 0xffff) == 112 AR7_CHIP_TITAN; 113 } 114 89 115 static inline u16 ar7_chip_id(void) 90 116 { 91 return readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x14)) & 0xffff; 117 return ar7_is_titan() ? AR7_CHIP_TITAN : (readl((void *) 118 KSEG1ADDR(AR7_REGS_GPIO + 0x14)) & 0xffff); 92 119 } 93 120 94 121 static inline u8 ar7_chip_rev(void) 95 122 { 96 return (readl((void *)KSEG1ADDR(AR7_REGS_GPIO + 0x14)) >> 16) & 0xff; 123 return (readl((void *)KSEG1ADDR(AR7_REGS_GPIO + (ar7_is_titan() ? 0x24 : 124 0x14))) >> 16) & 0xff; 97 125 } 98 126 -
trunk/target/linux/ar7/files/include/asm-mips/ar7/gpio.h
r10708 r19022 20 20 #define __AR7_GPIO_H__ 21 21 #include <asm/ar7/ar7.h> 22 #ifndef __AR7_TITAN_H__ 23 #include <asm/ar7/titan.h> 24 #endif 22 25 23 26 #define AR7_GPIO_MAX 32 27 #define TITAN_GPIO_MAX 51 24 28 25 29 extern int gpio_request(unsigned gpio, const char *label); … … 27 31 28 32 /* Common GPIO layer */ 29 static inline int gpio_get_value (unsigned gpio)33 static inline int gpio_get_value_ar7(unsigned gpio) 30 34 { 31 35 void __iomem *gpio_in = … … 35 39 } 36 40 37 static inline void gpio_set_value(unsigned gpio, int value) 41 static inline int gpio_get_value_titan(unsigned gpio) 42 { 43 void __iomem *gpio_in0 = 44 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_INPUT_0); 45 void __iomem *gpio_in1 = 46 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_INPUT_1); 47 48 return readl(gpio >> 5 ? gpio_in1 : gpio_in0) & (1 << (gpio & 0x1f)); 49 } 50 51 static inline int gpio_get_value(unsigned gpio) 52 { 53 return ar7_is_titan() ? gpio_get_value_titan(gpio) : 54 gpio_get_value_ar7(gpio); 55 } 56 57 static inline void gpio_set_value_ar7(unsigned gpio, int value) 38 58 { 39 59 void __iomem *gpio_out = … … 47 67 } 48 68 49 static inline int gpio_direction_input(unsigned gpio) 69 static inline void gpio_set_value_titan(unsigned gpio, int value) 70 { 71 void __iomem *gpio_out0 = 72 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_OUTPUT_0); 73 void __iomem *gpio_out1 = 74 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_OUTPUT_1); 75 unsigned tmp; 76 77 tmp = readl(gpio >> 5 ? gpio_out1 : gpio_out0) & ~(1 << (gpio & 0x1f)); 78 if (value) 79 tmp |= 1 << (gpio & 0x1f); 80 writel(tmp, gpio >> 5 ? gpio_out1 : gpio_out0); 81 } 82 83 static inline void gpio_set_value(unsigned gpio, int value) 84 { 85 if (ar7_is_titan()) 86 gpio_set_value_titan(gpio, value); 87 else 88 gpio_set_value_ar7(gpio, value); 89 } 90 91 static inline int gpio_direction_input_ar7(unsigned gpio) 50 92 { 51 93 void __iomem *gpio_dir = … … 60 102 } 61 103 62 static inline int gpio_direction_output(unsigned gpio, int value) 104 static inline int gpio_direction_input_titan(unsigned gpio) 105 { 106 void __iomem *gpio_dir0 = 107 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_DIR_0); 108 void __iomem *gpio_dir1 = 109 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_DIR_1); 110 111 if (gpio >= TITAN_GPIO_MAX) 112 return -EINVAL; 113 114 writel(readl(gpio >> 5 ? gpio_dir1 : gpio_dir0) | (1 << (gpio & 0x1f)), 115 gpio >> 5 ? gpio_dir1 : gpio_dir0); 116 117 return 0; 118 } 119 120 static inline int gpio_direction_input(unsigned gpio) 121 { 122 return ar7_is_titan() ? gpio_direction_input_titan(gpio) : 123 gpio_direction_input_ar7(gpio); 124 } 125 126 static inline int gpio_direction_output_ar7(unsigned gpio, int value) 63 127 { 64 128 void __iomem *gpio_dir = … … 74 138 } 75 139 140 static inline int gpio_direction_output_titan(unsigned gpio, int value) 141 { 142 void __iomem *gpio_dir0 = 143 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_DIR_0); 144 void __iomem *gpio_dir1 = 145 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_DIR_1); 146 147 if (gpio >= TITAN_GPIO_MAX) 148 return -EINVAL; 149 150 gpio_set_value_titan(gpio, value); 151 writel(readl(gpio >> 5 ? gpio_dir1 : gpio_dir0) & ~(1 << 152 (gpio & 0x1f)), gpio >> 5 ? gpio_dir1 : gpio_dir0); 153 154 return 0; 155 } 156 157 static inline int gpio_direction_output(unsigned gpio, int value) 158 { 159 return ar7_is_titan() ? gpio_direction_output_titan(gpio, value) : 160 gpio_direction_output_ar7(gpio, value); 161 } 162 76 163 static inline int gpio_to_irq(unsigned gpio) 77 164 { … … 85 172 86 173 /* Board specific GPIO functions */ 87 static inline int ar7_gpio_enable (unsigned gpio)174 static inline int ar7_gpio_enable_ar7(unsigned gpio) 88 175 { 89 176 void __iomem *gpio_en = … … 95 182 } 96 183 97 static inline int ar7_gpio_disable(unsigned gpio) 184 static inline int ar7_gpio_enable_titan(unsigned gpio) 185 { 186 void __iomem *gpio_en0 = 187 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_ENBL_0); 188 void __iomem *gpio_en1 = 189 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_ENBL_1); 190 191 writel(readl(gpio >> 5 ? gpio_en1 : gpio_en0) | (1 << (gpio & 0x1f)), 192 gpio >> 5 ? gpio_en1 : gpio_en0); 193 194 return 0; 195 } 196 197 static inline int ar7_gpio_enable(unsigned gpio) 198 { 199 return ar7_is_titan() ? ar7_gpio_enable_titan(gpio) : 200 ar7_gpio_enable_ar7(gpio); 201 } 202 203 static inline int ar7_gpio_disable_ar7(unsigned gpio) 98 204 { 99 205 void __iomem *gpio_en = … … 105 211 } 106 212 213 static inline int ar7_gpio_disable_titan(unsigned gpio) 214 { 215 void __iomem *gpio_en0 = 216 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_ENBL_0); 217 void __iomem *gpio_en1 = 218 (void __iomem *)KSEG1ADDR(AR7_REGS_GPIO + TITAN_GPIO_ENBL_1); 219 220 writel(readl(gpio >> 5 ? gpio_en1 : gpio_en0) & ~(1 << (gpio & 0x1f)), 221 gpio >> 5 ? gpio_en1 : gpio_en0); 222 223 return 0; 224 } 225 226 static inline int ar7_gpio_disable(unsigned gpio) 227 { 228 return ar7_is_titan() ? ar7_gpio_disable_titan(gpio) : 229 ar7_gpio_disable_ar7(gpio); 230 } 231 232 static inline int ar7_init_titan_variant( void ) 233 { 234 /*UINT32 new_val;*/ 235 unsigned new_val; 236 237 /* set GPIO 44 - 47 as input */ 238 /*PAL_sysGpioCtrl(const int, GPIO_PIN, GPIO_INPUT_PIN); */ 239 /*define titan_gpio_ctrl in titan.h*/ 240 titan_gpio_ctrl(44, GPIO_PIN, GPIO_INPUT_PIN); 241 titan_gpio_ctrl(45, GPIO_PIN, GPIO_INPUT_PIN); 242 titan_gpio_ctrl(46, GPIO_PIN, GPIO_INPUT_PIN); 243 titan_gpio_ctrl(47, GPIO_PIN, GPIO_INPUT_PIN); 244 245 /* read GPIO to get Titan variant type */ 246 /*fix this*/ 247 titan_sysGpioInValue( &new_val, 1 ); 248 249 new_val >>= 12; 250 new_val &= 0x0f; 251 252 switch ( new_val ) 253 { 254 case TITAN_CHIP_1050: 255 case TITAN_CHIP_1055: 256 case TITAN_CHIP_1056: 257 case TITAN_CHIP_1060: 258 return new_val; 259 260 default: 261 break; 262 } 263 /* In case we get an invalid value, return the default Titan chip */ 264 return TITAN_CHIP_1050; 265 } 266 107 267 #include <asm-generic/gpio.h> 108 268
Note: See TracChangeset
for help on using the changeset viewer.