Commit 5cf955e0 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'mfd-fixes-4.0' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd

Pull MFD fixes from Lee Jones:
 - Use DMA'able addresses for DMA; rtsx_usb
 - Use return value in the correct way; kempld-core

* tag 'mfd-fixes-4.0' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd:
  mfd: kempld-core: Fix callback return value check
  mfd: rtsx_usb: Prevent DMA from stack
parents 8696938a c8648508
...@@ -739,7 +739,7 @@ static int __init kempld_init(void) ...@@ -739,7 +739,7 @@ static int __init kempld_init(void)
for (id = kempld_dmi_table; for (id = kempld_dmi_table;
id->matches[0].slot != DMI_NONE; id++) id->matches[0].slot != DMI_NONE; id++)
if (strstr(id->ident, force_device_id)) if (strstr(id->ident, force_device_id))
if (id->callback && id->callback(id)) if (id->callback && !id->callback(id))
break; break;
if (id->matches[0].slot == DMI_NONE) if (id->matches[0].slot == DMI_NONE)
return -ENODEV; return -ENODEV;
......
...@@ -196,18 +196,27 @@ EXPORT_SYMBOL_GPL(rtsx_usb_ep0_write_register); ...@@ -196,18 +196,27 @@ EXPORT_SYMBOL_GPL(rtsx_usb_ep0_write_register);
int rtsx_usb_ep0_read_register(struct rtsx_ucr *ucr, u16 addr, u8 *data) int rtsx_usb_ep0_read_register(struct rtsx_ucr *ucr, u16 addr, u8 *data)
{ {
u16 value; u16 value;
u8 *buf;
int ret;
if (!data) if (!data)
return -EINVAL; return -EINVAL;
*data = 0;
buf = kzalloc(sizeof(u8), GFP_KERNEL);
if (!buf)
return -ENOMEM;
addr |= EP0_READ_REG_CMD << EP0_OP_SHIFT; addr |= EP0_READ_REG_CMD << EP0_OP_SHIFT;
value = swab16(addr); value = swab16(addr);
return usb_control_msg(ucr->pusb_dev, ret = usb_control_msg(ucr->pusb_dev,
usb_rcvctrlpipe(ucr->pusb_dev, 0), RTSX_USB_REQ_REG_OP, usb_rcvctrlpipe(ucr->pusb_dev, 0), RTSX_USB_REQ_REG_OP,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
value, 0, data, 1, 100); value, 0, buf, 1, 100);
*data = *buf;
kfree(buf);
return ret;
} }
EXPORT_SYMBOL_GPL(rtsx_usb_ep0_read_register); EXPORT_SYMBOL_GPL(rtsx_usb_ep0_read_register);
...@@ -288,18 +297,27 @@ static int rtsx_usb_get_status_with_bulk(struct rtsx_ucr *ucr, u16 *status) ...@@ -288,18 +297,27 @@ static int rtsx_usb_get_status_with_bulk(struct rtsx_ucr *ucr, u16 *status)
int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status) int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status)
{ {
int ret; int ret;
u16 *buf;
if (!status) if (!status)
return -EINVAL; return -EINVAL;
if (polling_pipe == 0) if (polling_pipe == 0) {
buf = kzalloc(sizeof(u16), GFP_KERNEL);
if (!buf)
return -ENOMEM;
ret = usb_control_msg(ucr->pusb_dev, ret = usb_control_msg(ucr->pusb_dev,
usb_rcvctrlpipe(ucr->pusb_dev, 0), usb_rcvctrlpipe(ucr->pusb_dev, 0),
RTSX_USB_REQ_POLL, RTSX_USB_REQ_POLL,
USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0, 0, status, 2, 100); 0, 0, buf, 2, 100);
else *status = *buf;
kfree(buf);
} else {
ret = rtsx_usb_get_status_with_bulk(ucr, status); ret = rtsx_usb_get_status_with_bulk(ucr, status);
}
/* usb_control_msg may return positive when success */ /* usb_control_msg may return positive when success */
if (ret < 0) if (ret < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment