mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 15:47:36 +00:00
platform/x86: intel_scu_ipc: Drop intel_scu_ipc_i2c_cntrl()
There are no existing users for this functionality so drop it from the driver completely. This also means we don't need to keep the struct intel_scu_ipc_pdata_t around anymore so remove that as well. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
b47018a778
commit
74e9748b9b
2 changed files with 3 additions and 90 deletions
|
@ -53,9 +53,6 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen,
|
|||
int intel_scu_ipc_raw_command(int cmd, int sub, u8 *in, int inlen,
|
||||
u32 *out, int outlen, u32 dptr, u32 sptr);
|
||||
|
||||
/* I2C control api */
|
||||
int intel_scu_ipc_i2c_cntrl(u32 addr, u32 *data);
|
||||
|
||||
/* Update FW version */
|
||||
int intel_scu_ipc_fw_update(u8 *buffer, u32 length);
|
||||
|
||||
|
|
|
@ -58,31 +58,9 @@
|
|||
#define IPC_RWBUF_SIZE 20 /* IPC Read buffer Size */
|
||||
#define IPC_IOC 0x100 /* IPC command register IOC bit */
|
||||
|
||||
#define PCI_DEVICE_ID_PENWELL 0x080e
|
||||
#define PCI_DEVICE_ID_CLOVERVIEW 0x08ea
|
||||
#define PCI_DEVICE_ID_TANGIER 0x11a0
|
||||
|
||||
/* intel scu ipc driver data */
|
||||
struct intel_scu_ipc_pdata_t {
|
||||
u32 i2c_base;
|
||||
u32 i2c_len;
|
||||
};
|
||||
|
||||
/* Penwell and Cloverview */
|
||||
static const struct intel_scu_ipc_pdata_t intel_scu_ipc_penwell_pdata = {
|
||||
.i2c_base = 0xff12b000,
|
||||
.i2c_len = 0x10,
|
||||
};
|
||||
|
||||
static const struct intel_scu_ipc_pdata_t intel_scu_ipc_tangier_pdata = {
|
||||
.i2c_base = 0xff00d000,
|
||||
.i2c_len = 0x10,
|
||||
};
|
||||
|
||||
struct intel_scu_ipc_dev {
|
||||
struct device *dev;
|
||||
void __iomem *ipc_base;
|
||||
void __iomem *i2c_base;
|
||||
struct completion cmd_complete;
|
||||
u8 irq_mode;
|
||||
};
|
||||
|
@ -101,9 +79,6 @@ static struct intel_scu_ipc_dev ipcdev; /* Only one for now */
|
|||
#define IPC_WRITE_BUFFER 0x80
|
||||
#define IPC_READ_BUFFER 0x90
|
||||
|
||||
#define IPC_I2C_CNTRL_ADDR 0
|
||||
#define I2C_DATA_ADDR 0x04
|
||||
|
||||
static DEFINE_MUTEX(ipclock); /* lock used to prevent multiple call to SCU */
|
||||
|
||||
/*
|
||||
|
@ -544,54 +519,6 @@ int intel_scu_ipc_raw_command(int cmd, int sub, u8 *in, int inlen,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(intel_scu_ipc_raw_command);
|
||||
|
||||
/* I2C commands */
|
||||
#define IPC_I2C_WRITE 1 /* I2C Write command */
|
||||
#define IPC_I2C_READ 2 /* I2C Read command */
|
||||
|
||||
/**
|
||||
* intel_scu_ipc_i2c_cntrl - I2C read/write operations
|
||||
* @addr: I2C address + command bits
|
||||
* @data: data to read/write
|
||||
*
|
||||
* Perform an an I2C read/write operation via the SCU. All locking is
|
||||
* handled for the caller. This function may sleep.
|
||||
*
|
||||
* Returns an error code or 0 on success.
|
||||
*
|
||||
* This has to be in the IPC driver for the locking.
|
||||
*/
|
||||
int intel_scu_ipc_i2c_cntrl(u32 addr, u32 *data)
|
||||
{
|
||||
struct intel_scu_ipc_dev *scu = &ipcdev;
|
||||
u32 cmd = 0;
|
||||
|
||||
mutex_lock(&ipclock);
|
||||
if (scu->dev == NULL) {
|
||||
mutex_unlock(&ipclock);
|
||||
return -ENODEV;
|
||||
}
|
||||
cmd = (addr >> 24) & 0xFF;
|
||||
if (cmd == IPC_I2C_READ) {
|
||||
writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR);
|
||||
/* Write not getting updated without delay */
|
||||
usleep_range(1000, 2000);
|
||||
*data = readl(scu->i2c_base + I2C_DATA_ADDR);
|
||||
} else if (cmd == IPC_I2C_WRITE) {
|
||||
writel(*data, scu->i2c_base + I2C_DATA_ADDR);
|
||||
usleep_range(1000, 2000);
|
||||
writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR);
|
||||
} else {
|
||||
dev_err(scu->dev,
|
||||
"intel_scu_ipc: I2C INVALID_CMD = 0x%x\n", cmd);
|
||||
|
||||
mutex_unlock(&ipclock);
|
||||
return -EIO;
|
||||
}
|
||||
mutex_unlock(&ipclock);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(intel_scu_ipc_i2c_cntrl);
|
||||
|
||||
/*
|
||||
* Interrupt handler gets called when ioc bit of IPC_COMMAND_REG set to 1
|
||||
* When ioc bit is set to 1, caller api must wait for interrupt handler called
|
||||
|
@ -622,15 +549,10 @@ static int ipc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
{
|
||||
int err;
|
||||
struct intel_scu_ipc_dev *scu = &ipcdev;
|
||||
struct intel_scu_ipc_pdata_t *pdata;
|
||||
|
||||
if (scu->dev) /* We support only one SCU */
|
||||
return -EBUSY;
|
||||
|
||||
pdata = (struct intel_scu_ipc_pdata_t *)id->driver_data;
|
||||
if (!pdata)
|
||||
return -ENODEV;
|
||||
|
||||
err = pcim_enable_device(pdev);
|
||||
if (err)
|
||||
return err;
|
||||
|
@ -643,10 +565,6 @@ static int ipc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
|
||||
scu->ipc_base = pcim_iomap_table(pdev)[0];
|
||||
|
||||
scu->i2c_base = ioremap_nocache(pdata->i2c_base, pdata->i2c_len);
|
||||
if (!scu->i2c_base)
|
||||
return -ENOMEM;
|
||||
|
||||
err = devm_request_irq(&pdev->dev, pdev->irq, ioc, 0, "intel_scu_ipc",
|
||||
scu);
|
||||
if (err)
|
||||
|
@ -661,12 +579,10 @@ static int ipc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define SCU_DEVICE(id, pdata) {PCI_VDEVICE(INTEL, id), (kernel_ulong_t)&pdata}
|
||||
|
||||
static const struct pci_device_id pci_ids[] = {
|
||||
SCU_DEVICE(PCI_DEVICE_ID_PENWELL, intel_scu_ipc_penwell_pdata),
|
||||
SCU_DEVICE(PCI_DEVICE_ID_CLOVERVIEW, intel_scu_ipc_penwell_pdata),
|
||||
SCU_DEVICE(PCI_DEVICE_ID_TANGIER, intel_scu_ipc_tangier_pdata),
|
||||
{ PCI_VDEVICE(INTEL, 0x080e) },
|
||||
{ PCI_VDEVICE(INTEL, 0x08ea) },
|
||||
{ PCI_VDEVICE(INTEL, 0x11a0) },
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue