Changeset 2268d20 in freewrt for target/linux/package/diag/diag_led.c
- Timestamp:
- Jul 7, 2006, 12:14:16 AM (19 years ago)
- Branches:
- freewrt_1_0, freewrt_2_0
- Children:
- dfb8263
- Parents:
- b232ea4
- File:
-
- 1 edited
-
target/linux/package/diag/diag_led.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
target/linux/package/diag/diag_led.c
rb232ea4 r2268d20 2 2 * diag_led.c - replacement diag module 3 3 * 4 * Copyright (C) 2004 Mike Baker, 5 * Imre Kaloz <kaloz@dune.hu> 4 * Copyright (C) 2004-2006 Mike Baker, 5 * Imre Kaloz <kaloz@dune.hu>, 6 * Felix Fietkau <nbd@openwrt.org> 6 7 * 7 8 * This program is free software; you can redistribute it and/or … … 19 20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 21 * 21 * $Id: diag_led.c 3510 2006-03-27 21:05:17Z wbx$22 * $Id: 005-diag_led.patch 3355 2006-03-13 07:57:51Z nbd $ 22 23 */ 23 24 … … 29 30 * 2005/04/13 added licensing informations 30 31 * 2005/04/18 base reset polarity off initial readings 31 * 2006/02/07 motorola wa840g/we800g support added32 32 */ 33 33 … … 38 38 #include <asm/io.h> 39 39 #include <typedefs.h> 40 #include <osl.h>41 40 #include <bcmdevs.h> 42 41 #include <sbutils.h> … … 46 45 47 46 // v2.x - - - - - 47 #define BITS(n) ((1 << n) - 1) 48 #define ISSET(n,b) ((n & (1 << b)) ? 1 : 0) 48 49 #define DIAG_GPIO (1<<1) 50 #define AOSS_GPIO (1<<6) 49 51 #define DMZ_GPIO (1<<7) 52 #define SES_GPIO ((1 << 2) | (1 << 3) | (1 << 5)) 50 53 51 54 static void set_gpio(uint32 mask, uint32 value) { 52 sb_gpiocontrol(sbh,mask, 0, GPIO_DRV_PRIORITY);53 sb_gpioouten(sbh,mask,mask ,GPIO_DRV_PRIORITY);54 sb_gpioout(sbh,mask,value ,GPIO_DRV_PRIORITY);55 sb_gpiocontrol(sbh,mask,0); 56 sb_gpioouten(sbh,mask,mask); 57 sb_gpioout(sbh,mask,value); 55 58 } 56 59 … … 60 63 static void v2_set_dmz(u8 state) { 61 64 set_gpio(DMZ_GPIO,state); 65 } 66 static void v2_set_aoss(u8 state) { 67 set_gpio(AOSS_GPIO,state); 68 } 69 static void v2_set_ses(u8 state) { 70 set_gpio(SES_GPIO, (ISSET(state, 0) << 2) | (ISSET(state, 1) << 3) | (ISSET(state, 2) << 5)); 62 71 } 63 72 … … 81 90 } 82 91 83 static void wap1_set_diag(u8 state) {84 set_gpio(1<<3,state);85 }86 static void wap1_set_dmz(u8 state) {87 set_gpio(1<<4,state);88 }89 90 92 // - - - - - 91 93 static void ignore(u8 ignored) {}; 92 94 93 95 // - - - - - 94 #define BIT_DMZ 0x01 95 #define BIT_DIAG 0x04 96 #define BIT_DMZ (1 << 0) 97 #define BIT_DIAG (1 << 2) 98 #define BIT_SES (BITS(3) << 3) 96 99 97 100 void (*set_diag)(u8 state); 98 101 void (*set_dmz)(u8 state); 99 102 void (*set_ses)(u8 state); 103 104 static unsigned int diag_reverse = 1; 105 static unsigned int ses_reverse = 1; 100 106 static unsigned int diag = 0; 101 107 102 108 static void diag_change() 103 109 { 104 set_diag(0xFF); // off 105 set_dmz(0xFF); // off 110 set_diag(diag_reverse ? 0xFF : 0x00); // off 111 set_dmz(diag_reverse ? 0xFF : 0x00); // off 112 set_ses(ses_reverse ? 0xFF : 0x00); // off 106 113 107 114 if(diag & BIT_DIAG) 108 set_diag( 0x00); // on115 set_diag(diag_reverse ? 0x00 : 0xFF); // on 109 116 if(diag & BIT_DMZ) 110 set_dmz(0x00); // on 117 set_dmz(diag_reverse ? 0x00 : 0xFF); // on 118 if(diag & BIT_SES) 119 set_ses(((ses_reverse ? ~diag : diag) >> 3) & BITS(3)); 111 120 } 112 121 … … 126 135 static unsigned char reset_polarity = 0; 127 136 static unsigned int reset = 0; 137 static unsigned char button_gpio = 0; 138 static unsigned char button_polarity = 0; 139 static unsigned int button = 0; 140 141 142 static int read_gpio(int gpio, int polarity) 143 { 144 int res; 145 146 if (gpio) { 147 sb_gpiocontrol(sbh,gpio,gpio); 148 sb_gpioouten(sbh,gpio,0); 149 res=!(sb_gpioin(sbh)&gpio); 150 151 return (polarity ? !res : res); 152 } 153 154 return 0; 155 } 128 156 129 157 static int proc_reset(ctl_table *table, int write, struct file *filp, 130 158 void *buffer, size_t *lenp) 131 159 { 132 133 if (reset_gpio) { 134 sb_gpiocontrol(sbh,reset_gpio,reset_gpio,GPIO_DRV_PRIORITY); 135 sb_gpioouten(sbh,reset_gpio,0,GPIO_DRV_PRIORITY); 136 reset=!(sb_gpioin(sbh)&reset_gpio); 137 138 if (reset_polarity) reset=!reset; 139 } else { 140 reset=0; 141 } 160 reset = read_gpio(reset_gpio, reset_polarity); 161 162 return proc_dointvec(table, write, filp, buffer, lenp); 163 } 164 165 static int proc_button(ctl_table *table, int write, struct file *filp, 166 void *buffer, size_t *lenp) 167 { 168 button = read_gpio(button_gpio, button_polarity); 142 169 143 170 return proc_dointvec(table, write, filp, buffer, lenp); … … 164 191 proc_handler: proc_reset 165 192 }, 193 { 194 ctl_name: 2002, 195 procname: "button", 196 data: &button, 197 maxlen: sizeof(button), 198 mode: 0444, 199 proc_handler: proc_button 200 }, 166 201 { 0 } 167 202 }; … … 179 214 set_diag=ignore; 180 215 set_dmz=ignore; 216 set_ses=ignore; 181 217 182 218 buf=nvram_get("pmon_ver") ?: ""; 183 219 if (((board_type & 0xf00) == 0x400) && (strncmp(buf, "CFE", 3) != 0)) { 184 220 buf=nvram_get("boardtype")?:""; 185 if (!str ncmp(buf,"bcm94710dev",11)) {221 if (!strcmp(buf,"bcm94710dev")) { 186 222 buf=nvram_get("boardnum")?:""; 187 223 if (!strcmp(buf,"42")) { … … 191 227 reset_gpio=(1<<6); 192 228 } 193 if (simple_strtoul(buf, NULL, 0) == 2) {194 // wap54g v1.0195 // do not use strcmp as PMON v5.3.22 has some built-in nvram196 // defaults with trailing \r197 set_diag=wap1_set_diag;198 // no dmz led on wap54g, used green led199 // labeled "WLAN Link" instead200 set_dmz=wap1_set_dmz;201 reset_gpio=(1<<0);202 }203 229 if (!strcmp(buf,"asusX")) { 204 230 //asus wl-500g 205 231 reset_gpio=(1<<6); 206 }207 if (!strcmp(buf,"2")) {208 //wa840g v1 / we800g v1209 reset_gpio=(1<<0);210 232 } 211 233 } … … 229 251 set_diag=v2_set_diag; 230 252 set_dmz=v2_set_dmz; 253 set_ses=v2_set_ses; 254 231 255 reset_gpio=(1<<6); 256 button_gpio=(1<<4); 257 258 if (!strcmp((nvram_get("boardtype")?:""), "0x0101")) // WRT54G3G 259 ses_reverse = 0; 260 else 261 ses_reverse = 1; 232 262 } 233 263 if (!strcmp(buf,"44")) { … … 237 267 if (!strcmp(buf,"00")) { 238 268 //buffalo 269 diag_reverse = 0; 270 set_dmz=v2_set_diag; 271 set_diag=v2_set_aoss; 239 272 reset_gpio=(1<<7); 240 273 } … … 245 278 } 246 279 247 248 sb_gpiocontrol(sbh,reset_gpio,reset_gpio,GPIO_DRV_PRIORITY); 249 sb_gpioouten(sbh,reset_gpio,0,GPIO_DRV_PRIORITY); 280 sb_gpiocontrol(sbh,reset_gpio,reset_gpio); 281 sb_gpioouten(sbh,reset_gpio,0); 250 282 reset_polarity=!(sb_gpioin(sbh)&reset_gpio); 283 284 if (button_gpio) { 285 sb_gpiocontrol(sbh,button_gpio,button_gpio); 286 sb_gpioouten(sbh,button_gpio,0); 287 button_polarity=!(sb_gpioin(sbh)&button_gpio); 288 } else { 289 // don't create /proc/button 290 sys_diag[2].ctl_name = 0; 291 } 251 292 252 293 diag_sysctl_header = register_sysctl_table(sys_diag, 0);
Note:
See TracChangeset
for help on using the changeset viewer.
