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 ...
This commit is contained in:
@@ -64,6 +64,8 @@ static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr)
|
||||
|
||||
void __iomem *devm_ioremap(struct device *dev, resource_size_t offset,
|
||||
resource_size_t size);
|
||||
void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset,
|
||||
resource_size_t size);
|
||||
void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset,
|
||||
resource_size_t size);
|
||||
void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset,
|
||||
|
@@ -1186,13 +1186,6 @@
|
||||
#define ARIZONA_DSP4_SCRATCH_1 0x1441
|
||||
#define ARIZONA_DSP4_SCRATCH_2 0x1442
|
||||
#define ARIZONA_DSP4_SCRATCH_3 0x1443
|
||||
#define ARIZONA_FRF_COEFF_1 0x1700
|
||||
#define ARIZONA_FRF_COEFF_2 0x1701
|
||||
#define ARIZONA_FRF_COEFF_3 0x1702
|
||||
#define ARIZONA_FRF_COEFF_4 0x1703
|
||||
#define ARIZONA_V2_DAC_COMP_1 0x1704
|
||||
#define ARIZONA_V2_DAC_COMP_2 0x1705
|
||||
|
||||
|
||||
/*
|
||||
* Field Definitions.
|
||||
|
@@ -12,6 +12,35 @@
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#define MFD_RES_SIZE(arr) (sizeof(arr) / sizeof(struct resource))
|
||||
|
||||
#define MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, _match)\
|
||||
{ \
|
||||
.name = (_name), \
|
||||
.resources = (_res), \
|
||||
.num_resources = MFD_RES_SIZE((_res)), \
|
||||
.platform_data = (_pdata), \
|
||||
.pdata_size = (_pdsize), \
|
||||
.of_compatible = (_compat), \
|
||||
.acpi_match = (_match), \
|
||||
.id = (_id), \
|
||||
}
|
||||
|
||||
#define OF_MFD_CELL(_name, _res, _pdata, _pdsize,_id, _compat) \
|
||||
MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, NULL) \
|
||||
|
||||
#define ACPI_MFD_CELL(_name, _res, _pdata, _pdsize, _id, _match) \
|
||||
MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, _match) \
|
||||
|
||||
#define MFD_CELL_BASIC(_name, _res, _pdata, _pdsize, _id) \
|
||||
MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, NULL) \
|
||||
|
||||
#define MFD_CELL_RES(_name, _res) \
|
||||
MFD_CELL_ALL(_name, _res, NULL, 0, 0, NULL, NULL) \
|
||||
|
||||
#define MFD_CELL_NAME(_name) \
|
||||
MFD_CELL_ALL(_name, NULL, NULL, 0, 0, NULL, NULL) \
|
||||
|
||||
struct irq_domain;
|
||||
struct property_entry;
|
||||
|
||||
@@ -30,8 +59,6 @@ struct mfd_cell {
|
||||
const char *name;
|
||||
int id;
|
||||
|
||||
/* refcounting for multiple drivers to use a single cell */
|
||||
atomic_t *usage_count;
|
||||
int (*enable)(struct platform_device *dev);
|
||||
int (*disable)(struct platform_device *dev);
|
||||
|
||||
@@ -86,24 +113,6 @@ struct mfd_cell {
|
||||
extern int mfd_cell_enable(struct platform_device *pdev);
|
||||
extern int mfd_cell_disable(struct platform_device *pdev);
|
||||
|
||||
/*
|
||||
* "Clone" multiple platform devices for a single cell. This is to be used
|
||||
* for devices that have multiple users of a cell. For example, if an mfd
|
||||
* driver wants the cell "foo" to be used by a GPIO driver, an MTD driver,
|
||||
* and a platform driver, the following bit of code would be use after first
|
||||
* calling mfd_add_devices():
|
||||
*
|
||||
* const char *fclones[] = { "foo-gpio", "foo-mtd" };
|
||||
* err = mfd_clone_cells("foo", fclones, ARRAY_SIZE(fclones));
|
||||
*
|
||||
* Each driver (MTD, GPIO, and platform driver) would then register
|
||||
* platform_drivers for "foo-mtd", "foo-gpio", and "foo", respectively.
|
||||
* The cell's .enable/.disable hooks should be used to deal with hardware
|
||||
* resource contention.
|
||||
*/
|
||||
extern int mfd_clone_cell(const char *cell, const char **clones,
|
||||
size_t n_clones);
|
||||
|
||||
/*
|
||||
* Given a platform device that's been created by mfd_add_devices(), fetch
|
||||
* the mfd_cell that created it.
|
||||
|
@@ -489,7 +489,7 @@ struct prcmu_auto_pm_config {
|
||||
|
||||
#ifdef CONFIG_MFD_DB8500_PRCMU
|
||||
|
||||
void db8500_prcmu_early_init(u32 phy_base, u32 size);
|
||||
void db8500_prcmu_early_init(void);
|
||||
int prcmu_set_rc_a2p(enum romcode_write);
|
||||
enum romcode_read prcmu_get_rc_p2a(void);
|
||||
enum ap_pwrst prcmu_get_xp70_current_state(void);
|
||||
@@ -546,7 +546,7 @@ void db8500_prcmu_write_masked(unsigned int reg, u32 mask, u32 value);
|
||||
|
||||
#else /* !CONFIG_MFD_DB8500_PRCMU */
|
||||
|
||||
static inline void db8500_prcmu_early_init(u32 phy_base, u32 size) {}
|
||||
static inline void db8500_prcmu_early_init(void) {}
|
||||
|
||||
static inline int prcmu_set_rc_a2p(enum romcode_write code)
|
||||
{
|
||||
|
@@ -190,6 +190,7 @@ enum ddr_pwrst {
|
||||
#define PRCMU_FW_PROJECT_U8500_MBL2 12 /* Customer specific */
|
||||
#define PRCMU_FW_PROJECT_U8520 13
|
||||
#define PRCMU_FW_PROJECT_U8420 14
|
||||
#define PRCMU_FW_PROJECT_U8420_SYSCLK 17
|
||||
#define PRCMU_FW_PROJECT_A9420 20
|
||||
/* [32..63] 9540 and derivatives */
|
||||
#define PRCMU_FW_PROJECT_U9540 32
|
||||
@@ -211,9 +212,9 @@ struct prcmu_fw_version {
|
||||
|
||||
#if defined(CONFIG_UX500_SOC_DB8500)
|
||||
|
||||
static inline void prcmu_early_init(u32 phy_base, u32 size)
|
||||
static inline void prcmu_early_init(void)
|
||||
{
|
||||
return db8500_prcmu_early_init(phy_base, size);
|
||||
return db8500_prcmu_early_init();
|
||||
}
|
||||
|
||||
static inline int prcmu_set_power_state(u8 state, bool keep_ulp_clk,
|
||||
@@ -401,7 +402,7 @@ static inline int prcmu_config_a9wdog(u8 num, bool sleep_auto_off)
|
||||
}
|
||||
#else
|
||||
|
||||
static inline void prcmu_early_init(u32 phy_base, u32 size) {}
|
||||
static inline void prcmu_early_init(void) {}
|
||||
|
||||
static inline int prcmu_set_power_state(u8 state, bool keep_ulp_clk,
|
||||
bool keep_ap_pll)
|
||||
|
@@ -8,6 +8,7 @@
|
||||
#ifndef MADERA_CORE_H
|
||||
#define MADERA_CORE_H
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mfd/madera/pdata.h>
|
||||
@@ -29,6 +30,13 @@ enum madera_type {
|
||||
CS42L92 = 9,
|
||||
};
|
||||
|
||||
enum {
|
||||
MADERA_MCLK1,
|
||||
MADERA_MCLK2,
|
||||
MADERA_MCLK3,
|
||||
MADERA_NUM_MCLK
|
||||
};
|
||||
|
||||
#define MADERA_MAX_CORE_SUPPLIES 2
|
||||
#define MADERA_MAX_GPIOS 40
|
||||
|
||||
@@ -155,6 +163,7 @@ struct snd_soc_dapm_context;
|
||||
* @irq_dev: the irqchip child driver device
|
||||
* @irq_data: pointer to irqchip data for the child irqchip driver
|
||||
* @irq: host irq number from SPI or I2C configuration
|
||||
* @mclk: Structure holding clock supplies
|
||||
* @out_clamp: indicates output clamp state for each analogue output
|
||||
* @out_shorted: indicates short circuit state for each analogue output
|
||||
* @hp_ena: bitflags of enable state for the headphone outputs
|
||||
@@ -184,6 +193,8 @@ struct madera {
|
||||
struct regmap_irq_chip_data *irq_data;
|
||||
int irq;
|
||||
|
||||
struct clk_bulk_data mclk[MADERA_NUM_MCLK];
|
||||
|
||||
unsigned int num_micbias;
|
||||
unsigned int num_childbias[MADERA_MAX_MICBIAS];
|
||||
|
||||
|
@@ -329,7 +329,6 @@ struct max77620_chip {
|
||||
struct regmap *rmap;
|
||||
|
||||
int chip_irq;
|
||||
int irq_base;
|
||||
|
||||
/* chip id */
|
||||
enum max77620_chip_id chip_id;
|
||||
|
71
include/linux/mfd/mt6397/rtc.h
Normal file
71
include/linux/mfd/mt6397/rtc.h
Normal file
@@ -0,0 +1,71 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright (C) 2014-2019 MediaTek Inc.
|
||||
*
|
||||
* Author: Tianping.Fang <tianping.fang@mediatek.com>
|
||||
* Sean Wang <sean.wang@mediatek.com>
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_MFD_MT6397_RTC_H_
|
||||
#define _LINUX_MFD_MT6397_RTC_H_
|
||||
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/rtc.h>
|
||||
|
||||
#define RTC_BBPU 0x0000
|
||||
#define RTC_BBPU_CBUSY BIT(6)
|
||||
#define RTC_BBPU_KEY (0x43 << 8)
|
||||
|
||||
#define RTC_WRTGR 0x003c
|
||||
|
||||
#define RTC_IRQ_STA 0x0002
|
||||
#define RTC_IRQ_STA_AL BIT(0)
|
||||
#define RTC_IRQ_STA_LP BIT(3)
|
||||
|
||||
#define RTC_IRQ_EN 0x0004
|
||||
#define RTC_IRQ_EN_AL BIT(0)
|
||||
#define RTC_IRQ_EN_ONESHOT BIT(2)
|
||||
#define RTC_IRQ_EN_LP BIT(3)
|
||||
#define RTC_IRQ_EN_ONESHOT_AL (RTC_IRQ_EN_ONESHOT | RTC_IRQ_EN_AL)
|
||||
|
||||
#define RTC_AL_MASK 0x0008
|
||||
#define RTC_AL_MASK_DOW BIT(4)
|
||||
|
||||
#define RTC_TC_SEC 0x000a
|
||||
/* Min, Hour, Dom... register offset to RTC_TC_SEC */
|
||||
#define RTC_OFFSET_SEC 0
|
||||
#define RTC_OFFSET_MIN 1
|
||||
#define RTC_OFFSET_HOUR 2
|
||||
#define RTC_OFFSET_DOM 3
|
||||
#define RTC_OFFSET_DOW 4
|
||||
#define RTC_OFFSET_MTH 5
|
||||
#define RTC_OFFSET_YEAR 6
|
||||
#define RTC_OFFSET_COUNT 7
|
||||
|
||||
#define RTC_AL_SEC 0x0018
|
||||
|
||||
#define RTC_PDN2 0x002e
|
||||
#define RTC_PDN2_PWRON_ALARM BIT(4)
|
||||
|
||||
#define RTC_MIN_YEAR 1968
|
||||
#define RTC_BASE_YEAR 1900
|
||||
#define RTC_NUM_YEARS 128
|
||||
#define RTC_MIN_YEAR_OFFSET (RTC_MIN_YEAR - RTC_BASE_YEAR)
|
||||
|
||||
#define MTK_RTC_POLL_DELAY_US 10
|
||||
#define MTK_RTC_POLL_TIMEOUT (jiffies_to_usecs(HZ))
|
||||
|
||||
struct mt6397_rtc {
|
||||
struct device *dev;
|
||||
struct rtc_device *rtc_dev;
|
||||
|
||||
/* Protect register access from multiple tasks */
|
||||
struct mutex lock;
|
||||
struct regmap *regmap;
|
||||
int irq;
|
||||
u32 addr_base;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_MFD_MT6397_RTC_H_ */
|
@@ -610,7 +610,7 @@ enum {
|
||||
RK808_ID = 0x0000,
|
||||
RK809_ID = 0x8090,
|
||||
RK817_ID = 0x8170,
|
||||
RK818_ID = 0x8181,
|
||||
RK818_ID = 0x8180,
|
||||
};
|
||||
|
||||
struct rk808 {
|
||||
|
@@ -181,14 +181,18 @@ static inline int twl_i2c_read_u8(u8 mod_no, u8 *val, u8 reg) {
|
||||
}
|
||||
|
||||
static inline int twl_i2c_write_u16(u8 mod_no, u16 val, u8 reg) {
|
||||
val = cpu_to_le16(val);
|
||||
return twl_i2c_write(mod_no, (u8*) &val, reg, 2);
|
||||
__le16 value;
|
||||
|
||||
value = cpu_to_le16(val);
|
||||
return twl_i2c_write(mod_no, (u8 *) &value, reg, 2);
|
||||
}
|
||||
|
||||
static inline int twl_i2c_read_u16(u8 mod_no, u16 *val, u8 reg) {
|
||||
int ret;
|
||||
ret = twl_i2c_read(mod_no, (u8*) val, reg, 2);
|
||||
*val = le16_to_cpu(*val);
|
||||
__le16 value;
|
||||
|
||||
ret = twl_i2c_read(mod_no, (u8 *) &value, reg, 2);
|
||||
*val = le16_to_cpu(value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user