lkml.org 
[lkml]   [2016]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/16] drivers/fsi: Set up links for slave communication
    Date
    From: Chris Bostic <cbostic@us.ibm.com>

    Enable each link and send a break command in preparation
    for scanning each link for slaves.

    Signed-off-by: Chris Bostic <cbostic@us.ibm.com>
    ---
    drivers/fsi/fsi-core.c | 39 ++++++++++++++++++++++++++++++++++++---
    drivers/fsi/fsi-master.h | 2 ++
    2 files changed, 38 insertions(+), 3 deletions(-)

    diff --git a/drivers/fsi/fsi-core.c b/drivers/fsi/fsi-core.c
    index 80feeb8..93de0f1 100644
    --- a/drivers/fsi/fsi-core.c
    +++ b/drivers/fsi/fsi-core.c
    @@ -290,16 +290,49 @@ static int fsi_slave_init(struct fsi_master *master,

    /* FSI master support */

    +static int fsi_master_link_enable(struct fsi_master *master, int link)
    +{
    + if (master->link_enable)
    + return master->link_enable(master, link);
    +
    + return 0;
    +}
    +
    +/*
    + * Issue a break command on this link
    + */
    +static int fsi_master_break(struct fsi_master *master, int link)
    +{
    + if (master->send_break)
    + return master->send_break(master, link);
    +
    + return 0;
    +}
    +
    static int fsi_master_scan(struct fsi_master *master)
    {
    - int link, slave_id;
    + int link, slave_id, rc;
    +
    + for (link = 0; link < master->n_links; link++) {
    + rc = fsi_master_link_enable(master, link);
    + if (rc) {
    + dev_dbg(master->dev,
    + "enable link:%d failed with:%d\n", link, rc);
    + continue;
    + }
    + rc = fsi_master_break(master, link);
    + if (rc) {
    + dev_dbg(master->dev,
    + "Break to link:%d failed with:%d\n", link, rc);
    + continue;
    + }

    - for (link = 0; link < master->n_links; link++)
    for (slave_id = 0; slave_id < FSI_N_SLAVES; slave_id++)
    fsi_slave_init(master, link, slave_id);

    - return 0;
    + }

    + return 0;
    }

    int fsi_master_register(struct fsi_master *master)
    diff --git a/drivers/fsi/fsi-master.h b/drivers/fsi/fsi-master.h
    index cafb433..56aad0e 100644
    --- a/drivers/fsi/fsi-master.h
    +++ b/drivers/fsi/fsi-master.h
    @@ -29,6 +29,8 @@ struct fsi_master {
    int (*write)(struct fsi_master *, int link,
    uint8_t slave, uint32_t addr,
    const void *val, size_t size);
    + int (*send_break)(struct fsi_master *, int link);
    + int (*link_enable)(struct fsi_master *, int link);
    };

    extern int fsi_master_register(struct fsi_master *master);
    --
    1.8.2.2
    \
     
     \ /
      Last update: 2016-12-07 03:10    [W:2.195 / U:0.600 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site