mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	tps65010, have undergone minor code improvements to enhance consistency and fix race conditions. - The syscon driver now utilizes the regmap max_register_is_0 capability for consistent register map configuration across syscons of all sizes. - New device support has been added for QCS8300, qcs615, SA8255p, and samsung,s2dos05, expanding the range of compatible hardware. - The cros_ec driver now supports loading cros_ec_ucsi on supported ECs and avoids loading the charger with UCSI, streamlining functionality. - The bd96801 driver now utilizes the more modern maple tree register cache, improving performance. - The da9052-spi driver has undergone a fix to change the read-mask to write-mask, preventing potential issues. - Unused declarations in max77693 have been removed, and support for samsung,s2dos05 has been added, enhancing code clarity and device compatibility. - Error handling in cs42l43 has been fixed to avoid unbalanced regulator put and ensure proper synchronization during driver removal. - The wcd934x driver now uses MODULE_DEVICE_TABLE() instead of MODULE_ALIAS(), improving code consistency. - Documentation for qcom,tcsr, syscon, and atmel-smc has been updated and reorganized for better clarity and maintainability. - The intel_soc_pmic_bxtwc driver has undergone significant improvements, including the use of IRQ domains for various devices, fixing IRQ domain names duplication, and code refactoring for better consistency and maintainability. - The ipaq-micro driver has received a fix for a missing break statement in the default case, enhancing code robustness. - Support for the AXP323 PMIC has been added to the axp20x driver, along with ensuring a clear relationship between IDs and model names, and allowing multiple regulators, broadening hardware compatibility. - The cs42l43 driver now disables IRQs during suspend for improved power management. - The adp5585 driver has reduced its dependencies by dropping the obsolete dependency on COMPILE_TEST. - Initial support for the MT6328 PMIC has been added to the mt6397 driver, expanding the range of supported hardware. - The rtc-bd70528 driver has been simplified by dropping the IC name from IRQ, improving code readability. - Documentation for qcom,spmi-pmic, ti,twl, and zii,rave-sp has been updated to enhance clarity and incorporate new features. - The rt5033 driver has received a fix for a missing regmap_del_irq_chip() in the error handling path. - New device support has been added for MSM8917, and the intel_soc_pmic_crc driver now supports non-ACPI instantiated i2c_client. - The 88pm886 driver has added support for the RTC cell, and the tqmx86 driver has improved its GPIO IRQ setup and added I2C IRQ support, increasing functionality. - The sprd,sc2731 DT schema has been updated and converted to YAML format for better readability and maintainability. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEdrbJNaO+IJqU8IdIUa+KL4f8d2EFAmc/KQQACgkQUa+KL4f8 d2E0Gg//blIYrtUgGy5xEwR8WIobYtAxBo+AMX1tSgh4Hs4u/SFhy4cE7no+M3J2 Id5gQJscuz3k4sH0raoUMp2NRFyI8lD8Y9xRBTDE+KV/FbdL1KHfmTun2NY1zG7U LIop39HsJkJ0Z06lnyBf61QK6SmlzT8vXbJmK4mYf8wgBX7iFDZ0FMZHP2uW5k/Z UV8nyQalwerG+jOGXfQkVDXF8YKToqPtqsFWTJ1Yn5gs1SCd6dyusDNYqUDuW4Ng dbu/4wt3mspliTOnBTPnXlcVsCNefhtbCWxyBpaA3luK9ciMdX7cZ8wei1xkFcwK 5bXPjXsFiiUbDX0l/6eS1h676k1JQl5iABlhGXHJm/GMcN9fdNFCQL/2rtJ4iSfW 0CoYjERfm6OyHF0Wiuk3I8x/AARWKXtDEjktGXUL0do7NBqJgB3ISme8x8b5hW4l HO6MmsFmHxHbIlb+kCTTCtXa5R1Sdca/8qrPxMb+B89X3eOtF7sjVgS9dwkLNCGp hqP0K2IGNaRw+EDlXCBaWrbq7x0kpup6o+nooViU0Pj9fFjEdZlCLyu22+kjl04V Lfe3x9wMXBrHVrPynoaQp6+57QlWfpM0uuKJWoaKlCoJTh8UbFcWWkDqr6I/pDur EtfSwOO8uVuS8m/FMAs0m/+zrWfHAvjAbAHFCKBu/vKaD5DvxeI= =YP3r -----END PGP SIGNATURE----- Merge tag 'mfd-next-6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd Pull MFD updates from Lee Jones: - Several drivers, including atmel-flexcom/rk8xx-core, palmas, and tps65010, have undergone minor code improvements to enhance consistency and fix race conditions. - The syscon driver now utilizes the regmap max_register_is_0 capability for consistent register map configuration across syscons of all sizes. - New device support has been added for QCS8300, qcs615, SA8255p, and samsung,s2dos05, expanding the range of compatible hardware. - The cros_ec driver now supports loading cros_ec_ucsi on supported ECs and avoids loading the charger with UCSI, streamlining functionality. - The bd96801 driver now utilizes the more modern maple tree register cache, improving performance. - The da9052-spi driver has undergone a fix to change the read-mask to write-mask, preventing potential issues. - Unused declarations in max77693 have been removed, and support for samsung,s2dos05 has been added, enhancing code clarity and device compatibility. - Error handling in cs42l43 has been fixed to avoid unbalanced regulator put and ensure proper synchronization during driver removal. - The wcd934x driver now uses MODULE_DEVICE_TABLE() instead of MODULE_ALIAS(), improving code consistency. - Documentation for qcom,tcsr, syscon, and atmel-smc has been updated and reorganized for better clarity and maintainability. - The intel_soc_pmic_bxtwc driver has undergone significant improvements, including the use of IRQ domains for various devices, fixing IRQ domain names duplication, and code refactoring for better consistency and maintainability. - The ipaq-micro driver has received a fix for a missing break statement in the default case, enhancing code robustness. - Support for the AXP323 PMIC has been added to the axp20x driver, along with ensuring a clear relationship between IDs and model names, and allowing multiple regulators, broadening hardware compatibility. - The cs42l43 driver now disables IRQs during suspend for improved power management. - The adp5585 driver has reduced its dependencies by dropping the obsolete dependency on COMPILE_TEST. - Initial support for the MT6328 PMIC has been added to the mt6397 driver, expanding the range of supported hardware. - The rtc-bd70528 driver has been simplified by dropping the IC name from IRQ, improving code readability. - Documentation for qcom,spmi-pmic, ti,twl, and zii,rave-sp has been updated to enhance clarity and incorporate new features. - The rt5033 driver has received a fix for a missing regmap_del_irq_chip() in the error handling path. - New device support has been added for MSM8917, and the intel_soc_pmic_crc driver now supports non-ACPI instantiated i2c_client. - The 88pm886 driver has added support for the RTC cell, and the tqmx86 driver has improved its GPIO IRQ setup and added I2C IRQ support, increasing functionality. - The sprd,sc2731 DT schema has been updated and converted to YAML format for better readability and maintainability. * tag 'mfd-next-6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd: (62 commits) dt-bindings: mfd: bd71828: Use charger resistor in mOhm instead of MOhm dt-bindings: mfd: sprd,sc2731: Convert to YAML mfd: tqmx86: Add I2C IRQ support mfd: tqmx86: Make IRQ setup errors non-fatal mfd: tqmx86: Refactor GPIO IRQ setup mfd: tqmx86: Improve gpio_irq module parameter description mfd: tqmx86: Add board definitions for TQMx120UC, TQMx130UC and TQMxE41S mfd: 88pm886: Add the RTC cell dt-bindings: mfd: Add Realtek RTL9300 switch peripherals mfd: intel_soc_pmic_crc: Add support for non ACPI instantiated i2c_client mfd: intel_soc_pmic_*: Consistently use filename as driver name dt-bindings: mfd: qcom,tcsr: Add compatible for MSM8917 mfd: rt5033: Fix missing regmap_del_irq_chip() mfd: cgbc-core: Fix error handling paths in cgbc_init_device() dt-bindings: mfd: aspeed: Support for AST2700 mfd: Switch back to struct platform_driver::remove() dt-bindings: mfd: qcom,spmi-pmic: Document PMICs added in SM8750 mfd: rtc: bd7xxxx Drop IC name from IRQ mfd: mt6397: Add initial support for MT6328 mfd: adp5585: Drop obsolete dependency on COMPILE_TEST ...
		
			
				
	
	
		
			136 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
