lkml.org 
[lkml]   [2022]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 006/132] i2c: piix4: Move port I/O region request/release code into functions
    Date
    From: Terry Bowman <terry.bowman@amd.com>

    commit a3325d225b00889f4b7fdb25d83033cae1048a92 upstream.

    Move duplicated region request and release code into a function. Move is
    in preparation for following MMIO changes.

    Signed-off-by: Terry Bowman <terry.bowman@amd.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Reviewed-by: Jean Delvare <jdelvare@suse.de>
    [wsa: added missing curly brace]
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Cc: Mario Limonciello <Mario.Limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/i2c/busses/i2c-piix4.c | 48 ++++++++++++++++++++++++++---------------
    1 file changed, 31 insertions(+), 17 deletions(-)

    --- a/drivers/i2c/busses/i2c-piix4.c
    +++ b/drivers/i2c/busses/i2c-piix4.c
    @@ -165,6 +165,24 @@ struct i2c_piix4_adapdata {
    u8 port; /* Port number, shifted */
    };

    +static int piix4_sb800_region_request(struct device *dev)
    +{
    + if (!request_muxed_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE,
    + "sb800_piix4_smb")) {
    + dev_err(dev,
    + "SMBus base address index region 0x%x already in use.\n",
    + SB800_PIIX4_SMB_IDX);
    + return -EBUSY;
    + }
    +
    + return 0;
    +}
    +
    +static void piix4_sb800_region_release(struct device *dev)
    +{
    + release_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE);
    +}
    +
    static int piix4_setup(struct pci_dev *PIIX4_dev,
    const struct pci_device_id *id)
    {
    @@ -270,6 +288,7 @@ static int piix4_setup_sb800(struct pci_
    unsigned short piix4_smba;
    u8 smba_en_lo, smba_en_hi, smb_en, smb_en_status, port_sel;
    u8 i2ccfg, i2ccfg_offset = 0x10;
    + int retval;

    /* SB800 and later SMBus does not support forcing address */
    if (force || force_addr) {
    @@ -291,20 +310,16 @@ static int piix4_setup_sb800(struct pci_
    else
    smb_en = (aux) ? 0x28 : 0x2c;

    - if (!request_muxed_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE,
    - "sb800_piix4_smb")) {
    - dev_err(&PIIX4_dev->dev,
    - "SMB base address index region 0x%x already in use.\n",
    - SB800_PIIX4_SMB_IDX);
    - return -EBUSY;
    - }
    + retval = piix4_sb800_region_request(&PIIX4_dev->dev);
    + if (retval)
    + return retval;

    outb_p(smb_en, SB800_PIIX4_SMB_IDX);
    smba_en_lo = inb_p(SB800_PIIX4_SMB_IDX + 1);
    outb_p(smb_en + 1, SB800_PIIX4_SMB_IDX);
    smba_en_hi = inb_p(SB800_PIIX4_SMB_IDX + 1);

    - release_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE);
    + piix4_sb800_region_release(&PIIX4_dev->dev);

    if (!smb_en) {
    smb_en_status = smba_en_lo & 0x10;
    @@ -373,11 +388,10 @@ static int piix4_setup_sb800(struct pci_
    piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT;
    }
    } else {
    - if (!request_muxed_region(SB800_PIIX4_SMB_IDX,
    - SB800_PIIX4_SMB_MAP_SIZE,
    - "sb800_piix4_smb")) {
    + retval = piix4_sb800_region_request(&PIIX4_dev->dev);
    + if (retval) {
    release_region(piix4_smba, SMBIOSIZE);
    - return -EBUSY;
    + return retval;
    }

    outb_p(SB800_PIIX4_PORT_IDX_SEL, SB800_PIIX4_SMB_IDX);
    @@ -387,7 +401,7 @@ static int piix4_setup_sb800(struct pci_
    SB800_PIIX4_PORT_IDX;
    piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK;
    piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT;
    - release_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE);
    + piix4_sb800_region_release(&PIIX4_dev->dev);
    }

    dev_info(&PIIX4_dev->dev,
    @@ -685,9 +699,9 @@ static s32 piix4_access_sb800(struct i2c
    u8 port;
    int retval;

    - if (!request_muxed_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE,
    - "sb800_piix4_smb"))
    - return -EBUSY;
    + retval = piix4_sb800_region_request(&adap->dev);
    + if (retval)
    + return retval;

    /* Request the SMBUS semaphore, avoid conflicts with the IMC */
    smbslvcnt = inb_p(SMBSLVCNT);
    @@ -762,7 +776,7 @@ static s32 piix4_access_sb800(struct i2c
    piix4_imc_wakeup();

    release:
    - release_region(SB800_PIIX4_SMB_IDX, SB800_PIIX4_SMB_MAP_SIZE);
    + piix4_sb800_region_release(&adap->dev);
    return retval;
    }


    \
     
     \ /
      Last update: 2022-05-23 19:33    [W:3.693 / U:1.788 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site