Changeset 11719


Ignore:
Timestamp:
03/03/09 23:42:59 (4 years ago)
Author:
BrainSlayer
Message:

allow access to extended pld gpios's

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/xscale/linux-2.6.23/drivers/char/ixp425_gpio.c

    r10971 r11719  
    125125 
    126126static int 
    127 eeprom_getb() 
     127eeprom_getb(void) 
    128128{ 
    129129    int i, j; 
     
    156156  return (i >> bit) & 0x1; 
    157157} 
    158  
    159158unsigned int 
    160 pld_read_gpio() 
     159pld_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 
     175unsigned int 
     176pld_read_gpio(void) 
    161177{ 
    162178  unsigned int i; 
     
    174190 
    175191unsigned int 
    176 pld_read_switch_b() 
     192pld_read_gpio2(void) 
    177193{ 
    178194  unsigned int i; 
     
    186202    CLK_HI(); 
    187203  spin_unlock(&gpio_lock); 
    188   return (i >> 1) & 0x1; 
    189 } 
    190  
    191 unsigned int 
    192 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); 
    204204  return i; 
    205205} 
     206 
    206207 
    207208void 
     
    222223 
    223224void 
    224 pld_write_switch(int byte) 
     225pld_write_gpio2(int byte) 
    225226{ 
    226227  //printk(KERN_INFO "%s: Enabling LED\n", driver_name); 
    227228 
    228229  spin_lock(&gpio_lock); 
    229     eeprom_start(0xac); 
     230    eeprom_start(0xae); 
    230231    eeprom_putb(byte); 
    231232    DATA_LO(); 
     
    236237  spin_unlock(&gpio_lock); 
    237238} 
     239 
    238240 
    239241struct gpio_bit { 
     
    302304        bit.state = pld_read_gpio_b(bit.bit - 16); 
    303305} 
    304 else if (bit.bit == 24) 
    305 { 
    306         bit.state = pld_read_switch_b(); 
     306else if (bit.bit < 32) 
     307{ 
     308        bit.state = pld_read_gpio_b2(bit.bit - 24); 
    307309} 
    308310                return copy_to_user((void *)arg, &bit, sizeof(bit)) ? -EFAULT : 0; 
     
    325327        pld_write_gpio(temp); 
    326328} 
     329else 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} 
    327338                return OK; 
    328339        case GPIO_GET_CONFIG: 
     
    337348{ 
    338349        bit.state = pld_read_gpio_b(bit.bit - 16); 
     350} 
     351else if (bit.bit < 32) 
     352{ 
     353        bit.state = pld_read_gpio_b2(bit.bit - 24); 
    339354} 
    340355                return copy_to_user((void *)arg, &bit, sizeof(bit)) ? -EFAULT : 0; 
     
    355370                temp |= (0x1 << (bit.bit - 16)); 
    356371                pld_write_gpio(temp); 
     372        } 
     373} 
     374else 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); 
    357381        } 
    358382} 
Note: See TracChangeset for help on using the changeset viewer.