/*
 | 
						|
 * Intel BXT Whiskey Cove PMIC TMU driver
 | 
						|
 *
 | 
						|
 * Copyright (C) 2016 Intel Corporation. All rights reserved.
 | 
						|
 *
 | 
						|
 * This driver adds TMU (Time Management Unit) support for Intel BXT platform.
 | 
						|
 * It enables the alarm wake-up functionality in the TMU unit of Whiskey Cove
 | 
						|
 * PMIC.
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/module.h>
 | 
						|
#include <linux/mod_devicetable.h>
 | 
						|
#include <linux/interrupt.h>
 | 
						|
#include <linux/platform_device.h>
 | 
						|
#include <linux/mfd/intel_soc_pmic.h>
 | 
						|
 | 
						|
#define BXTWC_TMUIRQ		0x4fb6
 | 
						|
#define BXTWC_MIRQLVL1		0x4e0e
 | 
						|
#define BXTWC_MTMUIRQ_REG	0x4fb7
 | 
						|
#define BXTWC_MIRQLVL1_MTMU	BIT(1)
 | 
						|
#define BXTWC_TMU_WK_ALRM	BIT(1)
 | 
						|
#define BXTWC_TMU_SYS_ALRM	BIT(2)
 | 
						|
#define BXTWC_TMU_ALRM_MASK	(BXTWC_TMU_WK_ALRM | BXTWC_TMU_SYS_ALRM)
 | 
						|
#define BXTWC_TMU_ALRM_IRQ	(BXTWC_TMU_WK_ALRM | BXTWC_TMU_SYS_ALRM)
 | 
						|
 | 
						|
struct wcove_tmu {
 | 
						|
	int irq;
 | 
						|
	struct device *dev;
 | 
						|
	struct regmap *regmap;
 | 
						|
};
 | 
						|
 | 
						|
static irqreturn_t bxt_wcove_tmu_irq_handler(int irq, void *data)
 | 
						|
{
 | 
						|
	struct wcove_tmu *wctmu = data;
 | 
						|
	unsigned int tmu_irq;
 | 
						|
 | 
						|
	/* Read TMU interrupt reg */
 | 
						|
	regmap_read(wctmu->regmap, BXTWC_TMUIRQ, &tmu_irq);
 | 
						|
	if (tmu_irq & BXTWC_TMU_ALRM_IRQ) {
 | 
						|
		/* clear TMU irq */
 | 
						|
		regmap_write(wctmu->regmap, BXTWC_TMUIRQ, tmu_irq);
 | 
						|
		return IRQ_HANDLED;
 | 
						|
	}
 | 
						|
	return IRQ_NONE;
 | 
						|
}
 | 
						|
 | 
						|
