static int e740_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = skt->nr == 0 ? IRQ_GPIO(GPIO_E740_PCMCIA_RDY0) : IRQ_GPIO(GPIO_E740_PCMCIA_RDY1); return soc_pcmcia_request_irqs(skt, &cd_irqs[skt->nr], 1); }
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 mst_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = (skt->nr == 0) ? MAINSTONE_S0_IRQ : MAINSTONE_S1_IRQ; 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)); }
static int sharpsl_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int ret; if (platform_scoop_config->pcmcia_init) platform_scoop_config->pcmcia_init(); /* Register interrupts */ if (SCOOP_DEV[skt->nr].cd_irq >= 0) { struct pcmcia_irqs cd_irq; cd_irq.sock = skt->nr; cd_irq.irq = SCOOP_DEV[skt->nr].cd_irq; cd_irq.str = SCOOP_DEV[skt->nr].cd_irq_str; ret = soc_pcmcia_request_irqs(skt, &cd_irq, 1); if (ret) { printk(KERN_ERR "Request for Compact Flash IRQ failed\n"); return ret; } } skt->irq = SCOOP_DEV[skt->nr].irq; return 0; }
int sa1111_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { if (skt->irq == NO_IRQ) skt->irq = skt->nr ? IRQ_S1_READY_NINT : IRQ_S0_READY_NINT; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int h3600_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = skt->nr ? IRQ_GPIO_H3600_PCMCIA_IRQ1 : IRQ_GPIO_H3600_PCMCIA_IRQ0; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int simpad_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { clear_cs3_bit(VCC_3V_EN|VCC_5V_EN|EN0|EN1); skt->socket.pci_irq = IRQ_GPIO_CF_IRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int mst_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* * Setup default state of GPIO outputs * before we enable them as outputs. */ skt->irq = (skt->nr == 0) ? MAINSTONE_S0_IRQ : MAINSTONE_S1_IRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int shannon_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { /* All those are inputs */ GPDR &= ~(SHANNON_GPIO_EJECT_0 | SHANNON_GPIO_EJECT_1 | SHANNON_GPIO_RDY_0 | SHANNON_GPIO_RDY_1); GAFR &= ~(SHANNON_GPIO_EJECT_0 | SHANNON_GPIO_EJECT_1 | SHANNON_GPIO_RDY_0 | SHANNON_GPIO_RDY_1); skt->irq = skt->nr ? SHANNON_IRQ_GPIO_RDY_1 : SHANNON_IRQ_GPIO_RDY_0; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int balloon3_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { uint16_t ver; ver = __raw_readw(BALLOON3_FPGA_VER); if (ver < 0x4f08) pr_warn("The FPGA code, version 0x%04x, is too old. " "PCMCIA/CF support might be broken in this version!", ver); skt->socket.pci_irq = BALLOON3_BP_CF_NRDY_IRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int cmx255_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int ret = gpio_request(GPIO_PCMCIA_RESET, "PCCard reset"); if (ret) return ret; gpio_direction_output(GPIO_PCMCIA_RESET, 0); skt->socket.pci_irq = skt->nr == 0 ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT; ret = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); if (!ret) gpio_free(GPIO_PCMCIA_RESET); return ret; }
static int balloon3_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { uint16_t ver; int ret; static void __iomem *fpga_ver; ver = __raw_readw(BALLOON3_FPGA_VER); if (ver > 0x0201) pr_warn("The FPGA code, version 0x%04x, is newer than rel-0.3. " "PCMCIA/CF support might be broken in this version!", ver); skt->socket.pci_irq = BALLOON3_BP_CF_NRDY_IRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int vpac270_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int ret; if (skt->nr == 0) { ret = gpio_request_array(vpac270_pcmcia_gpios, ARRAY_SIZE(vpac270_pcmcia_gpios)); skt->socket.pci_irq = gpio_to_irq(GPIO35_VPAC270_PCMCIA_RDY); if (!ret) ret = soc_pcmcia_request_irqs(skt, &cd_irqs[0], 1); } else { ret = gpio_request_array(vpac270_cf_gpios, ARRAY_SIZE(vpac270_cf_gpios)); skt->socket.pci_irq = gpio_to_irq(GPIO12_VPAC270_CF_RDY); if (!ret) ret = soc_pcmcia_request_irqs(skt, &cd_irqs[1], 1); } return ret; }
static int roverp5p_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { unsigned long flags; skt->irq = IRQ_GPIO(GPIO_NR_ROVERP5P_PXA_PRDY); local_irq_save (flags); pxa_gpio_mode (GPIO_NR_ROVERP5P_CF_RESET | GPIO_OUT); pxa_gpio_mode (GPIO_NR_ROVERP5P_CF_PWR_ON | GPIO_OUT); pxa_gpio_mode (GPIO_NR_ROVERP5P_CF_BUS_nON | GPIO_OUT); pxa_gpio_mode (GPIO_NR_ROVERP5P_CF_DETECT | GPIO_IN); pxa_gpio_mode (GPIO_NR_ROVERP5P_PXA_PRDY | GPIO_IN); local_irq_restore (flags); return soc_pcmcia_request_irqs(skt, cd_irqs, ARRAY_SIZE(cd_irqs)); }
static int viper_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { struct arcom_pcmcia_pdata *pdata = viper_get_pdata(); unsigned long flags; skt->socket.pci_irq = gpio_to_irq(pdata->rdy_gpio); irqs[0].irq = gpio_to_irq(pdata->cd_gpio); if (gpio_request(pdata->cd_gpio, "CF detect")) goto err_request_cd; if (gpio_request(pdata->rdy_gpio, "CF ready")) goto err_request_rdy; if (gpio_request(pdata->pwr_gpio, "CF power")) goto err_request_pwr; local_irq_save(flags); if (gpio_direction_output(pdata->pwr_gpio, 0) || gpio_direction_input(pdata->cd_gpio) || gpio_direction_input(pdata->rdy_gpio)) { local_irq_restore(flags); goto err_dir; } local_irq_restore(flags); return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); err_dir: gpio_free(pdata->pwr_gpio); err_request_pwr: gpio_free(pdata->rdy_gpio); err_request_rdy: gpio_free(pdata->cd_gpio); err_request_cd: dev_err(&arcom_pcmcia_dev->dev, "Failed to setup PCMCIA GPIOs\n"); return -1; }
static int viper_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { unsigned long flags; skt->irq = gpio_to_irq(VIPER_CF_RDY_GPIO); if (gpio_request(VIPER_CF_CD_GPIO, "CF detect")) goto err_request_cd; if (gpio_request(VIPER_CF_RDY_GPIO, "CF ready")) goto err_request_rdy; if (gpio_request(VIPER_CF_POWER_GPIO, "CF power")) goto err_request_pwr; local_irq_save(flags); if (gpio_direction_output(VIPER_CF_POWER_GPIO, 0) || gpio_direction_input(VIPER_CF_CD_GPIO) || gpio_direction_input(VIPER_CF_RDY_GPIO)) { local_irq_restore(flags); goto err_dir; } local_irq_restore(flags); return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); err_dir: gpio_free(VIPER_CF_POWER_GPIO); err_request_pwr: gpio_free(VIPER_CF_RDY_GPIO); err_request_rdy: gpio_free(VIPER_CF_CD_GPIO); err_request_cd: printk(KERN_ERR "viper: Failed to setup PCMCIA GPIOs\n"); return -1; }
static int assabet_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = ASSABET_IRQ_GPIO_CF_IRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int vpac270_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int ret; if (skt->nr == 0) { ret = gpio_request(GPIO84_VPAC270_PCMCIA_CD, "PCMCIA CD"); if (ret) goto err1; ret = gpio_direction_input(GPIO84_VPAC270_PCMCIA_CD); if (ret) goto err2; ret = gpio_request(GPIO35_VPAC270_PCMCIA_RDY, "PCMCIA RDY"); if (ret) goto err2; ret = gpio_direction_input(GPIO35_VPAC270_PCMCIA_RDY); if (ret) goto err3; ret = gpio_request(GPIO107_VPAC270_PCMCIA_PPEN, "PCMCIA PPEN"); if (ret) goto err3; ret = gpio_direction_output(GPIO107_VPAC270_PCMCIA_PPEN, 0); if (ret) goto err4; ret = gpio_request(GPIO11_VPAC270_PCMCIA_RESET, "PCMCIA RESET"); if (ret) goto err4; ret = gpio_direction_output(GPIO11_VPAC270_PCMCIA_RESET, 0); if (ret) goto err5; skt->socket.pci_irq = gpio_to_irq(GPIO35_VPAC270_PCMCIA_RDY); return soc_pcmcia_request_irqs(skt, &cd_irqs[0], 1); err5: gpio_free(GPIO11_VPAC270_PCMCIA_RESET); err4: gpio_free(GPIO107_VPAC270_PCMCIA_PPEN); err3: gpio_free(GPIO35_VPAC270_PCMCIA_RDY); err2: gpio_free(GPIO84_VPAC270_PCMCIA_CD); err1: return ret; } else { ret = gpio_request(GPIO17_VPAC270_CF_CD, "CF CD"); if (ret) goto err6; ret = gpio_direction_input(GPIO17_VPAC270_CF_CD); if (ret) goto err7; ret = gpio_request(GPIO12_VPAC270_CF_RDY, "CF RDY"); if (ret) goto err7; ret = gpio_direction_input(GPIO12_VPAC270_CF_RDY); if (ret) goto err8; ret = gpio_request(GPIO16_VPAC270_CF_RESET, "CF RESET"); if (ret) goto err8; ret = gpio_direction_output(GPIO16_VPAC270_CF_RESET, 0); if (ret) goto err9; skt->socket.pci_irq = gpio_to_irq(GPIO12_VPAC270_CF_RDY); return soc_pcmcia_request_irqs(skt, &cd_irqs[1], 1); err9: gpio_free(GPIO16_VPAC270_CF_RESET); err8: gpio_free(GPIO12_VPAC270_CF_RDY); err7: gpio_free(GPIO17_VPAC270_CF_CD); err6: return ret; } }
static int cerf_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = CERF_IRQ_GPIO_CF_IRQ; return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int e750_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->irq = IRQ_GPIO(GPIO_E750_PCMCIA_RDY0); return soc_pcmcia_request_irqs(skt, cd_irqs, ARRAY_SIZE(cd_irqs)); }
static int sg2_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { skt->socket.pci_irq = IRQ_GPIO(SG2_S0_GPIO_READY); return soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static int colibri_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { int ret; ret = gpio_request(colibri_pcmcia_gpio.detect_gpio, "DETECT"); if (ret) goto err1; ret = gpio_direction_input(colibri_pcmcia_gpio.detect_gpio); if (ret) goto err2; ret = gpio_request(colibri_pcmcia_gpio.ready_gpio, "READY"); if (ret) goto err2; ret = gpio_direction_input(colibri_pcmcia_gpio.ready_gpio); if (ret) goto err3; ret = gpio_request(colibri_pcmcia_gpio.bvd1_gpio, "BVD1"); if (ret) goto err3; ret = gpio_direction_input(colibri_pcmcia_gpio.bvd1_gpio); if (ret) goto err4; ret = gpio_request(colibri_pcmcia_gpio.bvd2_gpio, "BVD2"); if (ret) goto err4; ret = gpio_direction_input(colibri_pcmcia_gpio.bvd2_gpio); if (ret) goto err5; ret = gpio_request(colibri_pcmcia_gpio.ppen_gpio, "PPEN"); if (ret) goto err5; ret = gpio_direction_output(colibri_pcmcia_gpio.ppen_gpio, 0); if (ret) goto err6; ret = gpio_request(colibri_pcmcia_gpio.reset_gpio, "RESET"); if (ret) goto err6; ret = gpio_direction_output(colibri_pcmcia_gpio.reset_gpio, 1); if (ret) goto err7; colibri_irqs[0].irq = gpio_to_irq(colibri_pcmcia_gpio.detect_gpio); skt->socket.pci_irq = gpio_to_irq(colibri_pcmcia_gpio.ready_gpio); return soc_pcmcia_request_irqs(skt, colibri_irqs, ARRAY_SIZE(colibri_irqs)); err7: gpio_free(colibri_pcmcia_gpio.detect_gpio); err6: gpio_free(colibri_pcmcia_gpio.ready_gpio); err5: gpio_free(colibri_pcmcia_gpio.bvd1_gpio); err4: gpio_free(colibri_pcmcia_gpio.bvd2_gpio); err3: gpio_free(colibri_pcmcia_gpio.reset_gpio); err2: gpio_free(colibri_pcmcia_gpio.ppen_gpio); err1: return ret; }