X-Git-Url: http://plrg.eecs.uci.edu/git/?p=firefly-linux-kernel-4.4.55.git;a=blobdiff_plain;f=drivers%2Fusb%2Fgadget%2Ffunction%2Ff_mtp.c;h=e37ece7b6e3ea632d131174c4cd17af5dd4d81d1;hp=d8b69af6e335302824c5f0d52cb478d5b732c34a;hb=ef179e79e9b6f62da31fdc2a9662fd54b346b6f7;hpb=bdcf7d8df4cfa7f99423da161019b964f7ce2520 diff --git a/drivers/usb/gadget/function/f_mtp.c b/drivers/usb/gadget/function/f_mtp.c index d8b69af6e335..e37ece7b6e3e 100644 --- a/drivers/usb/gadget/function/f_mtp.c +++ b/drivers/usb/gadget/function/f_mtp.c @@ -1009,6 +1009,25 @@ static long mtp_ioctl(struct file *fp, unsigned code, unsigned long value) ret = mtp_send_event(dev, &event); goto out; } +#ifdef CONFIG_COMPAT + case MTP_SEND_EVENT_32: + { + struct mtp_event_32 event_32; + struct mtp_event event; + /* return here so we don't change dev->state below, + * which would interfere with bulk transfer state. + */ + if (copy_from_user(&event_32, (void __user *)value, + sizeof(event_32))) + ret = -EFAULT; + else { + event.length = event_32.length; + event.data = (void *)(unsigned long)event_32.data; + ret = mtp_send_event(dev, &event); + } + goto out; + } +#endif } fail: @@ -1052,6 +1071,9 @@ static const struct file_operations mtp_fops = { .read = mtp_read, .write = mtp_write, .unlocked_ioctl = mtp_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = mtp_ioctl, +#endif .open = mtp_open, .release = mtp_release, };