Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16828eae authored by Kyle Yan's avatar Kyle Yan Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: gadget: f_mtp: Fix mtp enumeration failure issue" into msm-4.8

parents 2c7d104e 9a7474a3
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -453,7 +453,7 @@ static void mtp_complete_in(struct usb_ep *ep, struct usb_request *req)
{
	struct mtp_dev *dev = _mtp_dev;

	if (req->status != 0)
	if (req->status != 0 && dev->state != STATE_OFFLINE)
		dev->state = STATE_ERROR;

	mtp_req_put(dev, &dev->tx_idle, req);
@@ -466,7 +466,7 @@ static void mtp_complete_out(struct usb_ep *ep, struct usb_request *req)
	struct mtp_dev *dev = _mtp_dev;

	dev->rx_done = 1;
	if (req->status != 0)
	if (req->status != 0 && dev->state != STATE_OFFLINE)
		dev->state = STATE_ERROR;

	wake_up(&dev->read_wq);
@@ -476,7 +476,7 @@ static void mtp_complete_intr(struct usb_ep *ep, struct usb_request *req)
{
	struct mtp_dev *dev = _mtp_dev;

	if (req->status != 0)
	if (req->status != 0 && dev->state != STATE_OFFLINE)
		dev->state = STATE_ERROR;

	mtp_req_put(dev, &dev->intr_idle, req);
@@ -590,7 +590,7 @@ static ssize_t mtp_read(struct file *fp, char __user *buf,
	ssize_t r = count, xfer, len;
	int ret = 0;

	DBG(cdev, "mtp_read(%zu)\n", count);
	DBG(cdev, "mtp_read(%zu) state:%d\n", count, dev->state);

	/* we will block until we're online */
	DBG(cdev, "mtp_read: waiting for online state\n");
@@ -666,7 +666,7 @@ static ssize_t mtp_read(struct file *fp, char __user *buf,
		dev->state = STATE_READY;
	spin_unlock_irq(&dev->lock);

	DBG(cdev, "mtp_read returning %zd\n", r);
	DBG(cdev, "mtp_read returning %zd state:%d\n", r, dev->state);
	return r;
}

@@ -681,7 +681,7 @@ static ssize_t mtp_write(struct file *fp, const char __user *buf,
	int sendZLP = 0;
	int ret;

	DBG(cdev, "mtp_write(%zu)\n", count);
	DBG(cdev, "mtp_write(%zu) state:%d\n", count, dev->state);

	spin_lock_irq(&dev->lock);
	if (dev->state == STATE_CANCELED) {
@@ -720,6 +720,8 @@ static ssize_t mtp_write(struct file *fp, const char __user *buf,
			((req = mtp_req_get(dev, &dev->tx_idle))
				|| dev->state != STATE_BUSY));
		if (!req) {
			DBG(cdev, "mtp_write request NULL ret:%d state:%d\n",
				ret, dev->state);
			r = ret;
			break;
		}
@@ -758,7 +760,7 @@ static ssize_t mtp_write(struct file *fp, const char __user *buf,
		dev->state = STATE_READY;
	spin_unlock_irq(&dev->lock);

	DBG(cdev, "mtp_write returning %zd\n", r);
	DBG(cdev, "mtp_write returning %zd state:%d\n", r, dev->state);
	return r;
}

@@ -814,6 +816,9 @@ static void send_file_work(struct work_struct *data)
			break;
		}
		if (!req) {
			DBG(cdev,
				"send_file_work request NULL ret:%d state:%d\n",
				ret, dev->state);
			r = ret;
			break;
		}
@@ -866,7 +871,7 @@ static void send_file_work(struct work_struct *data)
	if (req)
		mtp_req_put(dev, &dev->tx_idle, req);

	DBG(cdev, "send_file_work returning %d\n", r);
	DBG(cdev, "send_file_work returning %d state:%d\n", r, dev->state);
	/* write the result */
	dev->xfer_result = r;
	smp_wmb();
@@ -1019,8 +1024,10 @@ static long mtp_send_receive_ioctl(struct file *fp, unsigned int code,
	struct work_struct *work;
	int ret = -EINVAL;

	if (mtp_lock(&dev->ioctl_excl))
	if (mtp_lock(&dev->ioctl_excl)) {
		DBG(dev->cdev, "ioctl returning EBUSY state:%d\n", dev->state);
		return -EBUSY;
	}

	spin_lock_irq(&dev->lock);
	if (dev->state == STATE_CANCELED) {
@@ -1086,7 +1093,7 @@ static long mtp_send_receive_ioctl(struct file *fp, unsigned int code,
	spin_unlock_irq(&dev->lock);
out:
	mtp_unlock(&dev->ioctl_excl);
	DBG(dev->cdev, "ioctl returning %d\n", ret);
	DBG(dev->cdev, "ioctl returning %d state:%d\n", ret, dev->state);
	return ret;
}

@@ -1200,8 +1207,10 @@ static long compat_mtp_ioctl(struct file *fp, unsigned int code,
static int mtp_open(struct inode *ip, struct file *fp)
{
	printk(KERN_INFO "mtp_open\n");
	if (mtp_lock(&_mtp_dev->open_excl))
	if (mtp_lock(&_mtp_dev->open_excl)) {
		pr_err("%s mtp_release not called returning EBUSY\n", __func__);
		return -EBUSY;
	}

	/* clear any error condition */
	if (_mtp_dev->state != STATE_OFFLINE)