Merge git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia-fixes-2.6

+62 -2
+35 -2
drivers/pcmcia/ds.c
··· 920 pcmcia_device_stringattr(prod_id3, prod_id[2]); 921 pcmcia_device_stringattr(prod_id4, prod_id[3]); 922 923 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) 924 { 925 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); ··· 976 struct device_attribute *attr, const char *buf, size_t count) 977 { 978 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 979 - if (!count) 980 - return -EINVAL; 981 982 down(&p_dev->socket->skt_sem); 983 p_dev->allow_func_id_match = 1; ··· 991 992 static struct device_attribute pcmcia_dev_attrs[] = { 993 __ATTR(function, 0444, func_show, NULL), 994 __ATTR_RO(func_id), 995 __ATTR_RO(manf_id), 996 __ATTR_RO(card_id),
··· 920 pcmcia_device_stringattr(prod_id3, prod_id[2]); 921 pcmcia_device_stringattr(prod_id4, prod_id[3]); 922 923 + 924 + static ssize_t pcmcia_show_pm_state(struct device *dev, struct device_attribute *attr, char *buf) 925 + { 926 + struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 927 + 928 + if (p_dev->dev.power.power_state.event != PM_EVENT_ON) 929 + return sprintf(buf, "off\n"); 930 + else 931 + return sprintf(buf, "on\n"); 932 + } 933 + 934 + static ssize_t pcmcia_store_pm_state(struct device *dev, struct device_attribute *attr, 935 + const char *buf, size_t count) 936 + { 937 + struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 938 + int ret = 0; 939 + 940 + if (!count) 941 + return -EINVAL; 942 + 943 + if ((p_dev->dev.power.power_state.event == PM_EVENT_ON) && 944 + (!strncmp(buf, "off", 3))) 945 + ret = dpm_runtime_suspend(dev, PMSG_SUSPEND); 946 + else if ((p_dev->dev.power.power_state.event != PM_EVENT_ON) && 947 + (!strncmp(buf, "on", 2))) 948 + dpm_runtime_resume(dev); 949 + 950 + return ret ? ret : count; 951 + } 952 + 953 + 954 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) 955 { 956 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); ··· 945 struct device_attribute *attr, const char *buf, size_t count) 946 { 947 struct pcmcia_device *p_dev = to_pcmcia_dev(dev); 948 + 949 + if (!count) 950 + return -EINVAL; 951 952 down(&p_dev->socket->skt_sem); 953 p_dev->allow_func_id_match = 1; ··· 959 960 static struct device_attribute pcmcia_dev_attrs[] = { 961 __ATTR(function, 0444, func_show, NULL), 962 + __ATTR(pm_state, 0644, pcmcia_show_pm_state, pcmcia_store_pm_state), 963 __ATTR_RO(func_id), 964 __ATTR_RO(manf_id), 965 __ATTR_RO(card_id),
+25
drivers/pcmcia/socket_sysfs.c
··· 98 } 99 static CLASS_DEVICE_ATTR(card_insert, 0200, NULL, pccard_store_insert); 100 101 static ssize_t pccard_store_eject(struct class_device *dev, const char *buf, size_t count) 102 { 103 ssize_t ret; ··· 344 &class_device_attr_card_vpp, 345 &class_device_attr_card_vcc, 346 &class_device_attr_card_insert, 347 &class_device_attr_card_eject, 348 &class_device_attr_card_irq_mask, 349 &class_device_attr_available_resources_setup_done,
··· 98 } 99 static CLASS_DEVICE_ATTR(card_insert, 0200, NULL, pccard_store_insert); 100 101 + 102 + static ssize_t pccard_show_card_pm_state(struct class_device *dev, char *buf) 103 + { 104 + struct pcmcia_socket *s = to_socket(dev); 105 + return sprintf(buf, "%s\n", s->state & SOCKET_SUSPEND ? "off" : "on"); 106 + } 107 + 108 + static ssize_t pccard_store_card_pm_state(struct class_device *dev, const char *buf, size_t count) 109 + { 110 + ssize_t ret = -EINVAL; 111 + struct pcmcia_socket *s = to_socket(dev); 112 + 113 + if (!count) 114 + return -EINVAL; 115 + 116 + if (!(s->state & SOCKET_SUSPEND) && !strncmp(buf, "off", 3)) 117 + ret = pcmcia_suspend_card(s); 118 + else if ((s->state & SOCKET_SUSPEND) && !strncmp(buf, "on", 2)) 119 + ret = pcmcia_resume_card(s); 120 + 121 + return ret ? -ENODEV : count; 122 + } 123 + static CLASS_DEVICE_ATTR(card_pm_state, 0644, pccard_show_card_pm_state, pccard_store_card_pm_state); 124 + 125 static ssize_t pccard_store_eject(struct class_device *dev, const char *buf, size_t count) 126 { 127 ssize_t ret; ··· 320 &class_device_attr_card_vpp, 321 &class_device_attr_card_vcc, 322 &class_device_attr_card_insert, 323 + &class_device_attr_card_pm_state, 324 &class_device_attr_card_eject, 325 &class_device_attr_card_irq_mask, 326 &class_device_attr_available_resources_setup_done,
+2
drivers/serial/serial_cs.c
··· 785 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "3CXEM556.cis"), 786 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "3CXEM556.cis"), 787 PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0x0710, "SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ 788 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "MT5634ZLX.cis"), 789 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "COMpad4.cis"), 790 PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "COMpad2.cis"),
··· 785 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x0035, "3CXEM556.cis"), 786 PCMCIA_MFC_DEVICE_CIS_MANF_CARD(1, 0x0101, 0x003d, "3CXEM556.cis"), 787 PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0x0710, "SW_7xx_SER.cis"), /* Sierra Wireless AC710/AC750 GPRS Network Adapter R1 */ 788 + PCMCIA_DEVICE_CIS_MANF_CARD(0x0192, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- pre update */ 789 + PCMCIA_DEVICE_CIS_MANF_CARD(0x013f, 0xa555, "SW_555_SER.cis"), /* Sierra Aircard 555 CDMA 1xrtt Modem -- post update */ 790 PCMCIA_DEVICE_CIS_PROD_ID12("MultiTech", "PCMCIA 56K DataFax", 0x842047ee, 0xc2efcf03, "MT5634ZLX.cis"), 791 PCMCIA_DEVICE_CIS_PROD_ID12("ADVANTECH", "COMpad-32/85B-4", 0x96913a85, 0xcec8f102, "COMpad4.cis"), 792 PCMCIA_DEVICE_CIS_PROD_ID123("ADVANTECH", "COMpad-32/85", "1.0", 0x96913a85, 0x8fbe92ae, 0x0877b627, "COMpad2.cis"),