static int bxt_wcove_tmu_probe(struct platform_device *pdev)
 | 
						|
{
 | 
						|
	struct intel_soc_pmic *pmic = dev_get_drvdata(pdev->dev.parent);
 | 
						|
	struct wcove_tmu *wctmu;
 | 
						|
	int ret;
 | 
						|
 | 
						|
	wctmu = devm_kzalloc(&pdev->dev, sizeof(*wctmu), GFP_KERNEL);
 | 
						|
	if (!wctmu)
 | 
						|
		return -ENOMEM;
 | 
						|
 | 
						|
	wctmu->dev = &pdev->dev;
 | 
						|
	wctmu->regmap = pmic->regmap;
 | 
						|
 | 
						|
	wctmu->irq = platform_get_irq(pdev, 0);
 | 
						|
	if (wctmu->irq < 0)
 | 
						|
		return wctmu->irq;
 | 
						|
 | 
						|
	ret = devm_request_threaded_irq(&pdev->dev, wctmu->irq,
 | 
						|
					NULL, bxt_wcove_tmu_irq_handler,
 | 
						|
					IRQF_ONESHOT, "bxt_wcove_tmu", wctmu);
 | 
						|
	if (ret) {
 | 
						|
		dev_err(&pdev->dev, "request irq failed: %d,virq: %d\n",
 | 
						|
			ret, wctmu->irq);
 | 
						|
		return ret;
 | 
						|
	}
 | 
						|
 | 
						|
	/* Unmask TMU second level Wake & System alarm */
 | 
						|
	regmap_update_bits(wctmu->regmap, BXTWC_MTMUIRQ_REG,
 | 
						|
				  BXTWC_TMU_ALRM_MASK, 0);
 | 
						|
 | 
						|
	platform_set_drvdata(pdev, wctmu);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static void bxt_wcove_tmu_remove(struct platform_device *pdev)
 | 
						|
{
 | 
						|
	struct wcove_tmu *wctmu = platform_get_drvdata(pdev);
 | 
						|
	unsigned int val;
 | 
						|
 | 
						|
	/* Mask TMU interrupts */
 | 
						|
	regmap_read(wctmu->regmap, BXTWC_MIRQLVL1, &val);
 | 
						|
	regmap_write(wctmu->regmap, BXTWC_MIRQLVL1,
 | 
						|
			val | BXTWC_MIRQLVL1_MTMU);
 | 
						|
	regmap_read(wctmu->regmap, BXTWC_MTMUIRQ_REG, &val);
 | 
						|
	regmap_write(wctmu->regmap, BXTWC_MTMUIRQ_REG,
 | 
						|
			val | BXTWC_TMU_ALRM_MASK);
 | 
						|
}
 | 
						|
 | 
						|
#ifdef CONFIG_PM_SLEEP
 | 
						|
static int bxtwc_tmu_suspend(struct device *dev)
 | 
						|
{
 | 
						|
	struct wcove_tmu *wctmu = dev_get_drvdata(dev);
 | 
						|
 | 
						|
	enable_irq_wake(wctmu->irq);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static int bxtwc_tmu_resume(struct device *dev)
 | 
						|
{
 | 
						|
	struct wcove_tmu *wctmu = dev_get_drvdata(dev);
 | 
						|
 | 
						|
	disable_irq_wake(wctmu->irq);
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
static SIMPLE_DEV_PM_OPS(bxtwc_tmu_pm_ops, bxtwc_tmu_suspend, bxtwc_tmu_resume);
 | 
						|
 | 
						|
static const struct platform_device_id bxt_wcove_tmu_id_table[] = {
 | 
						|
	{ .name = "bxt_wcove_tmu" },
 | 
						|
	{},
 | 
						|
};
 | 
						|
MODULE_DEVICE_TABLE(platform, bxt_wcove_tmu_id_table);
 | 
						|
 | 
						|
static struct platform_driver bxt_wcove_tmu_driver = {
 | 
						|
	.probe = bxt_wcove_tmu_probe,
 | 
						|
	.remove = bxt_wcove_tmu_remove,
 | 
						|
	.driver = {
 | 
						|
		.name = "bxt_wcove_tmu",
 | 
						|
		.pm     = &bxtwc_tmu_pm_ops,
 | 
						|
	},
 | 
						|
	.id_table = bxt_wcove_tmu_id_table,
 | 
						|
};
 | 
						|
 | 
						|
module_platform_driver(bxt_wcove_tmu_driver);
 | 
						|
 | 
						|
MODULE_LICENSE("GPL v2");
 | 
						|
MODULE_AUTHOR("Nilesh Bacchewar <nilesh.bacchewar@intel.com>");
 | 
						|
MODULE_DESCRIPTION("BXT Whiskey Cove TMU Driver");
 |