lkml.org 
[lkml]   [2018]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.9 166/190] platform/chrome: Use proper protocol transfer function
    Date
    From: Shawn Nematbakhsh <shawnn@chromium.org>

    [ Upstream commit d48b8c58c57f6edbe2965f0a5f62c5cf9593ca96 ]

    pkt_xfer should be used for protocol v3, and cmd_xfer otherwise. We had
    one instance of these functions correct, but not the second, fall-back
    case. We use the fall-back only when the first command returns an
    IN_PROGRESS status, which is only used on some EC firmwares where we
    don't want to constantly poll the bus, but instead back off and
    sleep/retry for a little while.

    Fixes: 2c7589af3c4d ("mfd: cros_ec: add proto v3 skeleton")
    Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org>
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
    Signed-off-by: Benson Leung <bleung@chromium.org>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/platform/chrome/cros_ec_proto.c | 8 +++++---
    1 file changed, 5 insertions(+), 3 deletions(-)

    diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
    index 04053fe1e980..cfa3e850c49f 100644
    --- a/drivers/platform/chrome/cros_ec_proto.c
    +++ b/drivers/platform/chrome/cros_ec_proto.c
    @@ -60,12 +60,14 @@ static int send_command(struct cros_ec_device *ec_dev,
    struct cros_ec_command *msg)
    {
    int ret;
    + int (*xfer_fxn)(struct cros_ec_device *ec, struct cros_ec_command *msg);

    if (ec_dev->proto_version > 2)
    - ret = ec_dev->pkt_xfer(ec_dev, msg);
    + xfer_fxn = ec_dev->pkt_xfer;
    else
    - ret = ec_dev->cmd_xfer(ec_dev, msg);
    + xfer_fxn = ec_dev->cmd_xfer;

    + ret = (*xfer_fxn)(ec_dev, msg);
    if (msg->result == EC_RES_IN_PROGRESS) {
    int i;
    struct cros_ec_command *status_msg;
    @@ -88,7 +90,7 @@ static int send_command(struct cros_ec_device *ec_dev,
    for (i = 0; i < EC_COMMAND_RETRIES; i++) {
    usleep_range(10000, 11000);

    - ret = ec_dev->cmd_xfer(ec_dev, status_msg);
    + ret = (*xfer_fxn)(ec_dev, status_msg);
    if (ret < 0)
    break;

    --
    2.14.1
    \
     
     \ /
      Last update: 2018-03-08 06:53    [W:4.042 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site