2018-08-30 16:52:54 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
2014-06-03 05:26:03 +00:00
|
|
|
/*
|
2018-08-30 16:52:54 +00:00
|
|
|
* Device access for Crystal Cove PMIC
|
2014-06-03 05:26:03 +00:00
|
|
|
*
|
2022-08-01 11:42:11 +00:00
|
|
|
* Copyright (C) 2012-2014, 2022 Intel Corporation. All rights reserved.
|
2014-06-03 05:26:03 +00:00
|
|
|
*
|
|
|
|
* Author: Yang, Bin <bin.yang@intel.com>
|
|
|
|
* Author: Zhu, Lejun <lejun.zhu@linux.intel.com>
|
|
|
|
*/
|
|
|
|
|
2022-08-01 11:42:03 +00:00
|
|
|
#include <linux/i2c.h>
|
2014-06-03 05:26:03 +00:00
|
|
|
#include <linux/interrupt.h>
|
2022-08-01 11:42:08 +00:00
|
|
|
#include <linux/mod_devicetable.h>
|
2022-08-01 11:42:03 +00:00
|
|
|
#include <linux/module.h>
|
2018-08-30 16:52:53 +00:00
|
|
|
#include <linux/mfd/core.h>
|
2014-06-03 05:26:03 +00:00
|
|
|
#include <linux/mfd/intel_soc_pmic.h>
|
2022-08-01 11:42:03 +00:00
|
|
|
#include <linux/platform_data/x86/soc.h>
|
|
|
|
#include <linux/pwm.h>
|
|
|
|
#include <linux/regmap.h>
|
2014-06-03 05:26:03 +00:00
|
|
|
|
|
|
|
#define CRYSTAL_COVE_MAX_REGISTER 0xC6
|
|
|
|
|
|
|
|
#define CRYSTAL_COVE_REG_IRQLVL1 0x02
|
|
|
|
#define CRYSTAL_COVE_REG_MIRQLVL1 0x0E
|
|
|
|
|
|
|
|
#define CRYSTAL_COVE_IRQ_PWRSRC 0
|
|
|
|
#define CRYSTAL_COVE_IRQ_THRM 1
|
|
|
|
#define CRYSTAL_COVE_IRQ_BCU 2
|
|
|
|
#define CRYSTAL_COVE_IRQ_ADC 3
|
|
|
|
#define CRYSTAL_COVE_IRQ_CHGR 4
|
|
|
|
#define CRYSTAL_COVE_IRQ_GPIO 5
|
|
|
|
#define CRYSTAL_COVE_IRQ_VHDMIOCP 6
|
|
|
|
|
2020-09-22 19:26:53 +00:00
|
|
|
static const struct resource pwrsrc_resources[] = {
|
2018-08-30 16:52:50 +00:00
|
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_PWRSRC, "PWRSRC"),
|
2014-06-03 05:26:03 +00:00
|
|
|
};
|
|
|
|
|
2020-09-22 19:26:53 +00:00
|
|
|
static const struct resource thermal_resources[] = {
|
2018-08-30 16:52:50 +00:00
|
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_THRM, "THERMAL"),
|
2014-06-03 05:26:03 +00:00
|
|
|
};
|
|
|
|
|
2020-09-22 19:26:53 +00:00
|
|
|
static const struct resource bcu_resources[] = {
|
2018-08-30 16:52:50 +00:00
|
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_BCU, "BCU"),
|
2014-06-03 05:26:03 +00:00
|
|
|
};
|
|
|
|
|
2021-12-25 11:55:06 +00:00
|
|
|
static const struct resource adc_resources[] = {
|
|
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_ADC, "ADC"),
|
|
|
|
};
|
|
|
|
|
2021-12-25 11:55:07 +00:00
|
|
|
static const struct resource charger_resources[] = {
|
|
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_CHGR, "CHGR"),
|
|
|
|
};
|
|
|
|
|
2021-12-25 11:55:06 +00:00
|
|
|
static const struct resource gpio_resources[] = {
|
|
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_GPIO, "GPIO"),
|
|
|
|
};
|
|
|
|
|
mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT
Both Bay and Cherry Trail devices may be used together with a Crystal Cove
PMIC. Each platform has its own variant of the PMIC, which both use the
same ACPI HID, but they are not 100% compatible.
Looking at the android x86 kernel sources where most of the Crystal Cove
code comes from, it talks about "Valley View", "Bay Trail" and / or BYT
without ever mentioning Cherry Trail, with the exception of the regulator
driver. The Asus Zenfone-2 kernel code has 2 regulator drivers, one
for Crystal Cove and one for what it calls Crystal Cove Plus. The
Crystal Cove Plus regulator driver is the only one to mention Cherry
Trail and that driver uses different register addresses then the
normal (Bay Trail) Crystal Cove regulator driver, showing that at
least the regulator register addresses are different.
The GPIO code should work on both, and the PWM code is known to work on
both and is necessary for backlight control on some Cherry Trail devices.
Testing has shown that the ACPI OpRegion code otoh is causing problems
on Cherry Trail devices, which is not surprising as it deals with the
regulators and those have different register addresses on CHT.
Specifically the ACPI OpRegion code causes the external microsd slot on
a Dell Venue 8 5855 (Cherry Trail version) to not work and the eMMC to
become unreliable and throw lots of errors.
This commit replaces the single mfd_cell array currently used for Crystal
Cove with 2 separate arrays, one for the Bay Trail variant and one for
the Cherry Trail variant, note that the Cherry Trail version of the array
only contains gpio and pwm cells. The PMIC OpRegion cell is deliberately
not included and drivers for the other cells in the Bay Trail cell array
were never upstreamed.
Fixes: 7cf0a66f32 ("mfd: intel_soc_pmic: Crystal Cove support")
Reported-and-tested-by: russianneuromancer <russianneuromancer@ya.ru>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
2017-09-04 13:22:41 +00:00
|
|
|
static struct mfd_cell crystal_cove_byt_dev[] = {
|
2014-06-03 05:26:03 +00:00
|
|
|
{
|
|
|
|
.name = "crystal_cove_pwrsrc",
|
|
|
|
.num_resources = ARRAY_SIZE(pwrsrc_resources),
|
|
|
|
.resources = pwrsrc_resources,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "crystal_cove_thermal",
|
|
|
|
.num_resources = ARRAY_SIZE(thermal_resources),
|
|
|
|
.resources = thermal_resources,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "crystal_cove_bcu",
|
|
|
|
.num_resources = ARRAY_SIZE(bcu_resources),
|
|
|
|
.resources = bcu_resources,
|
|
|
|
},
|
2021-12-25 11:55:06 +00:00
|
|
|
{
|
|
|
|
.name = "crystal_cove_adc",
|
|
|
|
.num_resources = ARRAY_SIZE(adc_resources),
|
|
|
|
.resources = adc_resources,
|
|
|
|
},
|
2021-12-25 11:55:07 +00:00
|
|
|
{
|
|
|
|
.name = "crystal_cove_charger",
|
|
|
|
.num_resources = ARRAY_SIZE(charger_resources),
|
|
|
|
.resources = charger_resources,
|
|
|
|
},
|
2014-06-03 05:26:03 +00:00
|
|
|
{
|
|
|
|
.name = "crystal_cove_gpio",
|
|
|
|
.num_resources = ARRAY_SIZE(gpio_resources),
|
|
|
|
.resources = gpio_resources,
|
|
|
|
},
|
2014-11-24 09:21:54 +00:00
|
|
|
{
|
2019-10-24 21:38:25 +00:00
|
|
|
.name = "byt_crystal_cove_pmic",
|
2014-11-24 09:21:54 +00:00
|
|
|
},
|
2015-06-26 09:02:06 +00:00
|
|
|
{
|
|
|
|
.name = "crystal_cove_pwm",
|
|
|
|
},
|
2014-06-03 05:26:03 +00:00
|
|
|
};
|
|
|
|
|
mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT
Both Bay and Cherry Trail devices may be used together with a Crystal Cove
PMIC. Each platform has its own variant of the PMIC, which both use the
same ACPI HID, but they are not 100% compatible.
Looking at the android x86 kernel sources where most of the Crystal Cove
code comes from, it talks about "Valley View", "Bay Trail" and / or BYT
without ever mentioning Cherry Trail, with the exception of the regulator
driver. The Asus Zenfone-2 kernel code has 2 regulator drivers, one
for Crystal Cove and one for what it calls Crystal Cove Plus. The
Crystal Cove Plus regulator driver is the only one to mention Cherry
Trail and that driver uses different register addresses then the
normal (Bay Trail) Crystal Cove regulator driver, showing that at
least the regulator register addresses are different.
The GPIO code should work on both, and the PWM code is known to work on
both and is necessary for backlight control on some Cherry Trail devices.
Testing has shown that the ACPI OpRegion code otoh is causing problems
on Cherry Trail devices, which is not surprising as it deals with the
regulators and those have different register addresses on CHT.
Specifically the ACPI OpRegion code causes the external microsd slot on
a Dell Venue 8 5855 (Cherry Trail version) to not work and the eMMC to
become unreliable and throw lots of errors.
This commit replaces the single mfd_cell array currently used for Crystal
Cove with 2 separate arrays, one for the Bay Trail variant and one for
the Cherry Trail variant, note that the Cherry Trail version of the array
only contains gpio and pwm cells. The PMIC OpRegion cell is deliberately
not included and drivers for the other cells in the Bay Trail cell array
were never upstreamed.
Fixes: 7cf0a66f32 ("mfd: intel_soc_pmic: Crystal Cove support")
Reported-and-tested-by: russianneuromancer <russianneuromancer@ya.ru>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
2017-09-04 13:22:41 +00:00
|
|
|
static struct mfd_cell crystal_cove_cht_dev[] = {
|
|
|
|
{
|
|
|
|
.name = "crystal_cove_gpio",
|
|
|
|
.num_resources = ARRAY_SIZE(gpio_resources),
|
|
|
|
.resources = gpio_resources,
|
|
|
|
},
|
2019-10-24 21:38:27 +00:00
|
|
|
{
|
|
|
|
.name = "cht_crystal_cove_pmic",
|
|
|
|
},
|
mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT
Both Bay and Cherry Trail devices may be used together with a Crystal Cove
PMIC. Each platform has its own variant of the PMIC, which both use the
same ACPI HID, but they are not 100% compatible.
Looking at the android x86 kernel sources where most of the Crystal Cove
code comes from, it talks about "Valley View", "Bay Trail" and / or BYT
without ever mentioning Cherry Trail, with the exception of the regulator
driver. The Asus Zenfone-2 kernel code has 2 regulator drivers, one
for Crystal Cove and one for what it calls Crystal Cove Plus. The
Crystal Cove Plus regulator driver is the only one to mention Cherry
Trail and that driver uses different register addresses then the
normal (Bay Trail) Crystal Cove regulator driver, showing that at
least the regulator register addresses are different.
The GPIO code should work on both, and the PWM code is known to work on
both and is necessary for backlight control on some Cherry Trail devices.
Testing has shown that the ACPI OpRegion code otoh is causing problems
on Cherry Trail devices, which is not surprising as it deals with the
regulators and those have different register addresses on CHT.
Specifically the ACPI OpRegion code causes the external microsd slot on
a Dell Venue 8 5855 (Cherry Trail version) to not work and the eMMC to
become unreliable and throw lots of errors.
This commit replaces the single mfd_cell array currently used for Crystal
Cove with 2 separate arrays, one for the Bay Trail variant and one for
the Cherry Trail variant, note that the Cherry Trail version of the array
only contains gpio and pwm cells. The PMIC OpRegion cell is deliberately
not included and drivers for the other cells in the Bay Trail cell array
were never upstreamed.
Fixes: 7cf0a66f32 ("mfd: intel_soc_pmic: Crystal Cove support")
Reported-and-tested-by: russianneuromancer <russianneuromancer@ya.ru>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
2017-09-04 13:22:41 +00:00
|
|
|
{
|
|
|
|
.name = "crystal_cove_pwm",
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2015-01-05 09:01:22 +00:00
|
|
|
static const struct regmap_config crystal_cove_regmap_config = {
|
2014-06-03 05:26:03 +00:00
|
|
|
.reg_bits = 8,
|
|
|
|
.val_bits = 8,
|
|
|
|
|
|
|
|
.max_register = CRYSTAL_COVE_MAX_REGISTER,
|
|
|
|
.cache_type = REGCACHE_NONE,
|
|
|
|
};
|
|
|
|
|
|
|
|
static const struct regmap_irq crystal_cove_irqs[] = {
|
2018-08-30 16:52:51 +00:00
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_PWRSRC, 0, BIT(CRYSTAL_COVE_IRQ_PWRSRC)),
|
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_THRM, 0, BIT(CRYSTAL_COVE_IRQ_THRM)),
|
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_BCU, 0, BIT(CRYSTAL_COVE_IRQ_BCU)),
|
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_ADC, 0, BIT(CRYSTAL_COVE_IRQ_ADC)),
|
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_CHGR, 0, BIT(CRYSTAL_COVE_IRQ_CHGR)),
|
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_GPIO, 0, BIT(CRYSTAL_COVE_IRQ_GPIO)),
|
|
|
|
REGMAP_IRQ_REG(CRYSTAL_COVE_IRQ_VHDMIOCP, 0, BIT(CRYSTAL_COVE_IRQ_VHDMIOCP)),
|
2014-06-03 05:26:03 +00:00
|
|
|
};
|
|
|
|
|
2015-04-27 12:54:13 +00:00
|
|
|
static const struct regmap_irq_chip crystal_cove_irq_chip = {
|
2014-06-03 05:26:03 +00:00
|
|
|
.name = "Crystal Cove",
|
|
|
|
.irqs = crystal_cove_irqs,
|
|
|
|
.num_irqs = ARRAY_SIZE(crystal_cove_irqs),
|
|
|
|
.num_regs = 1,
|
|
|
|
.status_base = CRYSTAL_COVE_REG_IRQLVL1,
|
|
|
|
.mask_base = CRYSTAL_COVE_REG_MIRQLVL1,
|
|
|
|
};
|
|
|
|
|
2022-08-01 11:42:03 +00:00
|
|
|
/* PWM consumed by the Intel GFX */
|
|
|
|
static struct pwm_lookup crc_pwm_lookup[] = {
|
|
|
|
PWM_LOOKUP("crystal_cove_pwm", 0, "0000:00:02.0", "pwm_pmic_backlight", 0, PWM_POLARITY_NORMAL),
|
|
|
|
};
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
struct crystal_cove_config {
|
2022-08-01 11:42:03 +00:00
|
|
|
unsigned long irq_flags;
|
|
|
|
struct mfd_cell *cell_dev;
|
|
|
|
int n_cell_devs;
|
|
|
|
const struct regmap_config *regmap_config;
|
|
|
|
const struct regmap_irq_chip *irq_chip;
|
|
|
|
};
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static const struct crystal_cove_config crystal_cove_config_byt_crc = {
|
mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT
Both Bay and Cherry Trail devices may be used together with a Crystal Cove
PMIC. Each platform has its own variant of the PMIC, which both use the
same ACPI HID, but they are not 100% compatible.
Looking at the android x86 kernel sources where most of the Crystal Cove
code comes from, it talks about "Valley View", "Bay Trail" and / or BYT
without ever mentioning Cherry Trail, with the exception of the regulator
driver. The Asus Zenfone-2 kernel code has 2 regulator drivers, one
for Crystal Cove and one for what it calls Crystal Cove Plus. The
Crystal Cove Plus regulator driver is the only one to mention Cherry
Trail and that driver uses different register addresses then the
normal (Bay Trail) Crystal Cove regulator driver, showing that at
least the regulator register addresses are different.
The GPIO code should work on both, and the PWM code is known to work on
both and is necessary for backlight control on some Cherry Trail devices.
Testing has shown that the ACPI OpRegion code otoh is causing problems
on Cherry Trail devices, which is not surprising as it deals with the
regulators and those have different register addresses on CHT.
Specifically the ACPI OpRegion code causes the external microsd slot on
a Dell Venue 8 5855 (Cherry Trail version) to not work and the eMMC to
become unreliable and throw lots of errors.
This commit replaces the single mfd_cell array currently used for Crystal
Cove with 2 separate arrays, one for the Bay Trail variant and one for
the Cherry Trail variant, note that the Cherry Trail version of the array
only contains gpio and pwm cells. The PMIC OpRegion cell is deliberately
not included and drivers for the other cells in the Bay Trail cell array
were never upstreamed.
Fixes: 7cf0a66f32 ("mfd: intel_soc_pmic: Crystal Cove support")
Reported-and-tested-by: russianneuromancer <russianneuromancer@ya.ru>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
2017-09-04 13:22:41 +00:00
|
|
|
.irq_flags = IRQF_TRIGGER_RISING,
|
|
|
|
.cell_dev = crystal_cove_byt_dev,
|
|
|
|
.n_cell_devs = ARRAY_SIZE(crystal_cove_byt_dev),
|
|
|
|
.regmap_config = &crystal_cove_regmap_config,
|
|
|
|
.irq_chip = &crystal_cove_irq_chip,
|
|
|
|
};
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static const struct crystal_cove_config crystal_cove_config_cht_crc = {
|
2014-06-03 05:26:03 +00:00
|
|
|
.irq_flags = IRQF_TRIGGER_RISING,
|
mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT
Both Bay and Cherry Trail devices may be used together with a Crystal Cove
PMIC. Each platform has its own variant of the PMIC, which both use the
same ACPI HID, but they are not 100% compatible.
Looking at the android x86 kernel sources where most of the Crystal Cove
code comes from, it talks about "Valley View", "Bay Trail" and / or BYT
without ever mentioning Cherry Trail, with the exception of the regulator
driver. The Asus Zenfone-2 kernel code has 2 regulator drivers, one
for Crystal Cove and one for what it calls Crystal Cove Plus. The
Crystal Cove Plus regulator driver is the only one to mention Cherry
Trail and that driver uses different register addresses then the
normal (Bay Trail) Crystal Cove regulator driver, showing that at
least the regulator register addresses are different.
The GPIO code should work on both, and the PWM code is known to work on
both and is necessary for backlight control on some Cherry Trail devices.
Testing has shown that the ACPI OpRegion code otoh is causing problems
on Cherry Trail devices, which is not surprising as it deals with the
regulators and those have different register addresses on CHT.
Specifically the ACPI OpRegion code causes the external microsd slot on
a Dell Venue 8 5855 (Cherry Trail version) to not work and the eMMC to
become unreliable and throw lots of errors.
This commit replaces the single mfd_cell array currently used for Crystal
Cove with 2 separate arrays, one for the Bay Trail variant and one for
the Cherry Trail variant, note that the Cherry Trail version of the array
only contains gpio and pwm cells. The PMIC OpRegion cell is deliberately
not included and drivers for the other cells in the Bay Trail cell array
were never upstreamed.
Fixes: 7cf0a66f32 ("mfd: intel_soc_pmic: Crystal Cove support")
Reported-and-tested-by: russianneuromancer <russianneuromancer@ya.ru>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
2017-09-04 13:22:41 +00:00
|
|
|
.cell_dev = crystal_cove_cht_dev,
|
|
|
|
.n_cell_devs = ARRAY_SIZE(crystal_cove_cht_dev),
|
2014-06-03 05:26:03 +00:00
|
|
|
.regmap_config = &crystal_cove_regmap_config,
|
|
|
|
.irq_chip = &crystal_cove_irq_chip,
|
|
|
|
};
|
2022-08-01 11:42:03 +00:00
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static int crystal_cove_i2c_probe(struct i2c_client *i2c)
|
2022-08-01 11:42:03 +00:00
|
|
|
{
|
2022-08-01 11:42:10 +00:00
|
|
|
const struct crystal_cove_config *config;
|
2022-08-01 11:42:03 +00:00
|
|
|
struct device *dev = &i2c->dev;
|
|
|
|
struct intel_soc_pmic *pmic;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
if (soc_intel_is_byt())
|
2022-08-01 11:42:10 +00:00
|
|
|
config = &crystal_cove_config_byt_crc;
|
2022-08-01 11:42:03 +00:00
|
|
|
else
|
2022-08-01 11:42:10 +00:00
|
|
|
config = &crystal_cove_config_cht_crc;
|
2022-08-01 11:42:03 +00:00
|
|
|
|
|
|
|
pmic = devm_kzalloc(dev, sizeof(*pmic), GFP_KERNEL);
|
|
|
|
if (!pmic)
|
|
|
|
return -ENOMEM;
|
|
|
|
|
2022-08-01 11:42:06 +00:00
|
|
|
i2c_set_clientdata(i2c, pmic);
|
2022-08-01 11:42:03 +00:00
|
|
|
|
|
|
|
pmic->regmap = devm_regmap_init_i2c(i2c, config->regmap_config);
|
|
|
|
if (IS_ERR(pmic->regmap))
|
|
|
|
return PTR_ERR(pmic->regmap);
|
|
|
|
|
|
|
|
pmic->irq = i2c->irq;
|
|
|
|
|
2022-08-01 11:42:05 +00:00
|
|
|
ret = devm_regmap_add_irq_chip(dev, pmic->regmap, pmic->irq,
|
|
|
|
config->irq_flags | IRQF_ONESHOT,
|
|
|
|
0, config->irq_chip, &pmic->irq_chip_data);
|
2022-08-01 11:42:03 +00:00
|
|
|
if (ret)
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
ret = enable_irq_wake(pmic->irq);
|
|
|
|
if (ret)
|
|
|
|
dev_warn(dev, "Can't enable IRQ as wake source: %d\n", ret);
|
|
|
|
|
|
|
|
/* Add lookup table for crc-pwm */
|
|
|
|
pwm_add_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup));
|
|
|
|
|
|
|
|
/* To distuingish this domain from the GPIO/charger's irqchip domains */
|
|
|
|
irq_domain_update_bus_token(regmap_irq_get_domain(pmic->irq_chip_data),
|
|
|
|
DOMAIN_BUS_NEXUS);
|
|
|
|
|
2022-08-01 11:42:05 +00:00
|
|
|
ret = mfd_add_devices(dev, PLATFORM_DEVID_NONE, config->cell_dev,
|
2022-08-01 11:42:03 +00:00
|
|
|
config->n_cell_devs, NULL, 0,
|
|
|
|
regmap_irq_get_domain(pmic->irq_chip_data));
|
|
|
|
if (ret)
|
2022-08-01 11:42:05 +00:00
|
|
|
pwm_remove_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup));
|
2022-08-01 11:42:03 +00:00
|
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
- Core Frameworks
- Fix 'mfd_of_node_list' OF node entry resource leak
- New Drivers
- Add support for Ocelot VSC7512 Networking Chip
- Add support for MediaTek MT6370 subPMIC
- Add support for Richtek RT5120 (I2C) PMIC
- New Device Support
- Add support for Rockchip RV1126 and RK3588 to Syscon
- Add support for Rockchip RK817 Battery Charger to RK808
- Add support for Silergy SY7636a Voltage Regulator to Simple MFD
- Add support for Qualcomm PMP8074 PMIC to QCOM SPMI
- Add support for Secure Update to Intel M10 BMC
- New Functionality
- Provide SSP type to Intel's LPSS (PCI) SPI driver
- Fix-ups
- Remove legacy / unused code; stmpe, intel_soc_pmic_crc, syscon
- Unify / simplify; intel_soc_pmic_crc
- Trivial reordering / spelling, etc; Makefile, twl-core
- Convert to managed resources; intel_soc_pmic_crc
- Use appropriate APIs; intel_soc_pmic_crc
- strscpy() conversion; htc-i2cpld, lpc_ich, mfd-core
- GPIOD conversion; htc-i2cpld, stmpe
- Add missing header file includes; twl4030-irq
- DT goodies; stmpe, mediatek,mt6370, x-powers,axp152,
aspeed,ast2x00-scu, mediatek,mt8195-scpsys,
qcom,spmi-pmic, syscon, qcom,tcsr, rockchip,rk817,
sprd,ums512-glbreg, dlg,da9063
- Bug Fixes
- Properly check return values; sm501, htc-i2cpld
- Repair Two-Wire Bus Mode; da9062-core
- Fix error handling; intel_soc_pmic_core, fsl-imx25-tsadc,
lp8788, lp8788-irq
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEdrbJNaO+IJqU8IdIUa+KL4f8d2EFAmM9e3IACgkQUa+KL4f8
d2EGYRAArUG1tPdUWYzZweXCbojG+Q8nz0+yLQ/64tfNXRPTovUdwNDwP/l3i+46
5K74gAsVONQQwORhDPM0QNZH5enFVKz6UcBnjM8hDDk4Ip8GEgbmPQjxrY4RpQq8
CL3IXzPHX6LnmGUhxdm1GvKrKt+bATdYZUnAN865afxpXUQMKJt1dZcVWFHSmMco
7EGVUfyEER/w3RehXSsqlEjEfiBsdCNoPigql1Kwb4Vdaf26hXlMvQ4Iw92yOXeC
vaFuWaTDlzH+aQAGn4r56OjB+kIxAXvz/yUcuOZKHSKVQYj78QjBOG4KV94B3sVQ
6j9WIZ1kNeHVOcI/sNflvN2xQOe2dT87ZxpnZpp11tYFJQE+ZuQX2c5RQC/uSqmV
NRmYrpgDgJl/J7RUWcqBO0FV26FdcB0AQVRobgSR1Q8ii8LPifKq8w8XzOvrYwQF
eGfmAZOTFwxFDrJrR9eHxfBLBTewVTCwtfq7FQkTQLWOqMCDDSdczsQUyMh6kQSx
FVW/HJAdiohnafJgoD0noPrAulmsT2+WQX1EP4JDcpIEAoZAq+Z96yRqSWV/8q0i
KlJlAD+mAvZAEjHlkuVXlGTsOl6k7wZL5ICrd8I8b77wcn1FKIbu9lwKTIjVrL1K
r++Egr/ABXlMMX4lzka6+49Ua2PpRrN5Ln4ALmKhRBZVjjazA8A=
=GgPZ
-----END PGP SIGNATURE-----
Merge tag 'mfd-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd
Pull MFD updates from Lee Jones:
"Core Frameworks:
- Fix 'mfd_of_node_list' OF node entry resource leak
New Drivers:
- Add support for Ocelot VSC7512 Networking Chip
- Add support for MediaTek MT6370 subPMIC
- Add support for Richtek RT5120 (I2C) PMIC
New Device Support:
- Add support for Rockchip RV1126 and RK3588 to Syscon
- Add support for Rockchip RK817 Battery Charger to RK808
- Add support for Silergy SY7636a Voltage Regulator to Simple MFD
- Add support for Qualcomm PMP8074 PMIC to QCOM SPMI
- Add support for Secure Update to Intel M10 BMC
New Functionality:
- Provide SSP type to Intel's LPSS (PCI) SPI driver
Fix-ups:
- Remove legacy / unused code; stmpe, intel_soc_pmic_crc, syscon
- Unify / simplify; intel_soc_pmic_crc
- Trivial reordering / spelling, etc; Makefile, twl-core
- Convert to managed resources; intel_soc_pmic_crc
- Use appropriate APIs; intel_soc_pmic_crc
- strscpy() conversion; htc-i2cpld, lpc_ich, mfd-core
- GPIOD conversion; htc-i2cpld, stmpe
- Add missing header file includes; twl4030-irq
- DT goodies; stmpe, mediatek,mt6370, x-powers,axp152,
aspeed,ast2x00-scu, mediatek,mt8195-scpsys, qcom,spmi-pmic, syscon,
qcom,tcsr, rockchip,rk817, sprd,ums512-glbreg, dlg,da9063
Bug Fixes:
- Properly check return values; sm501, htc-i2cpld
- Repair Two-Wire Bus Mode; da9062-core
- Fix error handling; intel_soc_pmic_core, fsl-imx25-tsadc, lp8788,
lp8788-irq"
* tag 'mfd-next-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (60 commits)
mfd: syscon: Remove repetition of the regmap_get_val_endian()
mfd: ocelot-spi: Add missing MODULE_DEVICE_TABLE
power: supply: Add charger driver for Rockchip RK817
dt-bindings: mfd: mt6370: Fix the indentation in the example
mfd: da9061: Fix Failed to set Two-Wire Bus Mode.
mfd: htc-i2cpld: Fix an IS_ERR() vs NULL bug in htcpld_core_probe()
dt-bindings: mfd: qcom,tcsr: Drop simple-mfd from IPQ6018
mfd: sm501: Add check for platform_driver_register()
dt-bindings: mfd: mediatek: Add scpsys compatible for mt8186
mfd: twl4030: Add missed linux/device.h header
dt-bindings: mfd: dlg,da9063: Add missing regulator patterns
dt-bindings: mfd: sprd: Add bindings for ums512 global registers
mfd: intel_soc_pmic_chtdc_ti: Switch from __maybe_unused to pm_sleep_ptr() etc
dt-bindings: mfd: syscon: Add rk3588 QoS register compatible
mfd: stmpe: Switch to using gpiod API
mfd: qcom-spmi-pmic: Add pm7250b compatible
dt-bindings: mfd: Add missing (unevaluated|additional)Properties on child nodes
mfd/omap1: htc-i2cpld: Convert to a pure GPIO driver
mfd: intel-m10-bmc: Add d5005 bmc secure update driver
dt-bindings: mfd: syscon: Drop ref from reg-io-width
...
2022-10-07 18:24:20 +00:00
|
|
|
static void crystal_cove_i2c_remove(struct i2c_client *i2c)
|
2022-08-01 11:42:03 +00:00
|
|
|
{
|
|
|
|
/* remove crc-pwm lookup table */
|
|
|
|
pwm_remove_table(crc_pwm_lookup, ARRAY_SIZE(crc_pwm_lookup));
|
|
|
|
|
|
|
|
mfd_remove_devices(&i2c->dev);
|
|
|
|
}
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static void crystal_cove_shutdown(struct i2c_client *i2c)
|
2022-08-01 11:42:03 +00:00
|
|
|
{
|
2022-08-01 11:42:06 +00:00
|
|
|
struct intel_soc_pmic *pmic = i2c_get_clientdata(i2c);
|
2022-08-01 11:42:03 +00:00
|
|
|
|
|
|
|
disable_irq(pmic->irq);
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static int crystal_cove_suspend(struct device *dev)
|
2022-08-01 11:42:03 +00:00
|
|
|
{
|
|
|
|
struct intel_soc_pmic *pmic = dev_get_drvdata(dev);
|
|
|
|
|
|
|
|
disable_irq(pmic->irq);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static int crystal_cove_resume(struct device *dev)
|
2022-08-01 11:42:03 +00:00
|
|
|
{
|
|
|
|
struct intel_soc_pmic *pmic = dev_get_drvdata(dev);
|
|
|
|
|
|
|
|
enable_irq(pmic->irq);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static DEFINE_SIMPLE_DEV_PM_OPS(crystal_cove_pm_ops, crystal_cove_suspend, crystal_cove_resume);
|
2022-08-01 11:42:03 +00:00
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static const struct acpi_device_id crystal_cove_acpi_match[] = {
|
2022-08-01 11:42:03 +00:00
|
|
|
{ "INT33FD" },
|
|
|
|
{ },
|
|
|
|
};
|
2022-08-01 11:42:10 +00:00
|
|
|
MODULE_DEVICE_TABLE(acpi, crystal_cove_acpi_match);
|
2022-08-01 11:42:03 +00:00
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
static struct i2c_driver crystal_cove_i2c_driver = {
|
2022-08-01 11:42:03 +00:00
|
|
|
.driver = {
|
2022-08-01 11:42:10 +00:00
|
|
|
.name = "crystal_cove_i2c",
|
2022-08-01 11:42:07 +00:00
|
|
|
.pm = pm_sleep_ptr(&crystal_cove_pm_ops),
|
2022-08-01 11:42:10 +00:00
|
|
|
.acpi_match_table = crystal_cove_acpi_match,
|
2022-08-01 11:42:03 +00:00
|
|
|
},
|
2022-08-01 11:42:10 +00:00
|
|
|
.probe_new = crystal_cove_i2c_probe,
|
|
|
|
.remove = crystal_cove_i2c_remove,
|
|
|
|
.shutdown = crystal_cove_shutdown,
|
2022-08-01 11:42:03 +00:00
|
|
|
};
|
|
|
|
|
2022-08-01 11:42:10 +00:00
|
|
|
module_i2c_driver(crystal_cove_i2c_driver);
|
2022-08-01 11:42:03 +00:00
|
|
|
|
|
|
|
MODULE_DESCRIPTION("I2C driver for Intel SoC PMIC");
|
|
|
|
MODULE_LICENSE("GPL v2");
|
|
|
|
MODULE_AUTHOR("Yang, Bin <bin.yang@intel.com>");
|
|
|
|
MODULE_AUTHOR("Zhu, Lejun <lejun.zhu@linux.intel.com>");
|