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

Merge branch 'pcmcia-next' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux

Pull pcmcia updates from Dominik Brodowski:
"A number of odd cleanups and fixes, including one for a small race in
the handling of the pccardd kernel thread"

* 'pcmcia-next' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux:
pcmcia: fix setting of kthread task states
MAINTAINERS: update PCMCIA tree
pcmcia: use sysfs_emit{,_at} for sysfs output
pcmcia: make pcmcia_release_io() void, as no-one is interested in return value
pcmcia: rsrc_nonstatic: Fix a NULL pointer dereference in nonstatic_find_mem_region()
pcmcia: rsrc_nonstatic: Fix a NULL pointer dereference in __nonstatic_find_io_region()
pcmcia: comment out unused exca_readw() function
pcmcia: Make use of the helper macro SET_NOIRQ_SYSTEM_SLEEP_PM_OPS()
pcmcia: clean up dead drivers for CompuLab CM-X255/CM-X270 boards

+43 -320
+1 -1
MAINTAINERS
··· 15014 15014 PCMCIA SUBSYSTEM 15015 15015 M: Dominik Brodowski <linux@dominikbrodowski.net> 15016 15016 S: Odd Fixes 15017 - T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia.git 15017 + T: git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux.git 15018 15018 F: Documentation/pcmcia/ 15019 15019 F: drivers/pcmcia/ 15020 15020 F: include/pcmcia/
+1 -1
drivers/pcmcia/Kconfig
··· 209 209 tristate "PXA2xx support" 210 210 depends on ARM && ARCH_PXA && PCMCIA 211 211 depends on (ARCH_LUBBOCK || MACH_MAINSTONE || PXA_SHARPSL \ 212 - || MACH_ARMCORE || ARCH_PXA_PALM || TRIZEPS_PCMCIA \ 212 + || ARCH_PXA_PALM || TRIZEPS_PCMCIA \ 213 213 || ARCOM_PCMCIA || ARCH_PXA_ESERIES || MACH_STARGATE2 \ 214 214 || MACH_VPAC270 || MACH_BALLOON3 || MACH_COLIBRI \ 215 215 || MACH_COLIBRI320 || MACH_H4700)
-2
drivers/pcmcia/Makefile
··· 48 48 sa1100_cs-$(CONFIG_SA1100_H3600) += sa1100_h3600.o 49 49 sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa1100_simpad.o 50 50 51 - pxa2xx_cm_x2xx_cs-y += pxa2xx_cm_x2xx.o pxa2xx_cm_x255.o pxa2xx_cm_x270.o 52 51 pxa2xx-obj-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o 53 52 pxa2xx-obj-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o 54 - pxa2xx-obj-$(CONFIG_MACH_ARMCORE) += pxa2xx_cm_x2xx_cs.o 55 53 pxa2xx-obj-$(CONFIG_ARCOM_PCMCIA) += pxa2xx_viper.o 56 54 pxa2xx-obj-$(CONFIG_TRIZEPS_PCMCIA) += pxa2xx_trizeps4.o 57 55 pxa2xx-obj-$(CONFIG_MACH_PALMTX) += pxa2xx_palmtx.o
+3 -5
drivers/pcmcia/cs.c
··· 666 666 if (events || sysfs_events) 667 667 continue; 668 668 669 + set_current_state(TASK_INTERRUPTIBLE); 669 670 if (kthread_should_stop()) 670 671 break; 671 672 672 - set_current_state(TASK_INTERRUPTIBLE); 673 - 674 673 schedule(); 675 - 676 - /* make sure we are running */ 677 - __set_current_state(TASK_RUNNING); 678 674 679 675 try_to_freeze(); 680 676 } 677 + /* make sure we are running before we exit */ 678 + __set_current_state(TASK_RUNNING); 681 679 682 680 /* shut down socket, if a device is still present */ 683 681 if (skt->state & SOCKET_PRESENT) {
+9 -11
drivers/pcmcia/ds.c
··· 998 998 static ssize_t field##_show (struct device *dev, struct device_attribute *attr, char *buf) \ 999 999 { \ 1000 1000 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); \ 1001 - return p_dev->test ? sprintf(buf, format, p_dev->field) : -ENODEV; \ 1001 + return p_dev->test ? sysfs_emit(buf, format, p_dev->field) : -ENODEV; \ 1002 1002 } \ 1003 1003 static DEVICE_ATTR_RO(field); 1004 1004 ··· 1006 1006 static ssize_t name##_show (struct device *dev, struct device_attribute *attr, char *buf) \ 1007 1007 { \ 1008 1008 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); \ 1009 - return p_dev->field ? sprintf(buf, "%s\n", p_dev->field) : -ENODEV; \ 1009 + return p_dev->field ? sysfs_emit(buf, "%s\n", p_dev->field) : -ENODEV; \ 1010 1010 } \ 1011 1011 static DEVICE_ATTR_RO(name); 1012 1012 ··· 1022 1022 char *buf) 1023 1023 { 1024 1024 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 1025 - return p_dev->socket ? sprintf(buf, "0x%02x\n", p_dev->func) : -ENODEV; 1025 + return p_dev->socket ? sysfs_emit(buf, "0x%02x\n", p_dev->func) : -ENODEV; 1026 1026 } 1027 1027 static DEVICE_ATTR_RO(function); 1028 1028 ··· 1030 1030 struct device_attribute *attr, char *buf) 1031 1031 { 1032 1032 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 1033 - char *str = buf; 1034 - int i; 1033 + int i, at = 0; 1035 1034 1036 1035 for (i = 0; i < PCMCIA_NUM_RESOURCES; i++) 1037 - str += sprintf(str, "%pr\n", p_dev->resource[i]); 1036 + at += sysfs_emit_at(buf, at, "%pr\n", p_dev->resource[i]); 1038 1037 1039 - return str - buf; 1038 + return at; 1040 1039 } 1041 1040 static DEVICE_ATTR_RO(resources); 1042 1041 ··· 1044 1045 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 1045 1046 1046 1047 if (p_dev->suspended) 1047 - return sprintf(buf, "off\n"); 1048 + return sysfs_emit(buf, "off\n"); 1048 1049 else 1049 - return sprintf(buf, "on\n"); 1050 + return sysfs_emit(buf, "on\n"); 1050 1051 } 1051 1052 1052 1053 static ssize_t pm_state_store(struct device *dev, struct device_attribute *attr, ··· 1080 1081 hash[i] = crc32(0, p_dev->prod_id[i], 1081 1082 strlen(p_dev->prod_id[i])); 1082 1083 } 1083 - return sprintf(buf, "pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02X" 1084 - "pa%08Xpb%08Xpc%08Xpd%08X\n", 1084 + return sysfs_emit(buf, "pcmcia:m%04Xc%04Xf%02Xfn%02Xpfn%02Xpa%08Xpb%08Xpc%08Xpd%08X\n", 1085 1085 p_dev->has_manf_id ? p_dev->manf_id : 0, 1086 1086 p_dev->has_card_id ? p_dev->card_id : 0, 1087 1087 p_dev->has_func_id ? p_dev->func_id : 0,
+1 -4
drivers/pcmcia/pcmcia_resource.c
··· 390 390 * "stale", we don't bother checking the port ranges against the 391 391 * current socket values. 392 392 */ 393 - static int pcmcia_release_io(struct pcmcia_device *p_dev) 393 + static void pcmcia_release_io(struct pcmcia_device *p_dev) 394 394 { 395 395 struct pcmcia_socket *s = p_dev->socket; 396 - int ret = -EINVAL; 397 396 config_t *c; 398 397 399 398 mutex_lock(&s->ops_mutex); ··· 411 412 412 413 out: 413 414 mutex_unlock(&s->ops_mutex); 414 - 415 - return ret; 416 415 } /* pcmcia_release_io */ 417 416 418 417
-124
drivers/pcmcia/pxa2xx_cm_x255.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * linux/drivers/pcmcia/pxa/pxa_cm_x255.c 4 - * 5 - * Compulab Ltd., 2003, 2007, 2008 6 - * Mike Rapoport <mike@compulab.co.il> 7 - */ 8 - 9 - #include <linux/platform_device.h> 10 - #include <linux/irq.h> 11 - #include <linux/delay.h> 12 - #include <linux/gpio.h> 13 - #include <linux/export.h> 14 - 15 - #include "soc_common.h" 16 - 17 - #define GPIO_PCMCIA_SKTSEL (54) 18 - #define GPIO_PCMCIA_S0_CD_VALID (16) 19 - #define GPIO_PCMCIA_S1_CD_VALID (17) 20 - #define GPIO_PCMCIA_S0_RDYINT (6) 21 - #define GPIO_PCMCIA_S1_RDYINT (8) 22 - #define GPIO_PCMCIA_RESET (9) 23 - 24 - static int cmx255_pcmcia_hw_init(struct soc_pcmcia_socket *skt) 25 - { 26 - int ret = gpio_request(GPIO_PCMCIA_RESET, "PCCard reset"); 27 - if (ret) 28 - return ret; 29 - gpio_direction_output(GPIO_PCMCIA_RESET, 0); 30 - 31 - if (skt->nr == 0) { 32 - skt->stat[SOC_STAT_CD].gpio = GPIO_PCMCIA_S0_CD_VALID; 33 - skt->stat[SOC_STAT_CD].name = "PCMCIA0 CD"; 34 - skt->stat[SOC_STAT_RDY].gpio = GPIO_PCMCIA_S0_RDYINT; 35 - skt->stat[SOC_STAT_RDY].name = "PCMCIA0 RDY"; 36 - } else { 37 - skt->stat[SOC_STAT_CD].gpio = GPIO_PCMCIA_S1_CD_VALID; 38 - skt->stat[SOC_STAT_CD].name = "PCMCIA1 CD"; 39 - skt->stat[SOC_STAT_RDY].gpio = GPIO_PCMCIA_S1_RDYINT; 40 - skt->stat[SOC_STAT_RDY].name = "PCMCIA1 RDY"; 41 - } 42 - 43 - return 0; 44 - } 45 - 46 - static void cmx255_pcmcia_shutdown(struct soc_pcmcia_socket *skt) 47 - { 48 - gpio_free(GPIO_PCMCIA_RESET); 49 - } 50 - 51 - 52 - static void cmx255_pcmcia_socket_state(struct soc_pcmcia_socket *skt, 53 - struct pcmcia_state *state) 54 - { 55 - state->vs_3v = 0; 56 - state->vs_Xv = 0; 57 - } 58 - 59 - 60 - static int cmx255_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, 61 - const socket_state_t *state) 62 - { 63 - switch (skt->nr) { 64 - case 0: 65 - if (state->flags & SS_RESET) { 66 - gpio_set_value(GPIO_PCMCIA_SKTSEL, 0); 67 - udelay(1); 68 - gpio_set_value(GPIO_PCMCIA_RESET, 1); 69 - udelay(10); 70 - gpio_set_value(GPIO_PCMCIA_RESET, 0); 71 - } 72 - break; 73 - case 1: 74 - if (state->flags & SS_RESET) { 75 - gpio_set_value(GPIO_PCMCIA_SKTSEL, 1); 76 - udelay(1); 77 - gpio_set_value(GPIO_PCMCIA_RESET, 1); 78 - udelay(10); 79 - gpio_set_value(GPIO_PCMCIA_RESET, 0); 80 - } 81 - break; 82 - } 83 - 84 - return 0; 85 - } 86 - 87 - static struct pcmcia_low_level cmx255_pcmcia_ops __initdata = { 88 - .owner = THIS_MODULE, 89 - .hw_init = cmx255_pcmcia_hw_init, 90 - .hw_shutdown = cmx255_pcmcia_shutdown, 91 - .socket_state = cmx255_pcmcia_socket_state, 92 - .configure_socket = cmx255_pcmcia_configure_socket, 93 - .nr = 1, 94 - }; 95 - 96 - static struct platform_device *cmx255_pcmcia_device; 97 - 98 - int __init cmx255_pcmcia_init(void) 99 - { 100 - int ret; 101 - 102 - cmx255_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); 103 - 104 - if (!cmx255_pcmcia_device) 105 - return -ENOMEM; 106 - 107 - ret = platform_device_add_data(cmx255_pcmcia_device, &cmx255_pcmcia_ops, 108 - sizeof(cmx255_pcmcia_ops)); 109 - 110 - if (ret == 0) { 111 - printk(KERN_INFO "Registering cm-x255 PCMCIA interface.\n"); 112 - ret = platform_device_add(cmx255_pcmcia_device); 113 - } 114 - 115 - if (ret) 116 - platform_device_put(cmx255_pcmcia_device); 117 - 118 - return ret; 119 - } 120 - 121 - void __exit cmx255_pcmcia_exit(void) 122 - { 123 - platform_device_unregister(cmx255_pcmcia_device); 124 - }
-103
drivers/pcmcia/pxa2xx_cm_x270.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * linux/drivers/pcmcia/pxa/pxa_cm_x270.c 4 - * 5 - * Compulab Ltd., 2003, 2007, 2008 6 - * Mike Rapoport <mike@compulab.co.il> 7 - */ 8 - 9 - #include <linux/platform_device.h> 10 - #include <linux/irq.h> 11 - #include <linux/delay.h> 12 - #include <linux/gpio.h> 13 - #include <linux/export.h> 14 - 15 - #include "soc_common.h" 16 - 17 - #define GPIO_PCMCIA_S0_CD_VALID (84) 18 - #define GPIO_PCMCIA_S0_RDYINT (82) 19 - #define GPIO_PCMCIA_RESET (53) 20 - 21 - static int cmx270_pcmcia_hw_init(struct soc_pcmcia_socket *skt) 22 - { 23 - int ret = gpio_request(GPIO_PCMCIA_RESET, "PCCard reset"); 24 - if (ret) 25 - return ret; 26 - gpio_direction_output(GPIO_PCMCIA_RESET, 0); 27 - 28 - skt->stat[SOC_STAT_CD].gpio = GPIO_PCMCIA_S0_CD_VALID; 29 - skt->stat[SOC_STAT_CD].name = "PCMCIA0 CD"; 30 - skt->stat[SOC_STAT_RDY].gpio = GPIO_PCMCIA_S0_RDYINT; 31 - skt->stat[SOC_STAT_RDY].name = "PCMCIA0 RDY"; 32 - 33 - return ret; 34 - } 35 - 36 - static void cmx270_pcmcia_shutdown(struct soc_pcmcia_socket *skt) 37 - { 38 - gpio_free(GPIO_PCMCIA_RESET); 39 - } 40 - 41 - 42 - static void cmx270_pcmcia_socket_state(struct soc_pcmcia_socket *skt, 43 - struct pcmcia_state *state) 44 - { 45 - state->vs_3v = 0; 46 - state->vs_Xv = 0; 47 - } 48 - 49 - 50 - static int cmx270_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, 51 - const socket_state_t *state) 52 - { 53 - switch (skt->nr) { 54 - case 0: 55 - if (state->flags & SS_RESET) { 56 - gpio_set_value(GPIO_PCMCIA_RESET, 1); 57 - udelay(10); 58 - gpio_set_value(GPIO_PCMCIA_RESET, 0); 59 - } 60 - break; 61 - } 62 - 63 - return 0; 64 - } 65 - 66 - static struct pcmcia_low_level cmx270_pcmcia_ops __initdata = { 67 - .owner = THIS_MODULE, 68 - .hw_init = cmx270_pcmcia_hw_init, 69 - .hw_shutdown = cmx270_pcmcia_shutdown, 70 - .socket_state = cmx270_pcmcia_socket_state, 71 - .configure_socket = cmx270_pcmcia_configure_socket, 72 - .nr = 1, 73 - }; 74 - 75 - static struct platform_device *cmx270_pcmcia_device; 76 - 77 - int __init cmx270_pcmcia_init(void) 78 - { 79 - int ret; 80 - 81 - cmx270_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); 82 - 83 - if (!cmx270_pcmcia_device) 84 - return -ENOMEM; 85 - 86 - ret = platform_device_add_data(cmx270_pcmcia_device, &cmx270_pcmcia_ops, 87 - sizeof(cmx270_pcmcia_ops)); 88 - 89 - if (ret == 0) { 90 - printk(KERN_INFO "Registering cm-x270 PCMCIA interface.\n"); 91 - ret = platform_device_add(cmx270_pcmcia_device); 92 - } 93 - 94 - if (ret) 95 - platform_device_put(cmx270_pcmcia_device); 96 - 97 - return ret; 98 - } 99 - 100 - void __exit cmx270_pcmcia_exit(void) 101 - { 102 - platform_device_unregister(cmx270_pcmcia_device); 103 - }
-44
drivers/pcmcia/pxa2xx_cm_x2xx.c
··· 1 - // SPDX-License-Identifier: GPL-2.0-only 2 - /* 3 - * linux/drivers/pcmcia/pxa/pxa_cm_x2xx.c 4 - * 5 - * Compulab Ltd., 2003, 2007, 2008 6 - * Mike Rapoport <mike@compulab.co.il> 7 - */ 8 - 9 - #include <linux/module.h> 10 - 11 - #include <asm/mach-types.h> 12 - #include <mach/hardware.h> 13 - 14 - int cmx255_pcmcia_init(void); 15 - int cmx270_pcmcia_init(void); 16 - void cmx255_pcmcia_exit(void); 17 - void cmx270_pcmcia_exit(void); 18 - 19 - static int __init cmx2xx_pcmcia_init(void) 20 - { 21 - int ret = -ENODEV; 22 - 23 - if (machine_is_armcore() && cpu_is_pxa25x()) 24 - ret = cmx255_pcmcia_init(); 25 - else if (machine_is_armcore() && cpu_is_pxa27x()) 26 - ret = cmx270_pcmcia_init(); 27 - 28 - return ret; 29 - } 30 - 31 - static void __exit cmx2xx_pcmcia_exit(void) 32 - { 33 - if (machine_is_armcore() && cpu_is_pxa25x()) 34 - cmx255_pcmcia_exit(); 35 - else if (machine_is_armcore() && cpu_is_pxa27x()) 36 - cmx270_pcmcia_exit(); 37 - } 38 - 39 - module_init(cmx2xx_pcmcia_init); 40 - module_exit(cmx2xx_pcmcia_exit); 41 - 42 - MODULE_LICENSE("GPL"); 43 - MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>"); 44 - MODULE_DESCRIPTION("CM-x2xx PCMCIA driver");
+9 -3
drivers/pcmcia/rsrc_nonstatic.c
··· 690 690 unsigned long min = base; 691 691 int ret; 692 692 693 + if (!res) 694 + return NULL; 695 + 693 696 data.mask = align - 1; 694 697 data.offset = base & data.mask; 695 698 data.map = &s_data->io_db; ··· 811 808 struct pcmcia_align_data data; 812 809 unsigned long min, max; 813 810 int ret, i, j; 811 + 812 + if (!res) 813 + return NULL; 814 814 815 815 low = low || !(s->features & SS_CAP_PAGE_REGS); 816 816 ··· 1082 1076 for (p = data->io_db.next; p != &data->io_db; p = p->next) { 1083 1077 if (ret > (PAGE_SIZE - 10)) 1084 1078 continue; 1085 - ret += scnprintf(&buf[ret], (PAGE_SIZE - ret - 1), 1079 + ret += sysfs_emit_at(buf, ret, 1086 1080 "0x%08lx - 0x%08lx\n", 1087 1081 ((unsigned long) p->base), 1088 1082 ((unsigned long) p->base + p->num - 1)); ··· 1139 1133 p = p->next) { 1140 1134 if (ret > (PAGE_SIZE - 10)) 1141 1135 continue; 1142 - ret += scnprintf(&buf[ret], (PAGE_SIZE - ret - 1), 1136 + ret += sysfs_emit_at(buf, ret, 1143 1137 "0x%08lx - 0x%08lx\n", 1144 1138 ((unsigned long) p->base), 1145 1139 ((unsigned long) p->base + p->num - 1)); ··· 1148 1142 for (p = data->mem_db.next; p != &data->mem_db; p = p->next) { 1149 1143 if (ret > (PAGE_SIZE - 10)) 1150 1144 continue; 1151 - ret += scnprintf(&buf[ret], (PAGE_SIZE - ret - 1), 1145 + ret += sysfs_emit_at(buf, ret, 1152 1146 "0x%08lx - 0x%08lx\n", 1153 1147 ((unsigned long) p->base), 1154 1148 ((unsigned long) p->base + p->num - 1));
+9 -9
drivers/pcmcia/socket_sysfs.c
··· 38 38 if (!(s->state & SOCKET_PRESENT)) 39 39 return -ENODEV; 40 40 if (s->state & SOCKET_CARDBUS) 41 - return sprintf(buf, "32-bit\n"); 42 - return sprintf(buf, "16-bit\n"); 41 + return sysfs_emit(buf, "32-bit\n"); 42 + return sysfs_emit(buf, "16-bit\n"); 43 43 } 44 44 static DEVICE_ATTR(card_type, 0444, pccard_show_type, NULL); 45 45 ··· 51 51 if (!(s->state & SOCKET_PRESENT)) 52 52 return -ENODEV; 53 53 if (s->socket.Vcc) 54 - return sprintf(buf, "%d.%dV\n", s->socket.Vcc / 10, 54 + return sysfs_emit(buf, "%d.%dV\n", s->socket.Vcc / 10, 55 55 s->socket.Vcc % 10); 56 - return sprintf(buf, "X.XV\n"); 56 + return sysfs_emit(buf, "X.XV\n"); 57 57 } 58 58 static DEVICE_ATTR(card_voltage, 0444, pccard_show_voltage, NULL); 59 59 ··· 63 63 struct pcmcia_socket *s = to_socket(dev); 64 64 if (!(s->state & SOCKET_PRESENT)) 65 65 return -ENODEV; 66 - return sprintf(buf, "%d.%dV\n", s->socket.Vpp / 10, s->socket.Vpp % 10); 66 + return sysfs_emit(buf, "%d.%dV\n", s->socket.Vpp / 10, s->socket.Vpp % 10); 67 67 } 68 68 static DEVICE_ATTR(card_vpp, 0444, pccard_show_vpp, NULL); 69 69 ··· 73 73 struct pcmcia_socket *s = to_socket(dev); 74 74 if (!(s->state & SOCKET_PRESENT)) 75 75 return -ENODEV; 76 - return sprintf(buf, "%d.%dV\n", s->socket.Vcc / 10, s->socket.Vcc % 10); 76 + return sysfs_emit(buf, "%d.%dV\n", s->socket.Vcc / 10, s->socket.Vcc % 10); 77 77 } 78 78 static DEVICE_ATTR(card_vcc, 0444, pccard_show_vcc, NULL); 79 79 ··· 98 98 char *buf) 99 99 { 100 100 struct pcmcia_socket *s = to_socket(dev); 101 - return sprintf(buf, "%s\n", s->state & SOCKET_SUSPEND ? "off" : "on"); 101 + return sysfs_emit(buf, "%s\n", s->state & SOCKET_SUSPEND ? "off" : "on"); 102 102 } 103 103 104 104 static ssize_t pccard_store_card_pm_state(struct device *dev, ··· 145 145 char *buf) 146 146 { 147 147 struct pcmcia_socket *s = to_socket(dev); 148 - return sprintf(buf, "0x%04x\n", s->irq_mask); 148 + return sysfs_emit(buf, "0x%04x\n", s->irq_mask); 149 149 } 150 150 151 151 static ssize_t pccard_store_irq_mask(struct device *dev, ··· 177 177 struct device_attribute *attr, char *buf) 178 178 { 179 179 struct pcmcia_socket *s = to_socket(dev); 180 - return sprintf(buf, "%s\n", s->resource_setup_done ? "yes" : "no"); 180 + return sysfs_emit(buf, "%s\n", s->resource_setup_done ? "yes" : "no"); 181 181 } 182 182 183 183 static ssize_t pccard_store_resource(struct device *dev,
+10 -13
drivers/pcmcia/yenta_socket.c
··· 144 144 return val; 145 145 } 146 146 147 + /* 147 148 static inline u8 exca_readw(struct yenta_socket *socket, unsigned reg) 148 149 { 149 150 u16 val; ··· 153 152 debug("%04x %04x\n", socket, reg, val); 154 153 return val; 155 154 } 155 + */ 156 156 157 157 static inline void exca_writeb(struct yenta_socket *socket, unsigned reg, u8 val) 158 158 { ··· 178 176 struct yenta_socket *socket = dev_get_drvdata(yentadev); 179 177 int offset = 0, i; 180 178 181 - offset = snprintf(buf, PAGE_SIZE, "CB registers:"); 179 + offset = sysfs_emit(buf, "CB registers:"); 182 180 for (i = 0; i < 0x24; i += 4) { 183 181 unsigned val; 184 182 if (!(i & 15)) 185 - offset += scnprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i); 183 + offset += sysfs_emit_at(buf, offset, "\n%02x:", i); 186 184 val = cb_readl(socket, i); 187 - offset += scnprintf(buf + offset, PAGE_SIZE - offset, " %08x", val); 185 + offset += sysfs_emit_at(buf, offset, " %08x", val); 188 186 } 189 187 190 - offset += scnprintf(buf + offset, PAGE_SIZE - offset, "\n\nExCA registers:"); 188 + offset += sysfs_emit_at(buf, offset, "\n\nExCA registers:"); 191 189 for (i = 0; i < 0x45; i++) { 192 190 unsigned char val; 193 191 if (!(i & 7)) { ··· 195 193 memcpy(buf + offset, " -", 2); 196 194 offset += 2; 197 195 } else 198 - offset += scnprintf(buf + offset, PAGE_SIZE - offset, "\n%02x:", i); 196 + offset += sysfs_emit_at(buf, offset, "\n%02x:", i); 199 197 } 200 198 val = exca_readb(socket, i); 201 - offset += scnprintf(buf + offset, PAGE_SIZE - offset, " %02x", val); 199 + offset += sysfs_emit_at(buf, offset, " %02x", val); 202 200 } 203 - buf[offset++] = '\n'; 201 + sysfs_emit_at(buf, offset, "\n"); 204 202 return offset; 205 203 } 206 204 ··· 1344 1342 } 1345 1343 1346 1344 static const struct dev_pm_ops yenta_pm_ops = { 1347 - .suspend_noirq = yenta_dev_suspend_noirq, 1348 - .resume_noirq = yenta_dev_resume_noirq, 1349 - .freeze_noirq = yenta_dev_suspend_noirq, 1350 - .thaw_noirq = yenta_dev_resume_noirq, 1351 - .poweroff_noirq = yenta_dev_suspend_noirq, 1352 - .restore_noirq = yenta_dev_resume_noirq, 1345 + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(yenta_dev_suspend_noirq, yenta_dev_resume_noirq) 1353 1346 }; 1354 1347 1355 1348 #define YENTA_PM_OPS (&yenta_pm_ops)