Commit 4181bc8f authored by Mika Westerberg's avatar Mika Westerberg Committed by Lee Jones

mfd: intel_soc_pmic_bxtwc: Convert to use new SCU IPC API

Convert the Intel Broxton Whiskey Cover PMIC driver to use the new SCU
IPC API. This allows us to get rid of the PMC IPC implementation which
is now covered in SCU IPC driver. We drop the error log if the IPC
command fails because intel_scu_ipc_dev_command() does that already.

Also move PMIC specific IPC message constants to the PMIC driver from
the intel_pmc_ipc.h header.
Signed-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent e7d3c33c
...@@ -3,9 +3,6 @@ ...@@ -3,9 +3,6 @@
#define _ASM_X86_INTEL_PMC_IPC_H_ #define _ASM_X86_INTEL_PMC_IPC_H_
/* Commands */ /* Commands */
#define PMC_IPC_PMIC_ACCESS 0xFF
#define PMC_IPC_PMIC_ACCESS_READ 0x0
#define PMC_IPC_PMIC_ACCESS_WRITE 0x1
#define PMC_IPC_USB_PWR_CTRL 0xF0 #define PMC_IPC_USB_PWR_CTRL 0xF0
#define PMC_IPC_PMIC_BLACKLIST_SEL 0xEF #define PMC_IPC_PMIC_BLACKLIST_SEL 0xEF
#define PMC_IPC_PHY_CONFIG 0xEE #define PMC_IPC_PHY_CONFIG 0xEE
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include <linux/mfd/intel_soc_pmic_bxtwc.h> #include <linux/mfd/intel_soc_pmic_bxtwc.h>
#include <linux/module.h> #include <linux/module.h>
#include <asm/intel_pmc_ipc.h> #include <asm/intel_scu_ipc.h>
/* PMIC device registers */ /* PMIC device registers */
#define REG_ADDR_MASK 0xFF00 #define REG_ADDR_MASK 0xFF00
...@@ -58,6 +58,10 @@ ...@@ -58,6 +58,10 @@
/* Whiskey Cove PMIC share same ACPI ID between different platforms */ /* Whiskey Cove PMIC share same ACPI ID between different platforms */
#define BROXTON_PMIC_WC_HRV 4 #define BROXTON_PMIC_WC_HRV 4
#define PMC_PMIC_ACCESS 0xFF
#define PMC_PMIC_READ 0x0
#define PMC_PMIC_WRITE 0x1
enum bxtwc_irqs { enum bxtwc_irqs {
BXTWC_PWRBTN_LVL1_IRQ = 0, BXTWC_PWRBTN_LVL1_IRQ = 0,
BXTWC_TMU_LVL1_IRQ, BXTWC_TMU_LVL1_IRQ,
...@@ -288,13 +292,12 @@ static int regmap_ipc_byte_reg_read(void *context, unsigned int reg, ...@@ -288,13 +292,12 @@ static int regmap_ipc_byte_reg_read(void *context, unsigned int reg,
ipc_in[0] = reg; ipc_in[0] = reg;
ipc_in[1] = i2c_addr; ipc_in[1] = i2c_addr;
ret = intel_pmc_ipc_command(PMC_IPC_PMIC_ACCESS, ret = intel_scu_ipc_dev_command(pmic->scu, PMC_PMIC_ACCESS,
PMC_IPC_PMIC_ACCESS_READ, PMC_PMIC_READ, ipc_in, sizeof(ipc_in),
ipc_in, sizeof(ipc_in), (u32 *)ipc_out, 1); ipc_out, sizeof(ipc_out));
if (ret) { if (ret)
dev_err(pmic->dev, "Failed to read from PMIC\n");
return ret; return ret;
}
*val = ipc_out[0]; *val = ipc_out[0];
return 0; return 0;
...@@ -303,7 +306,6 @@ static int regmap_ipc_byte_reg_read(void *context, unsigned int reg, ...@@ -303,7 +306,6 @@ static int regmap_ipc_byte_reg_read(void *context, unsigned int reg,
static int regmap_ipc_byte_reg_write(void *context, unsigned int reg, static int regmap_ipc_byte_reg_write(void *context, unsigned int reg,
unsigned int val) unsigned int val)
{ {
int ret;
int i2c_addr; int i2c_addr;
u8 ipc_in[3]; u8 ipc_in[3];
struct intel_soc_pmic *pmic = context; struct intel_soc_pmic *pmic = context;
...@@ -321,15 +323,9 @@ static int regmap_ipc_byte_reg_write(void *context, unsigned int reg, ...@@ -321,15 +323,9 @@ static int regmap_ipc_byte_reg_write(void *context, unsigned int reg,
ipc_in[0] = reg; ipc_in[0] = reg;
ipc_in[1] = i2c_addr; ipc_in[1] = i2c_addr;
ipc_in[2] = val; ipc_in[2] = val;
ret = intel_pmc_ipc_command(PMC_IPC_PMIC_ACCESS, return intel_scu_ipc_dev_command(pmic->scu, PMC_PMIC_ACCESS,
PMC_IPC_PMIC_ACCESS_WRITE, PMC_PMIC_WRITE, ipc_in, sizeof(ipc_in),
ipc_in, sizeof(ipc_in), NULL, 0); NULL, 0);
if (ret) {
dev_err(pmic->dev, "Failed to write to PMIC\n");
return ret;
}
return 0;
} }
/* sysfs interfaces to r/w PMIC registers, required by initial script */ /* sysfs interfaces to r/w PMIC registers, required by initial script */
...@@ -457,6 +453,10 @@ static int bxtwc_probe(struct platform_device *pdev) ...@@ -457,6 +453,10 @@ static int bxtwc_probe(struct platform_device *pdev)
dev_set_drvdata(&pdev->dev, pmic); dev_set_drvdata(&pdev->dev, pmic);
pmic->dev = &pdev->dev; pmic->dev = &pdev->dev;
pmic->scu = devm_intel_scu_ipc_dev_get(&pdev->dev);
if (!pmic->scu)
return -EPROBE_DEFER;
pmic->regmap = devm_regmap_init(&pdev->dev, NULL, pmic, pmic->regmap = devm_regmap_init(&pdev->dev, NULL, pmic,
&bxtwc_regmap_config); &bxtwc_regmap_config);
if (IS_ERR(pmic->regmap)) { if (IS_ERR(pmic->regmap)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment