diff options
author | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-10-10 10:17:15 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-10-14 11:52:29 -0400 |
commit | b5f93cb5133d3ad517afef541502c6c9aecf8e5d (patch) | |
tree | b2c45d247964f751c8818439ac3e3dd3177956f0 | |
parent | db65c49e442cf9c9d9dc950f67daf109609f982a (diff) |
[media] stk-webcam: don't use stack for DMA
The USB control messages require DMA to work. We cannot pass
a stack-allocated buffer, as it is not warranted that the
stack would be into a DMA enabled area.
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r-- | drivers/media/usb/stkwebcam/stk-webcam.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/media/usb/stkwebcam/stk-webcam.c b/drivers/media/usb/stkwebcam/stk-webcam.c index db200c9d796d..22a9aae16291 100644 --- a/drivers/media/usb/stkwebcam/stk-webcam.c +++ b/drivers/media/usb/stkwebcam/stk-webcam.c | |||
@@ -147,20 +147,26 @@ int stk_camera_write_reg(struct stk_camera *dev, u16 index, u8 value) | |||
147 | int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value) | 147 | int stk_camera_read_reg(struct stk_camera *dev, u16 index, int *value) |
148 | { | 148 | { |
149 | struct usb_device *udev = dev->udev; | 149 | struct usb_device *udev = dev->udev; |
150 | unsigned char *buf; | ||
150 | int ret; | 151 | int ret; |
151 | 152 | ||
153 | buf = kmalloc(sizeof(u8), GFP_KERNEL); | ||
154 | if (!buf) | ||
155 | return -ENOMEM; | ||
156 | |||
152 | ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), | 157 | ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), |
153 | 0x00, | 158 | 0x00, |
154 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | 159 | USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, |
155 | 0x00, | 160 | 0x00, |
156 | index, | 161 | index, |
157 | (u8 *) value, | 162 | buf, |
158 | sizeof(u8), | 163 | sizeof(u8), |
159 | 500); | 164 | 500); |
160 | if (ret < 0) | 165 | if (ret >= 0) |
161 | return ret; | 166 | memcpy(value, buf, sizeof(u8)); |
162 | else | 167 | |
163 | return 0; | 168 | kfree(buf); |
169 | return ret; | ||
164 | } | 170 | } |
165 | 171 | ||
166 | static int stk_start_stream(struct stk_camera *dev) | 172 | static int stk_start_stream(struct stk_camera *dev) |