37323918ca
- Add support for a "resource managed strongly uncachable ioremap" call - Provide a collection of MFD helper macros - Remove mfd_clone_cell() from MFD core - Add NULL de-reference protection in MFD core - Remove superfluous function fd_platform_add_cell() from MFD core - Honour Device Tree's request to disable a device - New Drivers - Add support for MediaTek MT6323 PMIC - New Device Support - Add support for Gemini Lake to Intel LPSS PCI - Add support for Cherry Trail Crystal Cover PMIC to Intel SoC PMIC CRC - Add support for PM{I}8950 to Qualcomm SPMI PMIC - Add support for U8420 to ST-Ericsson DB8500 - Add support for Comet Lake PCH-H to Intel LPSS PCI - New Functionality - Add support for requested supply clocks; madera-core - Fix-ups - Lower interrupt priority; rk808 - Use provided helpers (macros, group functions, defines); rk808, ipaq-micro, ab8500-core, db8500-prcmu, mt6397-core, cs5535-mfd - Only allocate IRQs on request; max77620 - Use simplified API; arizona-core - Remove redundant and/or duplicated code; wm8998-tables, arizona, syscon - Device Tree binding fix-ups; madera, max77650, max77693 - Remove mfd_cell->id abuse hack; cs5535-mfd - Remove only user of mfd_clone_cell(); cs5535-mfd - Make resources static; rohm-bd70528 - Bug Fixes - Fix product ID for RK818; rk808 - Fix Power Key; rk808 - Fix booting on the BananaPi; mt6397-core - Endian fix-ups; twl.h - Fix static error checker warnings; ti_am335x_tscadc -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEdrbJNaO+IJqU8IdIUa+KL4f8d2EFAl3f2k4ACgkQUa+KL4f8 d2GmohAAluAT7hhURCf2HECsbVpeLH5i5UahRTCAlyIqeAiOjGEBGdIT2fYM1B+3 daqj3XiiLqvlnT5FZc4Fw5gR9Nu6Oe+Fo+6p6NnAu7CIt+x9RXOTB5LLXYYKICZK c32SnsSbRQwtzu83d3CjlfQRUZh66fJksWVPnOBkenaR7HaQlujKydBAk3kkLygZ 3GGTzjTXakl/53XJLRNn2wVVEG2gCicZwWxmWYW2000PFWo1upCeJRcwHBOXyy1I oh+KNp28gVQLT3pOte4TZEO3GNacMMs5DvA0hj2j7j+nH5FOryEPjUNbrqkcR+9T aquGbgYWgfJrW9UJhgNVsn754y5sgZ48Q20533AICMDfy3JTzfn91pX5q8mVFaPl Kf4cTVAau7kUCVxrXWuOG2fG2r7BjRABKU5ODDsGWmfWQNdktvLvHJI4j97ct0xj neBijJya70woV1o40v5yTmcUcc7hGEoKXuRWslxNK3K+nQkgRKMKgY4dm3jBeSmD lmBrjtjT0gcNl6+bOOn6IXn5k3sxWUwa799LUDaR5oHj6kB0LkIqz3h6UlOBryKO iQ2xXXCf/gAlkL75SW1rjYBHWkMkswgigppcbw2HB9tMqGL2LtHtgIli8CfGz1vs BzwxOQRvMK+4rG0qNHbocXJK2O4PduTxMXtBDiVK/tXrHaNLs7I= =mugH -----END PGP SIGNATURE----- Merge tag 'mfd-next-5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd Pull MFD updates from Lee Jones: "Core Frameworks: - Add support for a "resource managed strongly uncachable ioremap" call - Provide a collection of MFD helper macros - Remove mfd_clone_cell() from MFD core - Add NULL de-reference protection in MFD core - Remove superfluous function fd_platform_add_cell() from MFD core - Honour Device Tree's request to disable a device New Drivers: - Add support for MediaTek MT6323 PMIC New Device Support: - Add support for Gemini Lake to Intel LPSS PCI - Add support for Cherry Trail Crystal Cover PMIC to Intel SoC PMIC CRC - Add support for PM{I}8950 to Qualcomm SPMI PMIC - Add support for U8420 to ST-Ericsson DB8500 - Add support for Comet Lake PCH-H to Intel LPSS PCI New Functionality: - Add support for requested supply clocks; madera-core Fix-ups: - Lower interrupt priority; rk808 - Use provided helpers (macros, group functions, defines); rk808, ipaq-micro, ab8500-core, db8500-prcmu, mt6397-core, cs5535-mfd - Only allocate IRQs on request; max77620 - Use simplified API; arizona-core - Remove redundant and/or duplicated code; wm8998-tables, arizona, syscon - Device Tree binding fix-ups; madera, max77650, max77693 - Remove mfd_cell->id abuse hack; cs5535-mfd - Remove only user of mfd_clone_cell(); cs5535-mfd - Make resources static; rohm-bd70528 Bug Fixes: - Fix product ID for RK818; rk808 - Fix Power Key; rk808 - Fix booting on the BananaPi; mt6397-core - Endian fix-ups; twl.h - Fix static error checker warnings; ti_am335x_tscadc" * tag 'mfd-next-5.5' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (47 commits) Revert "mfd: syscon: Set name of regmap_config" mfd: ti_am335x_tscadc: Fix static checker warning mfd: bd70528: Staticize bit value definitions mfd: mfd-core: Honour Device Tree's request to disable a child-device dt-bindings: mfd: max77693: Fix missing curly brace mfd: intel-lpss: Add Intel Comet Lake PCH-H PCI IDs mfd: db8500-prcmu: Support U8420-sysclk firmware dt-bindings: mfd: max77650: Convert the binding document to yaml mfd: mfd-core: Move pdev->mfd_cell creation back into mfd_add_device() mfd: mfd-core: Remove usage counting for .{en,dis}able() call-backs x86: olpc-xo1-sci: Remove invocation of MFD's .enable()/.disable() call-backs x86: olpc-xo1-pm: Remove invocation of MFD's .enable()/.disable() call-backs mfd: mfd-core: Remove mfd_clone_cell() mfd: mfd-core: Protect against NULL call-back function pointer mfd: cs5535-mfd: Register clients using their own dedicated MFD cell entries mfd: cs5535-mfd: Request shared IO regions centrally mfd: cs5535-mfd: Remove mfd_cell->id hack mfd: cs5535-mfd: Use PLATFORM_DEVID_* defines and tidy error message mfd: intel_soc_pmic_crc: Add "cht_crystal_cove_pmic" cell to CHT cells mfd: madera: Add support for requesting the supply clocks ...
141 lines
3.7 KiB
C
141 lines
3.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Device access for Crystal Cove PMIC
|
|
*
|
|
* Copyright (C) 2013, 2014 Intel Corporation. All rights reserved.
|
|
*
|
|
* Author: Yang, Bin <bin.yang@intel.com>
|
|
* Author: Zhu, Lejun <lejun.zhu@linux.intel.com>
|
|
*/
|
|
|
|
#include <linux/interrupt.h>
|
|
#include <linux/regmap.h>
|
|
#include <linux/mfd/core.h>
|
|
#include <linux/mfd/intel_soc_pmic.h>
|
|
|
|
#include "intel_soc_pmic_core.h"
|
|
|
|
#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
|
|
|
|
static struct resource gpio_resources[] = {
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_GPIO, "GPIO"),
|
|
};
|
|
|
|
static struct resource pwrsrc_resources[] = {
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_PWRSRC, "PWRSRC"),
|
|
};
|
|
|
|
static struct resource adc_resources[] = {
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_ADC, "ADC"),
|
|
};
|
|
|
|
static struct resource thermal_resources[] = {
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_THRM, "THERMAL"),
|
|
};
|
|
|
|
static struct resource bcu_resources[] = {
|
|
DEFINE_RES_IRQ_NAMED(CRYSTAL_COVE_IRQ_BCU, "BCU"),
|
|
};
|
|
|
|
static struct mfd_cell crystal_cove_byt_dev[] = {
|
|
{
|
|
.name = "crystal_cove_pwrsrc",
|
|
.num_resources = ARRAY_SIZE(pwrsrc_resources),
|
|
.resources = pwrsrc_resources,
|
|
},
|
|
{
|
|
.name = "crystal_cove_adc",
|
|
.num_resources = ARRAY_SIZE(adc_resources),
|
|
.resources = adc_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,
|
|
},
|
|
{
|
|
.name = "crystal_cove_gpio",
|
|
.num_resources = ARRAY_SIZE(gpio_resources),
|
|
.resources = gpio_resources,
|
|
},
|
|
{
|
|
.name = "byt_crystal_cove_pmic",
|
|
},
|
|
{
|
|
.name = "crystal_cove_pwm",
|
|
},
|
|
};
|
|
|
|
static struct mfd_cell crystal_cove_cht_dev[] = {
|
|
{
|
|
.name = "crystal_cove_gpio",
|
|
.num_resources = ARRAY_SIZE(gpio_resources),
|
|
.resources = gpio_resources,
|
|
},
|
|
{
|
|
.name = "cht_crystal_cove_pmic",
|
|
},
|
|
{
|
|
.name = "crystal_cove_pwm",
|
|
},
|
|
};
|
|
|
|
static const struct regmap_config crystal_cove_regmap_config = {
|
|
.reg_bits = 8,
|
|
.val_bits = 8,
|
|
|
|
.max_register = CRYSTAL_COVE_MAX_REGISTER,
|
|
.cache_type = REGCACHE_NONE,
|
|
};
|
|
|
|
static const struct regmap_irq crystal_cove_irqs[] = {
|
|
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)),
|
|
};
|
|
|
|
static const struct regmap_irq_chip crystal_cove_irq_chip = {
|
|
.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,
|
|
};
|
|
|
|
struct intel_soc_pmic_config intel_soc_pmic_config_byt_crc = {
|
|
.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,
|
|
};
|
|
|
|
struct intel_soc_pmic_config intel_soc_pmic_config_cht_crc = {
|
|
.irq_flags = IRQF_TRIGGER_RISING,
|
|
.cell_dev = crystal_cove_cht_dev,
|
|
.n_cell_devs = ARRAY_SIZE(crystal_cove_cht_dev),
|
|
.regmap_config = &crystal_cove_regmap_config,
|
|
.irq_chip = &crystal_cove_irq_chip,
|
|
};
|