Message ID | 20190603170545.24004-2-ajayg@nvidia.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | usb: typec: ucsi: ccg: add runtime pm support | expand |
> Changes from v3->v4: > - Further refactor master_xfer based on Wolfram's comment. Yay, looks even better. One thing to improve, though. > status = gpu_i2c_stop(i2cd); send_stop = false; > - if (status < 0) > - return status; > + if (status < 0) { > + send_stop = false; and skip it here... > + goto exit; > + } > > - return i; > -stop: > - status2 = gpu_i2c_stop(i2cd); > - if (status2 < 0) > - dev_err(i2cd->dev, "i2c stop failed %d\n", status2); > + send_stop = false; ... and here.
Hi Wolfram, > -----Original Message----- > From: Wolfram Sang <wsa@the-dreams.de> > Sent: Friday, June 7, 2019 1:33 AM > To: Ajay Gupta <ajaykuee@gmail.com> > Cc: heikki.krogerus@linux.intel.com; linux-usb@vger.kernel.org; linux- > i2c@vger.kernel.org; Ajay Gupta <ajayg@nvidia.com> > Subject: Re: [PATCH v4 1/5] i2c: nvidia-gpu: refactor master_xfer > > > Changes from v3->v4: > > - Further refactor master_xfer based on Wolfram's comment. > > Yay, looks even better. One thing to improve, though. > > > status = gpu_i2c_stop(i2cd); > > send_stop = false; > > > - if (status < 0) > > - return status; > > + if (status < 0) { > > + send_stop = false; > > and skip it here... > > > + goto exit; > > + } > > > > - return i; > > -stop: > > - status2 = gpu_i2c_stop(i2cd); > > - if (status2 < 0) > > - dev_err(i2cd->dev, "i2c stop failed %d\n", status2); > > + send_stop = false; > > ... and here. Sure, will fix. Thanks >nvpublic
diff --git a/drivers/i2c/busses/i2c-nvidia-gpu.c b/drivers/i2c/busses/i2c-nvidia-gpu.c index 1c8f708f212b..f1771beb75ea 100644 --- a/drivers/i2c/busses/i2c-nvidia-gpu.c +++ b/drivers/i2c/busses/i2c-nvidia-gpu.c @@ -169,6 +169,7 @@ static int gpu_i2c_master_xfer(struct i2c_adapter *adap, { struct gpu_i2c_dev *i2cd = i2c_get_adapdata(adap); int status, status2; + bool send_stop = true; int i, j; /* @@ -182,37 +183,42 @@ static int gpu_i2c_master_xfer(struct i2c_adapter *adap, /* gpu_i2c_read has implicit start */ status = gpu_i2c_read(i2cd, msgs[i].buf, msgs[i].len); if (status < 0) - goto stop; + goto exit; } else { u8 addr = i2c_8bit_addr_from_msg(msgs + i); status = gpu_i2c_start(i2cd); if (status < 0) { if (i == 0) - return status; - goto stop; + send_stop = false; + goto exit; } status = gpu_i2c_write(i2cd, addr); if (status < 0) - goto stop; + goto exit; for (j = 0; j < msgs[i].len; j++) { status = gpu_i2c_write(i2cd, msgs[i].buf[j]); if (status < 0) - goto stop; + goto exit; } } } status = gpu_i2c_stop(i2cd); - if (status < 0) - return status; + if (status < 0) { + send_stop = false; + goto exit; + } - return i; -stop: - status2 = gpu_i2c_stop(i2cd); - if (status2 < 0) - dev_err(i2cd->dev, "i2c stop failed %d\n", status2); + send_stop = false; + status = i; +exit: + if (send_stop) { + status2 = gpu_i2c_stop(i2cd); + if (status2 < 0) + dev_err(i2cd->dev, "i2c stop failed %d\n", status2); + } return status; }