Loading drivers/pcmcia/pxa2xx_base.c +12 −7 Original line number Original line Diff line number Diff line Loading @@ -228,7 +228,7 @@ static const char *skt_names[] = { #define SKT_DEV_INFO_SIZE(n) \ #define SKT_DEV_INFO_SIZE(n) \ (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket)) (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket)) static int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt) int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt) { { skt->res_skt.start = _PCMCIA(skt->nr); skt->res_skt.start = _PCMCIA(skt->nr); skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1; skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1; Loading @@ -253,9 +253,18 @@ static int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt) return soc_pcmcia_add_one(skt); return soc_pcmcia_add_one(skt); } } void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops) { /* Provide our PXA2xx specific timing routines. */ ops->set_timing = pxa2xx_pcmcia_set_timing; #ifdef CONFIG_CPU_FREQ ops->frequency_change = pxa2xx_pcmcia_frequency_change; #endif } int __pxa2xx_drv_pcmcia_probe(struct device *dev) int __pxa2xx_drv_pcmcia_probe(struct device *dev) { { int i, ret; int i, ret = 0; struct pcmcia_low_level *ops; struct pcmcia_low_level *ops; struct skt_dev_info *sinfo; struct skt_dev_info *sinfo; struct soc_pcmcia_socket *skt; struct soc_pcmcia_socket *skt; Loading @@ -265,11 +274,7 @@ int __pxa2xx_drv_pcmcia_probe(struct device *dev) ops = (struct pcmcia_low_level *)dev->platform_data; ops = (struct pcmcia_low_level *)dev->platform_data; /* Provide our PXA2xx specific timing routines. */ pxa2xx_drv_pcmcia_ops(ops); ops->set_timing = pxa2xx_pcmcia_set_timing; #ifdef CONFIG_CPU_FREQ ops->frequency_change = pxa2xx_pcmcia_frequency_change; #endif sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL); sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL); if (!sinfo) if (!sinfo) Loading drivers/pcmcia/pxa2xx_base.h +3 −0 Original line number Original line Diff line number Diff line /* temporary measure */ /* temporary measure */ extern int __pxa2xx_drv_pcmcia_probe(struct device *); extern int __pxa2xx_drv_pcmcia_probe(struct device *); int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt); void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops); drivers/pcmcia/pxa2xx_lubbock.c +6 −4 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ static int lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) const socket_state_t *state) { { struct sa1111_pcmcia_socket *s = to_skt(skt); unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set; unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set; int ret = 0; int ret = 0; Loading Loading @@ -149,7 +150,7 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, if (ret == 0) { if (ret == 0) { lubbock_set_misc_wr(misc_mask, misc_set); lubbock_set_misc_wr(misc_mask, misc_set); sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set); } } #if 1 #if 1 Loading @@ -175,7 +176,7 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, * Switch to 5V, Configure socket with 5V voltage * Switch to 5V, Configure socket with 5V voltage */ */ lubbock_set_misc_wr(misc_mask, 0); lubbock_set_misc_wr(misc_mask, 0); sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, 0); sa1111_set_io(s->dev, pa_dwr_mask, 0); /* /* * It takes about 100ms to turn off Vcc. * It takes about 100ms to turn off Vcc. Loading Loading @@ -228,8 +229,9 @@ int pcmcia_lubbock_init(struct sa1111_dev *sadev) /* Set CF Socket 1 power to standby mode. */ /* Set CF Socket 1 power to standby mode. */ lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); sadev->dev.platform_data = &lubbock_pcmcia_ops; pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); ret = __pxa2xx_drv_pcmcia_probe(&sadev->dev); ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, pxa2xx_drv_pcmcia_add_one); } } return ret; return ret; Loading drivers/pcmcia/sa1100_badge4.c +6 −1 Original line number Original line Diff line number Diff line Loading @@ -134,6 +134,9 @@ static struct pcmcia_low_level badge4_pcmcia_ops = { .socket_init = sa1111_pcmcia_socket_init, .socket_init = sa1111_pcmcia_socket_init, .socket_suspend = sa1111_pcmcia_socket_suspend, .socket_suspend = sa1111_pcmcia_socket_suspend, .first = 0, .nr = 2, }; }; int pcmcia_badge4_init(struct device *dev) int pcmcia_badge4_init(struct device *dev) Loading @@ -146,7 +149,9 @@ int pcmcia_badge4_init(struct device *dev) __func__, __func__, badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc); badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc); ret = sa11xx_drv_pcmcia_probe(dev, &badge4_pcmcia_ops, 0, 2); sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops); ret = sa1111_pcmcia_add(dev, &badge4_pcmcia_ops, sa11xx_drv_pcmcia_add_one); } } return ret; return ret; Loading drivers/pcmcia/sa1100_jornada720.c +14 −6 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { { struct sa1111_pcmcia_socket *s = to_skt(skt); unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; /* /* Loading @@ -31,9 +32,9 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) */ */ GRER |= 0x00000002; GRER |= 0x00000002; /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ sa1111_set_io_dir(SA1111_DEV(skt->dev), pin, 0, 0); sa1111_set_io_dir(s->dev, pin, 0, 0); sa1111_set_io(SA1111_DEV(skt->dev), pin, 0); sa1111_set_io(s->dev, pin, 0); sa1111_set_sleep_io(SA1111_DEV(skt->dev), pin, 0); sa1111_set_sleep_io(s->dev, pin, 0); return sa1111_pcmcia_hw_init(skt); return sa1111_pcmcia_hw_init(skt); } } Loading @@ -41,6 +42,7 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) static int static int jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { { struct sa1111_pcmcia_socket *s = to_skt(skt); unsigned int pa_dwr_mask, pa_dwr_set; unsigned int pa_dwr_mask, pa_dwr_set; int ret; int ret; Loading Loading @@ -97,7 +99,7 @@ jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_s unsigned long flags; unsigned long flags; local_irq_save(flags); local_irq_save(flags); sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set); local_irq_restore(flags); local_irq_restore(flags); } } Loading @@ -113,14 +115,20 @@ static struct pcmcia_low_level jornada720_pcmcia_ops = { .socket_init = sa1111_pcmcia_socket_init, .socket_init = sa1111_pcmcia_socket_init, .socket_suspend = sa1111_pcmcia_socket_suspend, .socket_suspend = sa1111_pcmcia_socket_suspend, .first = 0, .nr = 2, }; }; int __devinit pcmcia_jornada720_init(struct device *dev) int __devinit pcmcia_jornada720_init(struct device *dev) { { int ret = -ENODEV; int ret = -ENODEV; if (machine_is_jornada720()) if (machine_is_jornada720()) { ret = sa11xx_drv_pcmcia_probe(dev, &jornada720_pcmcia_ops, 0, 2); sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops); ret = sa1111_pcmcia_add(dev, &jornada720_pcmcia_ops, sa11xx_drv_pcmcia_add_one); } return ret; return ret; } } Loading
drivers/pcmcia/pxa2xx_base.c +12 −7 Original line number Original line Diff line number Diff line Loading @@ -228,7 +228,7 @@ static const char *skt_names[] = { #define SKT_DEV_INFO_SIZE(n) \ #define SKT_DEV_INFO_SIZE(n) \ (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket)) (sizeof(struct skt_dev_info) + (n)*sizeof(struct soc_pcmcia_socket)) static int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt) int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt) { { skt->res_skt.start = _PCMCIA(skt->nr); skt->res_skt.start = _PCMCIA(skt->nr); skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1; skt->res_skt.end = _PCMCIA(skt->nr) + PCMCIASp - 1; Loading @@ -253,9 +253,18 @@ static int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt) return soc_pcmcia_add_one(skt); return soc_pcmcia_add_one(skt); } } void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops) { /* Provide our PXA2xx specific timing routines. */ ops->set_timing = pxa2xx_pcmcia_set_timing; #ifdef CONFIG_CPU_FREQ ops->frequency_change = pxa2xx_pcmcia_frequency_change; #endif } int __pxa2xx_drv_pcmcia_probe(struct device *dev) int __pxa2xx_drv_pcmcia_probe(struct device *dev) { { int i, ret; int i, ret = 0; struct pcmcia_low_level *ops; struct pcmcia_low_level *ops; struct skt_dev_info *sinfo; struct skt_dev_info *sinfo; struct soc_pcmcia_socket *skt; struct soc_pcmcia_socket *skt; Loading @@ -265,11 +274,7 @@ int __pxa2xx_drv_pcmcia_probe(struct device *dev) ops = (struct pcmcia_low_level *)dev->platform_data; ops = (struct pcmcia_low_level *)dev->platform_data; /* Provide our PXA2xx specific timing routines. */ pxa2xx_drv_pcmcia_ops(ops); ops->set_timing = pxa2xx_pcmcia_set_timing; #ifdef CONFIG_CPU_FREQ ops->frequency_change = pxa2xx_pcmcia_frequency_change; #endif sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL); sinfo = kzalloc(SKT_DEV_INFO_SIZE(ops->nr), GFP_KERNEL); if (!sinfo) if (!sinfo) Loading
drivers/pcmcia/pxa2xx_base.h +3 −0 Original line number Original line Diff line number Diff line /* temporary measure */ /* temporary measure */ extern int __pxa2xx_drv_pcmcia_probe(struct device *); extern int __pxa2xx_drv_pcmcia_probe(struct device *); int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt); void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops);
drivers/pcmcia/pxa2xx_lubbock.c +6 −4 Original line number Original line Diff line number Diff line Loading @@ -32,6 +32,7 @@ static int lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) const socket_state_t *state) { { struct sa1111_pcmcia_socket *s = to_skt(skt); unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set; unsigned int pa_dwr_mask, pa_dwr_set, misc_mask, misc_set; int ret = 0; int ret = 0; Loading Loading @@ -149,7 +150,7 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, if (ret == 0) { if (ret == 0) { lubbock_set_misc_wr(misc_mask, misc_set); lubbock_set_misc_wr(misc_mask, misc_set); sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set); } } #if 1 #if 1 Loading @@ -175,7 +176,7 @@ lubbock_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, * Switch to 5V, Configure socket with 5V voltage * Switch to 5V, Configure socket with 5V voltage */ */ lubbock_set_misc_wr(misc_mask, 0); lubbock_set_misc_wr(misc_mask, 0); sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, 0); sa1111_set_io(s->dev, pa_dwr_mask, 0); /* /* * It takes about 100ms to turn off Vcc. * It takes about 100ms to turn off Vcc. Loading Loading @@ -228,8 +229,9 @@ int pcmcia_lubbock_init(struct sa1111_dev *sadev) /* Set CF Socket 1 power to standby mode. */ /* Set CF Socket 1 power to standby mode. */ lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); sadev->dev.platform_data = &lubbock_pcmcia_ops; pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); ret = __pxa2xx_drv_pcmcia_probe(&sadev->dev); ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, pxa2xx_drv_pcmcia_add_one); } } return ret; return ret; Loading
drivers/pcmcia/sa1100_badge4.c +6 −1 Original line number Original line Diff line number Diff line Loading @@ -134,6 +134,9 @@ static struct pcmcia_low_level badge4_pcmcia_ops = { .socket_init = sa1111_pcmcia_socket_init, .socket_init = sa1111_pcmcia_socket_init, .socket_suspend = sa1111_pcmcia_socket_suspend, .socket_suspend = sa1111_pcmcia_socket_suspend, .first = 0, .nr = 2, }; }; int pcmcia_badge4_init(struct device *dev) int pcmcia_badge4_init(struct device *dev) Loading @@ -146,7 +149,9 @@ int pcmcia_badge4_init(struct device *dev) __func__, __func__, badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc); badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc); ret = sa11xx_drv_pcmcia_probe(dev, &badge4_pcmcia_ops, 0, 2); sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops); ret = sa1111_pcmcia_add(dev, &badge4_pcmcia_ops, sa11xx_drv_pcmcia_add_one); } } return ret; return ret; Loading
drivers/pcmcia/sa1100_jornada720.c +14 −6 Original line number Original line Diff line number Diff line Loading @@ -24,6 +24,7 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) { { struct sa1111_pcmcia_socket *s = to_skt(skt); unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; /* /* Loading @@ -31,9 +32,9 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) */ */ GRER |= 0x00000002; GRER |= 0x00000002; /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ sa1111_set_io_dir(SA1111_DEV(skt->dev), pin, 0, 0); sa1111_set_io_dir(s->dev, pin, 0, 0); sa1111_set_io(SA1111_DEV(skt->dev), pin, 0); sa1111_set_io(s->dev, pin, 0); sa1111_set_sleep_io(SA1111_DEV(skt->dev), pin, 0); sa1111_set_sleep_io(s->dev, pin, 0); return sa1111_pcmcia_hw_init(skt); return sa1111_pcmcia_hw_init(skt); } } Loading @@ -41,6 +42,7 @@ static int jornada720_pcmcia_hw_init(struct soc_pcmcia_socket *skt) static int static int jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { { struct sa1111_pcmcia_socket *s = to_skt(skt); unsigned int pa_dwr_mask, pa_dwr_set; unsigned int pa_dwr_mask, pa_dwr_set; int ret; int ret; Loading Loading @@ -97,7 +99,7 @@ jornada720_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_s unsigned long flags; unsigned long flags; local_irq_save(flags); local_irq_save(flags); sa1111_set_io(SA1111_DEV(skt->dev), pa_dwr_mask, pa_dwr_set); sa1111_set_io(s->dev, pa_dwr_mask, pa_dwr_set); local_irq_restore(flags); local_irq_restore(flags); } } Loading @@ -113,14 +115,20 @@ static struct pcmcia_low_level jornada720_pcmcia_ops = { .socket_init = sa1111_pcmcia_socket_init, .socket_init = sa1111_pcmcia_socket_init, .socket_suspend = sa1111_pcmcia_socket_suspend, .socket_suspend = sa1111_pcmcia_socket_suspend, .first = 0, .nr = 2, }; }; int __devinit pcmcia_jornada720_init(struct device *dev) int __devinit pcmcia_jornada720_init(struct device *dev) { { int ret = -ENODEV; int ret = -ENODEV; if (machine_is_jornada720()) if (machine_is_jornada720()) { ret = sa11xx_drv_pcmcia_probe(dev, &jornada720_pcmcia_ops, 0, 2); sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops); ret = sa1111_pcmcia_add(dev, &jornada720_pcmcia_ops, sa11xx_drv_pcmcia_add_one); } return ret; return ret; } }