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:
committed by
Andy Shevchenko
parent
b47018a778
commit
74e9748b9b
@@ -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,
|
int intel_scu_ipc_raw_command(int cmd, int sub, u8 *in, int inlen,
|
||||||
u32 *out, int outlen, u32 dptr, u32 sptr);
|
u32 *out, int outlen, u32 dptr, u32 sptr);
|
||||||
|
|
||||||
/* I2C control api */
|
|
||||||
int intel_scu_ipc_i2c_cntrl(u32 addr, u32 *data);
|
|
||||||
|
|
||||||
/* Update FW version */
|
/* Update FW version */
|
||||||
int intel_scu_ipc_fw_update(u8 *buffer, u32 length);
|
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_RWBUF_SIZE 20 /* IPC Read buffer Size */
|
||||||
#define IPC_IOC 0x100 /* IPC command register IOC bit */
|
#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 intel_scu_ipc_dev {
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
void __iomem *ipc_base;
|
void __iomem *ipc_base;
|
||||||
void __iomem *i2c_base;
|
|
||||||
struct completion cmd_complete;
|
struct completion cmd_complete;
|
||||||
u8 irq_mode;
|
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_WRITE_BUFFER 0x80
|
||||||
#define IPC_READ_BUFFER 0x90
|
#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 */
|
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);
|
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
|
* 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
|
* 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;
|
int err;
|
||||||
struct intel_scu_ipc_dev *scu = &ipcdev;
|
struct intel_scu_ipc_dev *scu = &ipcdev;
|
||||||
struct intel_scu_ipc_pdata_t *pdata;
|
|
||||||
|
|
||||||
if (scu->dev) /* We support only one SCU */
|
if (scu->dev) /* We support only one SCU */
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
pdata = (struct intel_scu_ipc_pdata_t *)id->driver_data;
|
|
||||||
if (!pdata)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
err = pcim_enable_device(pdev);
|
err = pcim_enable_device(pdev);
|
||||||
if (err)
|
if (err)
|
||||||
return 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->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",
|
err = devm_request_irq(&pdev->dev, pdev->irq, ioc, 0, "intel_scu_ipc",
|
||||||
scu);
|
scu);
|
||||||
if (err)
|
if (err)
|
||||||
@@ -661,12 +579,10 @@ static int ipc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SCU_DEVICE(id, pdata) {PCI_VDEVICE(INTEL, id), (kernel_ulong_t)&pdata}
|
|
||||||
|
|
||||||
static const struct pci_device_id pci_ids[] = {
|
static const struct pci_device_id pci_ids[] = {
|
||||||
SCU_DEVICE(PCI_DEVICE_ID_PENWELL, intel_scu_ipc_penwell_pdata),
|
{ PCI_VDEVICE(INTEL, 0x080e) },
|
||||||
SCU_DEVICE(PCI_DEVICE_ID_CLOVERVIEW, intel_scu_ipc_penwell_pdata),
|
{ PCI_VDEVICE(INTEL, 0x08ea) },
|
||||||
SCU_DEVICE(PCI_DEVICE_ID_TANGIER, intel_scu_ipc_tangier_pdata),
|
{ PCI_VDEVICE(INTEL, 0x11a0) },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user