Changeset 11719
- Timestamp:
- 03/03/09 23:42:59 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/linux/xscale/linux-2.6.23/drivers/char/ixp425_gpio.c
r10971 r11719 125 125 126 126 static int 127 eeprom_getb( )127 eeprom_getb(void) 128 128 { 129 129 int i, j; … … 156 156 return (i >> bit) & 0x1; 157 157 } 158 159 158 unsigned int 160 pld_read_gpio() 159 pld_read_gpio_b2(int bit) 160 { 161 unsigned int i; 162 spin_lock(&gpio_lock); 163 eeprom_start(0xaf); 164 i = eeprom_getb(); 165 DATA_LO(); 166 CLK_HI(); 167 DATA_HI(); 168 CLK_LO(); 169 CLK_HI(); 170 spin_unlock(&gpio_lock); 171 return (i >> bit) & 0x1; 172 } 173 174 175 unsigned int 176 pld_read_gpio(void) 161 177 { 162 178 unsigned int i; … … 174 190 175 191 unsigned int 176 pld_read_ switch_b()192 pld_read_gpio2(void) 177 193 { 178 194 unsigned int i; … … 186 202 CLK_HI(); 187 203 spin_unlock(&gpio_lock); 188 return (i >> 1) & 0x1;189 }190 191 unsigned int192 pld_read_switch()193 {194 unsigned int i;195 spin_lock(&gpio_lock);196 eeprom_start(0xaf);197 i = eeprom_getb();198 DATA_LO();199 CLK_HI();200 DATA_HI();201 CLK_LO();202 CLK_HI();203 spin_unlock(&gpio_lock);204 204 return i; 205 205 } 206 206 207 207 208 void … … 222 223 223 224 void 224 pld_write_ switch(int byte)225 pld_write_gpio2(int byte) 225 226 { 226 227 //printk(KERN_INFO "%s: Enabling LED\n", driver_name); 227 228 228 229 spin_lock(&gpio_lock); 229 eeprom_start(0xa c);230 eeprom_start(0xae); 230 231 eeprom_putb(byte); 231 232 DATA_LO(); … … 236 237 spin_unlock(&gpio_lock); 237 238 } 239 238 240 239 241 struct gpio_bit { … … 302 304 bit.state = pld_read_gpio_b(bit.bit - 16); 303 305 } 304 else if (bit.bit == 24)305 { 306 bit.state = pld_read_ switch_b();306 else if (bit.bit < 32) 307 { 308 bit.state = pld_read_gpio_b2(bit.bit - 24); 307 309 } 308 310 return copy_to_user((void *)arg, &bit, sizeof(bit)) ? -EFAULT : 0; … … 325 327 pld_write_gpio(temp); 326 328 } 329 else if (bit.bit < 32) 330 { 331 temp = pld_read_gpio(); 332 if (bit.state == 1) 333 temp |= (0x1 << (bit.bit - 24)); 334 else 335 temp &= ~(0x1 << (bit.bit - 24)); 336 pld_write_gpio2(temp); 337 } 327 338 return OK; 328 339 case GPIO_GET_CONFIG: … … 337 348 { 338 349 bit.state = pld_read_gpio_b(bit.bit - 16); 350 } 351 else if (bit.bit < 32) 352 { 353 bit.state = pld_read_gpio_b2(bit.bit - 24); 339 354 } 340 355 return copy_to_user((void *)arg, &bit, sizeof(bit)) ? -EFAULT : 0; … … 355 370 temp |= (0x1 << (bit.bit - 16)); 356 371 pld_write_gpio(temp); 372 } 373 } 374 else if (bit.bit < 32) 375 { 376 temp = pld_read_gpio2(); 377 if (bit.state == 2) 378 { 379 temp |= (0x1 << (bit.bit - 24)); 380 pld_write_gpio2(temp); 357 381 } 358 382 }
Note: See TracChangeset
for help on using the changeset viewer.
