Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:
"Most of this update are fixes primarily discovered from testing on the
older StrongARM 1110 and PXA systems, as a result of recent interest
from several people in these platforms:

- Locomo interrupt handling incorrectly stores the handler data in
the chip's private data slot: when Locomo is combined with an
interrupt controller who's chip uses the chip private data, this
leads to an oops.

- SA1111 was missing a call to clk_disable() to clean up after a
failed probe.

- SA1111 and PCMCIA suspend/resume was broken:

The PCMCIA "ds" layer was using the legacy bus suspend/resume
methods, which the core PM code is no longer calling as a result of
device_pm_check_callbacks() introduced in commit aa8e54b559479
("PM / sleep: Go direct_complete if driver has no callbacks").

SA1111 was broken due to changes to PCMCIA which makes PCMCIA
suspend itself later than the SA1111 code expects, and resume
before the SA1111 code has initialised access to the pcmcia
sub-device.

- the default SA1111 interrupt mask polarity got messed up when it
was converted to use a dynamic interrupt base number for its
interrupts.

- fix platform_get_irq() error code propagation, which was causing
problems on platforms where the interrupt may not be available at
probe time in DT setups.

- fix the lack of clock to PCMCIA code on PXA platforms, which was
omitted in conversions of PXA to CCF.

- fix an oops in the PXA PCMCIA code caused by a previous commit not
realising that Lubbock is different from the rest of the PXA PCMCIA
drivers.

- ensure that SA1111 low-level PCMCIA drivers propagate their error
codes to the main probe function, rather than the driver silently
accepting a failure.

- fix the sa11xx debugfs reporting of timing information, which
always indicated zero due to the clock being a factor of 1000 out.

- fix the polarity of the status change signal reported from the
sockets.

Lastly, one ARM specific commit from Stefan Agner fixing the LPAE
cache attributes"

* 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm:
ARM: pxa/lubbock: add pcmcia clock
ARM: locomo: fix locomo irq handling
ARM: 8612/1: LPAE: initialize cache policy correctly
ARM: sa1111: fix missing clk_disable()
ARM: sa1111: fix pcmcia suspend/resume
ARM: sa1111: fix pcmcia interrupt mask polarity
ARM: sa1111: fix error code propagation in sa1111_probe()
pcmcia: lubbock: fix sockets configuration
pcmcia: sa1111: fix propagation of lowlevel board init return code
pcmcia: soc_common: fix SS_STSCHG polarity
pcmcia: sa11xx_base: add units to the timing information
pcmcia: sa11xx_base: fix reporting of timing information
pcmcia: ds: fix suspend/resume

