int dsp_reset(struct inode *inode, struct file *file, unsigned cmd,unsigned long arg) { /* ignore any argument, just do reset here */ /* raise reset */ GPSR(73) |= GPIO_bit(73); /* udelay(1); DAVEDE */ /* wait 1/7.3728MHz = 135.6ns (par 11.13.4) */ /* sleep 1/10 second */ set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(HZ/10); /* Same PIOs of sa1110 */ GPSR(19) |= GPIO_bit(19); GPCR(17) |= GPIO_bit(17); /* sleep 2/10 second */ set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(2*HZ/10); /* lower reset */ GPCR(73) |= GPIO_bit(73); set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(2*HZ/10); writew(DSP_BOB, (unsigned short *)dsp_iopage); // little endian return 0; }
static int cmx270_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE); pxa_gpio_mode(GPIO49_nPWE | GPIO_OUT); switch (skt->nr) { case 0: if (state->flags & SS_RESET) { GPCR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE); GPSR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2); udelay(10); GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2); GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE); } break; case 1: if (state->flags & SS_RESET) { GPCR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE); GPSR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2); udelay(10); GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2); GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE); } break; } pxa_gpio_mode(GPIO49_nPWE_MD); return 0; }
static __init int tdamc_init(void) { int retval=0; printk(KERN_ERR"tdamc_init mc_power=%d (otherwise power up tda for attach only)\n",mc_power); printk(KERN_ERR"btweb_features.abil_dem_video=%d,btweb_features.abil_mod_video=%d\n",btweb_features.abil_dem_video,btweb_features.abil_mod_video); if ( (!mc_power) ){ /* Switching on demodulator only for i2c attach */ GPSR(btweb_features.abil_dem_video) = GPIO_bit(btweb_features.abil_dem_video); slave_address = SLAVE_ADDRESS_TDA; } else{ /* Switching on modulator only for i2c attach */ GPSR(btweb_features.abil_mod_video) = GPIO_bit(btweb_features.abil_mod_video); slave_address = SLAVE_ADDRESS_MC; } normal_addr[0] = slave_address; if(normal_addr[0] >= 0x80) { printk(KERN_ERR"I2C: Invalid slave address for TDA (0x%x)\n", normal_addr[0]); return -EINVAL; } udelay(1000); retval = i2c_add_driver(&tdamc_driver); if (retval) return retval; retval = misc_register (&tdamc_miscdev); if (retval) { i2c_del_driver(&tdamc_driver); return retval; } printk("I2C: TDA9885-MC44BS driver successfully loaded\n"); if ( (!mc_power) ){ /* Switching on demodulator only for i2c attach */ GPCR(btweb_features.abil_dem_video) = GPIO_bit(btweb_features.abil_dem_video); slave_address = SLAVE_ADDRESS_TDA; } else{ /* Switching on modulator only for i2c attach */ GPCR(btweb_features.abil_mod_video) = GPIO_bit(btweb_features.abil_mod_video); slave_address = SLAVE_ADDRESS_MC; } slave_address=0; normal_addr[0] = 0; return 0; }
int sg_ssp_release (struct inode *inode, struct file *filp) { SSCR0 = 0; GPSR(22) = GPIO_bit(22); // MUX -> Serial Comm mode /* Clear the reset */ GPSR(77) = GPIO_bit(77); // RSTN -> 1 MOD_DEC_USE_COUNT; return 0; }
static void poodle_mci_setpower(struct device *dev, unsigned int vdd) { struct pxamci_platform_data* p_d = dev->platform_data; if (( 1 << vdd) & p_d->ocr_mask) { GPSR(POODLE_GPIO_SD_PWR) = GPIO_bit(POODLE_GPIO_SD_PWR); mdelay(2); GPSR(POODLE_GPIO_SD_PWR1) = GPIO_bit(POODLE_GPIO_SD_PWR1); } else { GPCR(POODLE_GPIO_SD_PWR1) = GPIO_bit(POODLE_GPIO_SD_PWR1); GPCR(POODLE_GPIO_SD_PWR) = GPIO_bit(POODLE_GPIO_SD_PWR); } }
static void corgi_charge(int on) { if (on) { if (machine_is_corgi() && (sharpsl_pm.flags & SHARPSL_SUSPENDED)) { GPCR(CORGI_GPIO_CHRG_ON) = GPIO_bit(CORGI_GPIO_CHRG_ON); GPSR(CORGI_GPIO_CHRG_UKN) = GPIO_bit(CORGI_GPIO_CHRG_UKN); } else { GPSR(CORGI_GPIO_CHRG_ON) = GPIO_bit(CORGI_GPIO_CHRG_ON); GPCR(CORGI_GPIO_CHRG_UKN) = GPIO_bit(CORGI_GPIO_CHRG_UKN); } } else { GPCR(CORGI_GPIO_CHRG_ON) = GPIO_bit(CORGI_GPIO_CHRG_ON); GPCR(CORGI_GPIO_CHRG_UKN) = GPIO_bit(CORGI_GPIO_CHRG_UKN); } }
static void __init mainstone_init(void) { int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */ mst_flash_data[0].width = (BOOT_DEF & 1) ? 2 : 4; mst_flash_data[1].width = 4; /* Compensate for SW7 which swaps the flash banks */ mst_flash_data[SW7].name = "processor-flash"; mst_flash_data[SW7 ^ 1].name = "mainboard-flash"; printk(KERN_NOTICE "Mainstone configured to boot from %s\n", mst_flash_data[0].name); /* system bus arbiter setting * - Core_Park * - LCD_wt:DMA_wt:CORE_Wt = 2:3:4 */ ARB_CNTRL = ARB_CORE_PARK | 0x234; /* * On Mainstone, we route AC97_SYSCLK via GPIO45 to * the audio daughter card */ pxa_gpio_mode(GPIO45_SYSCLK_AC97_MD); GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) | GPIO_bit(GPIO49_nPWE) | GPIO_bit(GPIO50_nPIOR) | GPIO_bit(GPIO51_nPIOW) | GPIO_bit(GPIO85_nPCE_1) | GPIO_bit(GPIO54_nPCE_2); pxa_gpio_mode(GPIO48_nPOE_MD); pxa_gpio_mode(GPIO49_nPWE_MD); pxa_gpio_mode(GPIO50_nPIOR_MD); pxa_gpio_mode(GPIO51_nPIOW_MD); pxa_gpio_mode(GPIO85_nPCE_1_MD); pxa_gpio_mode(GPIO54_nPCE_2_MD); pxa_gpio_mode(GPIO79_pSKTSEL_MD); pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); /* reading Mainstone's "Virtual Configuration Register" might be handy to select LCD type here */ if (0) mainstone_pxafb_info.modes = &toshiba_ltm04c380k_mode; else mainstone_pxafb_info.modes = &toshiba_ltm035a776c_mode; set_pxa_fb_info(&mainstone_pxafb_info); pxa_set_mci_info(&mainstone_mci_platform_data); pxa_set_ficp_info(&mainstone_ficp_platform_data); pxa_set_ohci_info(&mainstone_ohci_platform_data); }
static void corgi_discharge(int on) { if (on) GPSR(CORGI_GPIO_DISCHARGE_ON) = GPIO_bit(CORGI_GPIO_DISCHARGE_ON); else GPCR(CORGI_GPIO_DISCHARGE_ON) = GPIO_bit(CORGI_GPIO_DISCHARGE_ON); }
/* * Irda */ static void corgi_irda_transceiver_mode(struct device *dev, int mode) { if (mode & IR_OFF) GPSR(CORGI_GPIO_IR_ON) = GPIO_bit(CORGI_GPIO_IR_ON); else GPCR(CORGI_GPIO_IR_ON) = GPIO_bit(CORGI_GPIO_IR_ON); }
static int cmx270_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) | GPIO_bit(GPIO49_nPWE) | GPIO_bit(GPIO50_nPIOR) | GPIO_bit(GPIO51_nPIOW) | GPIO_bit(GPIO85_nPCE_1) | GPIO_bit(GPIO54_nPCE_2); pxa_gpio_mode(GPIO48_nPOE_MD); pxa_gpio_mode(GPIO49_nPWE_MD); pxa_gpio_mode(GPIO50_nPIOR_MD); pxa_gpio_mode(GPIO51_nPIOW_MD); pxa_gpio_mode(GPIO85_nPCE_1_MD); pxa_gpio_mode(GPIO54_nPCE_2_MD); pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); /* Reset signal */ pxa_gpio_mode(GPIO53_nPCE_2 | GPIO_OUT); GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2); set_irq_type(PCMCIA_S0_CD_VALID, IRQ_TYPE_EDGE_BOTH); set_irq_type(PCMCIA_S1_CD_VALID, IRQ_TYPE_EDGE_BOTH); /* irq's for slots: */ set_irq_type(PCMCIA_S0_RDYINT, IRQ_TYPE_EDGE_FALLING); set_irq_type(PCMCIA_S1_RDYINT, IRQ_TYPE_EDGE_FALLING); skt->irq = (skt->nr == 0) ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int hx2750_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* * Setup default state of GPIO outputs * before we enable them as outputs. */ GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) | GPIO_bit(GPIO49_nPWE) | GPIO_bit(GPIO50_nPIOR) | GPIO_bit(GPIO51_nPIOW) | GPIO_bit(GPIO85_nPCE_1) | GPIO_bit(GPIO54_nPCE_2); pxa_gpio_mode(GPIO48_nPOE_MD); pxa_gpio_mode(GPIO49_nPWE_MD); pxa_gpio_mode(GPIO50_nPIOR_MD); pxa_gpio_mode(GPIO51_nPIOW_MD); pxa_gpio_mode(GPIO85_nPCE_1_MD); pxa_gpio_mode(GPIO54_nPCE_2_MD); pxa_gpio_mode(GPIO79_pSKTSEL_MD); pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); skt->irq = (skt->nr == 0) ? HX2750_IRQ_GPIO_CF_IRQ : HX2750_IRQ_GPIO_CF_WIFIIRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int palmtx_pcmcia_hw_init (struct soc_pcmcia_socket *skt) { GPSR(GPIO48_nPOE_MD) = GPIO_bit(GPIO48_nPOE_MD) | GPIO_bit(GPIO49_nPWE_MD) | GPIO_bit(GPIO50_nPIOR_MD) | GPIO_bit(GPIO51_nPIOW_MD) | GPIO_bit(GPIO85_nPCE_1_MD) | GPIO_bit(GPIO53_nPCE_2_MD) | GPIO_bit(GPIO54_pSKTSEL_MD) | GPIO_bit(GPIO55_nPREG_MD) | GPIO_bit(GPIO56_nPWAIT_MD) | GPIO_bit(GPIO57_nIOIS16_MD); pxa_gpio_mode(GPIO48_nPOE_MD); pxa_gpio_mode(GPIO49_nPWE_MD); pxa_gpio_mode(GPIO50_nPIOR_MD); pxa_gpio_mode(GPIO51_nPIOW_MD); pxa_gpio_mode(GPIO85_nPCE_1_MD); pxa_gpio_mode(GPIO53_nPCE_2_MD); pxa_gpio_mode(GPIO54_pSKTSEL_MD); pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); skt->irq = IRQ_GPIO(GPIO_NR_PALMTX_PCMCIA_READY); palmtx_pcmcia_dbg("%s:%i, Socket:%d\n", __FUNCTION__, __LINE__, skt->nr); return soc_pcmcia_request_irqs(skt, palmtx_socket_state_irqs, ARRAY_SIZE(palmtx_socket_state_irqs)); }
int pxa_gpio_mode(int gpio_mode) { unsigned long flags; int gpio = gpio_mode & GPIO_MD_MASK_NR; int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8; int gafr; if (gpio > pxa_last_gpio) return -EINVAL; local_irq_save(flags); if (gpio_mode & GPIO_DFLT_LOW) GPCR(gpio) = GPIO_bit(gpio); else if (gpio_mode & GPIO_DFLT_HIGH) GPSR(gpio) = GPIO_bit(gpio); if (gpio_mode & GPIO_MD_MASK_DIR) GPDR(gpio) |= GPIO_bit(gpio); else GPDR(gpio) &= ~GPIO_bit(gpio); gafr = GAFR(gpio) & ~(0x3 << (((gpio) & 0xf)*2)); GAFR(gpio) = gafr | (fn << (((gpio) & 0xf)*2)); local_irq_restore(flags); return 0; }
static void corgi_measure_temp(int on) { if (on) GPSR(CORGI_GPIO_ADC_TEMP_ON) = GPIO_bit(CORGI_GPIO_ADC_TEMP_ON); else GPCR(CORGI_GPIO_ADC_TEMP_ON) = GPIO_bit(CORGI_GPIO_ADC_TEMP_ON); }
static int lubbock_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* * Setup default state of GPIO outputs * before we enable them as outputs. */ GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) | GPIO_bit(GPIO49_nPWE) | GPIO_bit(GPIO50_nPIOR) | GPIO_bit(GPIO51_nPIOW) | GPIO_bit(GPIO52_nPCE_1) | GPIO_bit(GPIO53_nPCE_2); pxa_gpio_mode(GPIO48_nPOE_MD); pxa_gpio_mode(GPIO49_nPWE_MD); pxa_gpio_mode(GPIO50_nPIOR_MD); pxa_gpio_mode(GPIO51_nPIOW_MD); pxa_gpio_mode(GPIO52_nPCE_1_MD); pxa_gpio_mode(GPIO53_nPCE_2_MD); pxa_gpio_mode(GPIO54_pSKTSEL_MD); pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); return sa1111_pcmcia_hw_init(skt); }
void pxa_gpio_set(int gpio, int on) { if (on) GPSR(gpio) = GPIO_BIT(gpio); else GPCR(gpio) = GPIO_BIT(gpio); }
/* * Irda */ static void poodle_irda_transceiver_mode(struct device *dev, int mode) { if (mode & IR_OFF) { GPSR(POODLE_GPIO_IR_ON) = GPIO_bit(POODLE_GPIO_IR_ON); } else { GPCR(POODLE_GPIO_IR_ON) = GPIO_bit(POODLE_GPIO_IR_ON); } }
static void cmx270_green_set(struct led_classdev *led_cdev, enum led_brightness value) { if (value) GPCR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED); else GPSR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED); }
static void gpio_set(int id, int on) { do { if (on) GPSR(id) = GPIO_bit(id); else GPCR(id) = GPIO_bit(id); } while (0); }
void turn_on_gpio(int gpio) { set_GPIO_mode(gpio | GPIO_OUT); GPSR(gpio) = GPIO_bit(gpio); if (GPLR(gpio) & GPIO_bit(gpio)) { PDEBUG("LED gpio %d on\n", gpio); } else { PDEBUG("LED gpio %d off\n", gpio); } }
static void snd_h4000_audio_set_codec_reset(int mode) { if (mode == 1) { DPM_DEBUG("h4000_audio: Codec reset on\n"); GPSR(GPIO_NR_H4000_CODEC_RST) = GPIO_bit(GPIO_NR_H4000_CODEC_RST); } else { DPM_DEBUG("h4000_audio: Codec reset off\n"); GPCR(GPIO_NR_H4000_CODEC_RST) = GPIO_bit(GPIO_NR_H4000_CODEC_RST); } }
static int tdamc_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { switch (cmd) { default: case 5500: tda_power=1; GPSR(btweb_features.abil_dem_video) = GPIO_bit(btweb_features.abil_dem_video); slave_address = SLAVE_ADDRESS_TDA; normal_addr[0] = slave_address; printk("tda9885_mc44bs: tda9885 registered and selected tda \n"); tdamc_i2c_client->addr=slave_address; break; case 5501: mc_power=1; GPSR(btweb_features.abil_mod_video) = GPIO_bit(btweb_features.abil_mod_video); slave_address = SLAVE_ADDRESS_MC; normal_addr[0] = slave_address; printk("tda9885_mc44bs: tda9885 registered and selected mc \n"); tdamc_i2c_client->addr=slave_address; break; case 5502: printk("tdamc9885_mc44bs.c: Switching off mod/demod power\n"); // if (tda_power) { GPCR(btweb_features.abil_dem_video) = GPIO_bit(btweb_features.abil_dem_video); // } // if (mc_power) { GPCR(btweb_features.abil_mod_video) = GPIO_bit(btweb_features.abil_mod_video); // } slave_address=0; mc_power=0; tda_power=0; normal_addr[0] = slave_address; break; } return 0; }
void btweb_backlight(int onoff) { int btsys_lcd = onoff; if (btsys_lcd) GPSR(12) = GPIO_bit(12); else GPCR(12) = GPIO_bit(12); }
static void tosa_poweroff(void) { RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR; pxa_gpio_mode(TOSA_GPIO_ON_RESET | GPIO_OUT); GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET); mdelay(1000); arm_machine_restart('h'); }
ssize_t gpio_write(struct file *file, const char *ubuf, size_t count, loff_t *offp) { unsigned int domode=0, inout=0, i, j; char buf[16]; char *p; if (count > 15) count = 15; if (copy_from_user(buf, ubuf, count)) return -EFAULT; buf[count] = '\0'; p = buf; /* skip blanks: it may be all blanks, then accept it */ while (*p && isspace(*p)) p++; if (!*p) return count; /* mode: accept M and I or O */ if (*p == 'm' || *p == 'M') { domode++, p++; if (*p == 'i' || *p == 'I') inout= 0; else if (*p == 'o' || *p == 'O') inout = GPIO_MD_MASK_DIR; else return -EINVAL; p++; } /* get numbers */ if (sscanf(p, "%i=%i", &i, &j) != 2) return -EINVAL; if (!i || i > 80 || j > 3) return -EINVAL; if (!domode && j > 1) return -EINVAL; /* act */ if (domode) { if (!j) domode = 0; if (j == 1) domode = GPIO_ALT_FN_1_IN; if (j == 2) domode = GPIO_ALT_FN_2_IN; if (j == 3) domode = GPIO_ALT_FN_3_IN; domode |= inout; set_GPIO_mode( i | domode); } else { if (j) GPSR(i) = GPIO_bit(i); else GPCR(i) = GPIO_bit(i); } *offp += count; return count; }
/* * USB Device Controller */ static void poodle_udc_command(int cmd) { switch(cmd) { case PXA2XX_UDC_CMD_CONNECT: GPSR(POODLE_GPIO_USB_PULLUP) = GPIO_bit(POODLE_GPIO_USB_PULLUP); break; case PXA2XX_UDC_CMD_DISCONNECT: GPCR(POODLE_GPIO_USB_PULLUP) = GPIO_bit(POODLE_GPIO_USB_PULLUP); break; } }
static void spitz_pcmcia_init(void) { /* Setup default state of GPIO outputs before we enable them as outputs. */ GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) | GPIO_bit(GPIO49_nPWE) | GPIO_bit(GPIO50_nPIOR) | GPIO_bit(GPIO51_nPIOW) | GPIO_bit(GPIO54_nPCE_2); GPSR(GPIO85_nPCE_1) = GPIO_bit(GPIO85_nPCE_1); pxa_gpio_mode(GPIO48_nPOE_MD); pxa_gpio_mode(GPIO49_nPWE_MD); pxa_gpio_mode(GPIO50_nPIOR_MD); pxa_gpio_mode(GPIO51_nPIOW_MD); pxa_gpio_mode(GPIO55_nPREG_MD); pxa_gpio_mode(GPIO56_nPWAIT_MD); pxa_gpio_mode(GPIO57_nIOIS16_MD); pxa_gpio_mode(GPIO85_nPCE_1_MD); pxa_gpio_mode(GPIO54_nPCE_2_MD); pxa_gpio_mode(GPIO104_pSKTSEL_MD); }
/* * USB Device Controller */ static void corgi_udc_command(int cmd) { switch(cmd) { case PXA2XX_UDC_CMD_CONNECT: GPSR(CORGI_GPIO_USB_PULLUP) = GPIO_bit(CORGI_GPIO_USB_PULLUP); break; case PXA2XX_UDC_CMD_DISCONNECT: GPCR(CORGI_GPIO_USB_PULLUP) = GPIO_bit(CORGI_GPIO_USB_PULLUP); break; } }
static int dot_reset(void){ GPCR(DOT_RESET) |= GPIO_bit(DOT_RESET); GPSR(DOT_RESET) |= GPIO_bit(DOT_RESET); /* DOT_COL_1 = 0x00; DOT_COL_2 = 0x00; DOT_COL_3 = 0x00; DOT_COL_4 = 0x00; DOT_COL_5 = 0x00; */ return 0; }
static void cmx270_mci_setpower(struct device *dev, unsigned int vdd) { struct pxamci_platform_data *p_d = dev->platform_data; if ((1 << vdd) & p_d->ocr_mask) { printk(KERN_DEBUG "%s: on\n", __FUNCTION__); GPCR(105) = GPIO_bit(105); } else { GPSR(105) = GPIO_bit(105); printk(KERN_DEBUG "%s: off\n", __FUNCTION__); } }