+113 -100
+2 -3
arch/arm/common/locomo.c
··· 140 140 141 141 static void locomo_handler(struct irq_desc *desc) 142 142 { 143 - struct locomo *lchip = irq_desc_get_chip_data(desc); 143 + struct locomo *lchip = irq_desc_get_handler_data(desc); 144 144 int req, i; 145 145 146 146 /* Acknowledge the parent IRQ */ ··· 200 200 * Install handler for IRQ_LOCOMO_HW. 201 201 */ 202 202 irq_set_irq_type(lchip->irq, IRQ_TYPE_EDGE_FALLING); 203 - irq_set_chip_data(lchip->irq, lchip); 204 - irq_set_chained_handler(lchip->irq, locomo_handler); 203 + irq_set_chained_handler_and_data(lchip->irq, locomo_handler, lchip); 205 204 206 205 /* Install handlers for IRQ_LOCOMO_* */ 207 206 for ( ; irq <= lchip->irq_base + 3; irq++) {
+19 -13
arch/arm/common/sa1111.c
··· 472 472 * specifies that S0ReadyInt and S1ReadyInt should be '1'. 473 473 */ 474 474 sa1111_writel(0, irqbase + SA1111_INTPOL0); 475 - sa1111_writel(SA1111_IRQMASK_HI(IRQ_S0_READY_NINT) | 476 - SA1111_IRQMASK_HI(IRQ_S1_READY_NINT), 475 + sa1111_writel(BIT(IRQ_S0_READY_NINT & 31) | 476 + BIT(IRQ_S1_READY_NINT & 31), 477 477 irqbase + SA1111_INTPOL1); 478 478 479 479 /* clear all IRQs */ ··· 754 754 if (sachip->irq != NO_IRQ) { 755 755 ret = sa1111_setup_irq(sachip, pd->irq_base); 756 756 if (ret) 757 - goto err_unmap; 757 + goto err_clk; 758 758 } 759 759 760 760 #ifdef CONFIG_ARCH_SA1100 ··· 799 799 800 800 return 0; 801 801 802 + err_clk: 803 + clk_disable(sachip->clk); 802 804 err_unmap: 803 805 iounmap(sachip->base); 804 806 err_clk_unprep: ··· 871 869 872 870 #ifdef CONFIG_PM 873 871 874 - static int sa1111_suspend(struct platform_device *dev, pm_message_t state) 872 + static int sa1111_suspend_noirq(struct device *dev) 875 873 { 876 - struct sa1111 *sachip = platform_get_drvdata(dev); 874 + struct sa1111 *sachip = dev_get_drvdata(dev); 877 875 struct sa1111_save_data *save; 878 876 unsigned long flags; 879 877 unsigned int val; ··· 936 934 * restored by their respective drivers, and must be called 937 935 * via LDM after this function. 938 936 */ 939 - static int sa1111_resume(struct platform_device *dev) 937 + static int sa1111_resume_noirq(struct device *dev) 940 938 { 941 - struct sa1111 *sachip = platform_get_drvdata(dev); 939 + struct sa1111 *sachip = dev_get_drvdata(dev); 942 940 struct sa1111_save_data *save; 943 941 unsigned long flags, id; 944 942 void __iomem *base; ··· 954 952 id = sa1111_readl(sachip->base + SA1111_SKID); 955 953 if ((id & SKID_ID_MASK) != SKID_SA1111_ID) { 956 954 __sa1111_remove(sachip); 957 - platform_set_drvdata(dev, NULL); 955 + dev_set_drvdata(dev, NULL); 958 956 kfree(save); 959 957 return 0; 960 958 } ··· 1005 1003 } 1006 1004 1007 1005 #else 1008 - #define sa1111_suspend NULL 1009 - #define sa1111_resume NULL 1006 + #define sa1111_suspend_noirq NULL 1007 + #define sa1111_resume_noirq NULL 1010 1008 #endif 1011 1009 1012 1010 static int sa1111_probe(struct platform_device *pdev) ··· 1019 1017 return -EINVAL; 1020 1018 irq = platform_get_irq(pdev, 0); 1021 1019 if (irq < 0) 1022 - return -ENXIO; 1020 + return irq; 1023 1021 1024 1022 return __sa1111_probe(&pdev->dev, mem, irq); 1025 1023 } ··· 1040 1038 return 0; 1041 1039 } 1042 1040 1041 + static struct dev_pm_ops sa1111_pm_ops = { 1042 + .suspend_noirq = sa1111_suspend_noirq, 1043 + .resume_noirq = sa1111_resume_noirq, 1044 + }; 1045 + 1043 1046 /* 1044 1047 * Not sure if this should be on the system bus or not yet. 1045 1048 * We really want some way to register a system device at ··· 1057 1050 static struct platform_driver sa1111_device_driver = { 1058 1051 .probe = sa1111_probe, 1059 1052 .remove = sa1111_remove, 1060 - .suspend = sa1111_suspend, 1061 - .resume = sa1111_resume, 1062 1053 .driver = { 1063 1054 .name = "sa1111", 1055 + .pm = &sa1111_pm_ops, 1064 1056 }, 1065 1057 }; 1066 1058
+1
arch/arm/include/asm/pgtable-2level-hwdef.h
··· 47 47 #define PMD_SECT_WB (PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) 48 48 #define PMD_SECT_MINICACHE (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE) 49 49 #define PMD_SECT_WBWA (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) 50 + #define PMD_SECT_CACHE_MASK (PMD_SECT_TEX(1) | PMD_SECT_CACHEABLE | PMD_SECT_BUFFERABLE) 50 51 #define PMD_SECT_NONSHARED_DEV (PMD_SECT_TEX(2)) 51 52 52 53 /*
+1
arch/arm/include/asm/pgtable-3level-hwdef.h
··· 62 62 #define PMD_SECT_WT (_AT(pmdval_t, 2) << 2) /* normal inner write-through */ 63 63 #define PMD_SECT_WB (_AT(pmdval_t, 3) << 2) /* normal inner write-back */ 64 64 #define PMD_SECT_WBWA (_AT(pmdval_t, 7) << 2) /* normal inner write-alloc */ 65 + #define PMD_SECT_CACHE_MASK (_AT(pmdval_t, 7) << 2) 65 66 66 67 /* 67 68 * + Level 3 descriptor (PTE)
+14
arch/arm/mach-pxa/lubbock.c
··· 137 137 // no D+ pullup; lubbock can't connect/disconnect in software 138 138 }; 139 139 140 + static void lubbock_init_pcmcia(void) 141 + { 142 + struct clk *clk; 143 + 144 + /* Add an alias for the SA1111 PCMCIA clock */ 145 + clk = clk_get_sys("pxa2xx-pcmcia", NULL); 146 + if (!IS_ERR(clk)) { 147 + clkdev_create(clk, NULL, "1800"); 148 + clk_put(clk); 149 + } 150 + } 151 + 140 152 static struct resource sa1111_resources[] = { 141 153 [0] = { 142 154 .start = 0x10000000, ··· 478 466 pxa_set_ffuart_info(NULL); 479 467 pxa_set_btuart_info(NULL); 480 468 pxa_set_stuart_info(NULL); 469 + 470 + lubbock_init_pcmcia(); 481 471 482 472 clk_add_alias("SA1111_CLK", NULL, "GPIO11_CLK", NULL); 483 473 pxa_set_udc_info(&udc_info);
+1 -1
arch/arm/mm/mmu.c
··· 137 137 138 138 initial_pmd_value = pmd; 139 139 140 - pmd &= PMD_SECT_TEX(1) | PMD_SECT_BUFFERABLE | PMD_SECT_CACHEABLE; 140 + pmd &= PMD_SECT_CACHE_MASK; 141 141 142 142 for (i = 0; i < ARRAY_SIZE(cache_policies); i++) 143 143 if (cache_policies[i].pmd == pmd) {
+7 -5
drivers/pcmcia/ds.c
··· 977 977 978 978 /************************ runtime PM support ***************************/ 979 979 980 - static int pcmcia_dev_suspend(struct device *dev, pm_message_t state); 980 + static int pcmcia_dev_suspend(struct device *dev); 981 981 static int pcmcia_dev_resume(struct device *dev); 982 982 983 983 static int runtime_suspend(struct device *dev) ··· 985 985 int rc; 986 986 987 987 device_lock(dev); 988 - rc = pcmcia_dev_suspend(dev, PMSG_SUSPEND); 988 + rc = pcmcia_dev_suspend(dev); 989 989 device_unlock(dev); 990 990 return rc; 991 991 } ··· 1135 1135 1136 1136 /* PM support, also needed for reset */ 1137 1137 1138 - static int pcmcia_dev_suspend(struct device *dev, pm_message_t state) 1138 + static int pcmcia_dev_suspend(struct device *dev) 1139 1139 { 1140 1140 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 1141 1141 struct pcmcia_driver *p_drv = NULL; ··· 1410 1410 .remove_dev = &pcmcia_bus_remove_socket, 1411 1411 }; 1412 1412 1413 + static const struct dev_pm_ops pcmcia_bus_pm_ops = { 1414 + SET_SYSTEM_SLEEP_PM_OPS(pcmcia_dev_suspend, pcmcia_dev_resume) 1415 + }; 1413 1416 1414 1417 struct bus_type pcmcia_bus_type = { 1415 1418 .name = "pcmcia", ··· 1421 1418 .dev_groups = pcmcia_dev_groups, 1422 1419 .probe = pcmcia_device_probe, 1423 1420 .remove = pcmcia_device_remove, 1424 - .suspend = pcmcia_dev_suspend, 1425 - .resume = pcmcia_dev_resume, 1421 + .pm = &pcmcia_bus_pm_ops, 1426 1422 }; 1427 1423 1428 1424
+5 -4
drivers/pcmcia/pxa2xx_base.c
··· 214 214 } 215 215 #endif 216 216 217 - void pxa2xx_configure_sockets(struct device *dev) 217 + void pxa2xx_configure_sockets(struct device *dev, struct pcmcia_low_level *ops) 218 218 { 219 - struct pcmcia_low_level *ops = dev->platform_data; 220 219 /* 221 220 * We have at least one socket, so set MECR:CIT 222 221 * (Card Is There) ··· 321 322 goto err1; 322 323 } 323 324 324 - pxa2xx_configure_sockets(&dev->dev); 325 + pxa2xx_configure_sockets(&dev->dev, ops); 325 326 dev_set_drvdata(&dev->dev, sinfo); 326 327 327 328 return 0; ··· 347 348 348 349 static int pxa2xx_drv_pcmcia_resume(struct device *dev) 349 350 { 350 - pxa2xx_configure_sockets(dev); 351 + struct pcmcia_low_level *ops = (struct pcmcia_low_level *)dev->platform_data; 352 + 353 + pxa2xx_configure_sockets(dev, ops); 351 354 return 0; 352 355 } 353 356
+1 -1
drivers/pcmcia/pxa2xx_base.h
··· 1 1 int pxa2xx_drv_pcmcia_add_one(struct soc_pcmcia_socket *skt); 2 2 void pxa2xx_drv_pcmcia_ops(struct pcmcia_low_level *ops); 3 - void pxa2xx_configure_sockets(struct device *dev); 3 + void pxa2xx_configure_sockets(struct device *dev, struct pcmcia_low_level *ops); 4 4
+7 -13
drivers/pcmcia/sa1111_badge4.c
··· 134 134 135 135 int pcmcia_badge4_init(struct sa1111_dev *dev) 136 136 { 137 - int ret = -ENODEV; 137 + printk(KERN_INFO 138 + "%s: badge4_pcmvcc=%d, badge4_pcmvpp=%d, badge4_cfvcc=%d\n", 139 + __func__, 140 + badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc); 138 141 139 - if (machine_is_badge4()) { 140 - printk(KERN_INFO 141 - "%s: badge4_pcmvcc=%d, badge4_pcmvpp=%d, badge4_cfvcc=%d\n", 142 - __func__, 143 - badge4_pcmvcc, badge4_pcmvpp, badge4_cfvcc); 144 - 145 - sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops); 146 - ret = sa1111_pcmcia_add(dev, &badge4_pcmcia_ops, 147 - sa11xx_drv_pcmcia_add_one); 148 - } 149 - 150 - return ret; 142 + sa11xx_drv_pcmcia_ops(&badge4_pcmcia_ops); 143 + return sa1111_pcmcia_add(dev, &badge4_pcmcia_ops, 144 + sa11xx_drv_pcmcia_add_one); 151 145 } 152 146 153 147 static int __init pcmv_setup(char *s)
+17 -5
drivers/pcmcia/sa1111_generic.c
··· 18 18 19 19 #include <mach/hardware.h> 20 20 #include <asm/hardware/sa1111.h> 21 + #include <asm/mach-types.h> 21 22 #include <asm/irq.h> 22 23 23 24 #include "sa1111_generic.h" ··· 204 203 sa1111_writel(PCSSR_S0_SLEEP | PCSSR_S1_SLEEP, base + PCSSR); 205 204 sa1111_writel(PCCR_S0_FLT | PCCR_S1_FLT, base + PCCR); 206 205 206 + ret = -ENODEV; 207 207 #ifdef CONFIG_SA1100_BADGE4 208 - pcmcia_badge4_init(dev); 208 + if (machine_is_badge4()) 209 + ret = pcmcia_badge4_init(dev); 209 210 #endif 210 211 #ifdef CONFIG_SA1100_JORNADA720 211 - pcmcia_jornada720_init(dev); 212 + if (machine_is_jornada720()) 213 + ret = pcmcia_jornada720_init(dev); 212 214 #endif 213 215 #ifdef CONFIG_ARCH_LUBBOCK 214 - pcmcia_lubbock_init(dev); 216 + if (machine_is_lubbock()) 217 + ret = pcmcia_lubbock_init(dev); 215 218 #endif 216 219 #ifdef CONFIG_ASSABET_NEPONSET 217 - pcmcia_neponset_init(dev); 220 + if (machine_is_assabet()) 221 + ret = pcmcia_neponset_init(dev); 218 222 #endif 219 - return 0; 223 + 224 + if (ret) { 225 + release_mem_region(dev->res.start, 512); 226 + sa1111_disable_device(dev); 227 + } 228 + 229 + return ret; 220 230 } 221 231 222 232 static int pcmcia_remove(struct sa1111_dev *dev)
+10 -15
drivers/pcmcia/sa1111_jornada720.c
··· 94 94 95 95 int pcmcia_jornada720_init(struct sa1111_dev *sadev) 96 96 { 97 - int ret = -ENODEV; 97 + unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; 98 98 99 - if (machine_is_jornada720()) { 100 - unsigned int pin = GPIO_A0 | GPIO_A1 | GPIO_A2 | GPIO_A3; 99 + /* Fixme: why messing around with SA11x0's GPIO1? */ 100 + GRER |= 0x00000002; 101 101 102 - GRER |= 0x00000002; 102 + /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ 103 + sa1111_set_io_dir(sadev, pin, 0, 0); 104 + sa1111_set_io(sadev, pin, 0); 105 + sa1111_set_sleep_io(sadev, pin, 0); 103 106 104 - /* Set GPIO_A<3:1> to be outputs for PCMCIA/CF power controller: */ 105 - sa1111_set_io_dir(sadev, pin, 0, 0); 106 - sa1111_set_io(sadev, pin, 0); 107 - sa1111_set_sleep_io(sadev, pin, 0); 108 - 109 - sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops); 110 - ret = sa1111_pcmcia_add(sadev, &jornada720_pcmcia_ops, 111 - sa11xx_drv_pcmcia_add_one); 112 - } 113 - 114 - return ret; 107 + sa11xx_drv_pcmcia_ops(&jornada720_pcmcia_ops); 108 + return sa1111_pcmcia_add(sadev, &jornada720_pcmcia_ops, 109 + sa11xx_drv_pcmcia_add_one); 115 110 }
+13 -19
drivers/pcmcia/sa1111_lubbock.c
··· 210 210 211 211 int pcmcia_lubbock_init(struct sa1111_dev *sadev) 212 212 { 213 - int ret = -ENODEV; 213 + /* 214 + * Set GPIO_A<3:0> to be outputs for the MAX1600, 215 + * and switch to standby mode. 216 + */ 217 + sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); 218 + sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 219 + sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 214 220 215 - if (machine_is_lubbock()) { 216 - /* 217 - * Set GPIO_A<3:0> to be outputs for the MAX1600, 218 - * and switch to standby mode. 219 - */ 220 - sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); 221 - sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 222 - sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 221 + /* Set CF Socket 1 power to standby mode. */ 222 + lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); 223 223 224 - /* Set CF Socket 1 power to standby mode. */ 225 - lubbock_set_misc_wr((1 << 15) | (1 << 14), 0); 226 - 227 - pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); 228 - pxa2xx_configure_sockets(&sadev->dev); 229 - ret = sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, 230 - pxa2xx_drv_pcmcia_add_one); 231 - } 232 - 233 - return ret; 224 + pxa2xx_drv_pcmcia_ops(&lubbock_pcmcia_ops); 225 + pxa2xx_configure_sockets(&sadev->dev, &lubbock_pcmcia_ops); 226 + return sa1111_pcmcia_add(sadev, &lubbock_pcmcia_ops, 227 + pxa2xx_drv_pcmcia_add_one); 234 228 } 235 229 236 230 MODULE_LICENSE("GPL");
+10 -16
drivers/pcmcia/sa1111_neponset.c
··· 110 110 111 111 int pcmcia_neponset_init(struct sa1111_dev *sadev) 112 112 { 113 - int ret = -ENODEV; 114 - 115 - if (machine_is_assabet()) { 116 - /* 117 - * Set GPIO_A<3:0> to be outputs for the MAX1600, 118 - * and switch to standby mode. 119 - */ 120 - sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); 121 - sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 122 - sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 123 - sa11xx_drv_pcmcia_ops(&neponset_pcmcia_ops); 124 - ret = sa1111_pcmcia_add(sadev, &neponset_pcmcia_ops, 125 - sa11xx_drv_pcmcia_add_one); 126 - } 127 - 128 - return ret; 113 + /* 114 + * Set GPIO_A<3:0> to be outputs for the MAX1600, 115 + * and switch to standby mode. 116 + */ 117 + sa1111_set_io_dir(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0, 0); 118 + sa1111_set_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 119 + sa1111_set_sleep_io(sadev, GPIO_A0|GPIO_A1|GPIO_A2|GPIO_A3, 0); 120 + sa11xx_drv_pcmcia_ops(&neponset_pcmcia_ops); 121 + return sa1111_pcmcia_add(sadev, &neponset_pcmcia_ops, 122 + sa11xx_drv_pcmcia_add_one); 129 123 }
+4 -4
drivers/pcmcia/sa11xx_base.c
··· 144 144 sa1100_pcmcia_show_timing(struct soc_pcmcia_socket *skt, char *buf) 145 145 { 146 146 struct soc_pcmcia_timing timing; 147 - unsigned int clock = clk_get_rate(skt->clk); 147 + unsigned int clock = clk_get_rate(skt->clk) / 1000; 148 148 unsigned long mecr = MECR; 149 149 char *p = buf; 150 150 151 151 soc_common_pcmcia_get_timing(skt, &timing); 152 152 153 - p+=sprintf(p, "I/O : %u (%u)\n", timing.io, 153 + p+=sprintf(p, "I/O : %uns (%uns)\n", timing.io, 154 154 sa1100_pcmcia_cmd_time(clock, MECR_BSIO_GET(mecr, skt->nr))); 155 155 156 - p+=sprintf(p, "attribute: %u (%u)\n", timing.attr, 156 + p+=sprintf(p, "attribute: %uns (%uns)\n", timing.attr, 157 157 sa1100_pcmcia_cmd_time(clock, MECR_BSA_GET(mecr, skt->nr))); 158 158 159 - p+=sprintf(p, "common : %u (%u)\n", timing.mem, 159 + p+=sprintf(p, "common : %uns (%uns)\n", timing.mem, 160 160 sa1100_pcmcia_cmd_time(clock, MECR_BSM_GET(mecr, skt->nr))); 161 161 162 162 return p - buf;
+1 -1
drivers/pcmcia/soc_common.c
··· 235 235 stat |= skt->cs_state.Vcc ? SS_POWERON : 0; 236 236 237 237 if (skt->cs_state.flags & SS_IOCARD) 238 - stat |= state.bvd1 ? SS_STSCHG : 0; 238 + stat |= state.bvd1 ? 0 : SS_STSCHG; 239 239 else { 240 240 if (state.bvd1 == 0) 241 241 stat |= SS_BATDEAD;