Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

nvmem: Add apple-spmi-nvmem driver

Add a driver for a series of SPMI-attached PMICs present on Apple devices

Reviewed-by: Neal Gompa <neal@gompa.dev>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Signed-off-by: Hector Martin <marcan@marcan.st>
Co-developed-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
Signed-off-by: Sasha Finkelstein <fnkl.kernel@gmail.com>
Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
Link: https://lore.kernel.org/r/20250509122452.11827-4-srini@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Hector Martin and committed by
Greg Kroah-Hartman
fe91c24a 48332454

+78
+1
MAINTAINERS
··· 2298 2298 F: drivers/irqchip/irq-apple-aic.c 2299 2299 F: drivers/nvme/host/apple.c 2300 2300 F: drivers/nvmem/apple-efuses.c 2301 + F: drivers/nvmem/apple-spmi-nvmem.c 2301 2302 F: drivers/pinctrl/pinctrl-apple-gpio.c 2302 2303 F: drivers/pwm/pwm-apple.c 2303 2304 F: drivers/soc/apple/*
+13
drivers/nvmem/Kconfig
··· 40 40 This driver can also be built as a module. If so, the module will 41 41 be called nvmem-apple-efuses. 42 42 43 + config NVMEM_APPLE_SPMI 44 + tristate "Apple SPMI NVMEM" 45 + depends on ARCH_APPLE || COMPILE_TEST 46 + depends on SPMI 47 + select REGMAP_SPMI 48 + help 49 + Say y here to build a driver to expose NVMEM cells for a set of power 50 + and RTC-related settings on a SPMI-attached PMIC present on Apple 51 + devices, such as Apple Silicon Macs. 52 + 53 + This driver can also be built as a module. If so, the module 54 + will be called apple-nvmem-spmi. 55 + 43 56 config NVMEM_BCM_OCOTP 44 57 tristate "Broadcom On-Chip OTP Controller support" 45 58 depends on ARCH_BCM_IPROC || COMPILE_TEST
+2
drivers/nvmem/Makefile
··· 12 12 # Devices 13 13 obj-$(CONFIG_NVMEM_APPLE_EFUSES) += nvmem-apple-efuses.o 14 14 nvmem-apple-efuses-y := apple-efuses.o 15 + obj-$(CONFIG_NVMEM_APPLE_SPMI) += apple_nvmem_spmi.o 16 + apple_nvmem_spmi-y := apple-spmi-nvmem.o 15 17 obj-$(CONFIG_NVMEM_BCM_OCOTP) += nvmem-bcm-ocotp.o 16 18 nvmem-bcm-ocotp-y := bcm-ocotp.o 17 19 obj-$(CONFIG_NVMEM_BRCM_NVRAM) += nvmem_brcm_nvram.o
+62
drivers/nvmem/apple-spmi-nvmem.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only OR MIT 2 + /* 3 + * Apple SPMI NVMEM driver 4 + * 5 + * Copyright The Asahi Linux Contributors 6 + */ 7 + 8 + #include <linux/kernel.h> 9 + #include <linux/module.h> 10 + #include <linux/nvmem-provider.h> 11 + #include <linux/of.h> 12 + #include <linux/spmi.h> 13 + #include <linux/regmap.h> 14 + 15 + static const struct regmap_config apple_spmi_regmap_config = { 16 + .reg_bits = 16, 17 + .val_bits = 8, 18 + .max_register = 0xffff, 19 + }; 20 + 21 + static int apple_spmi_nvmem_probe(struct spmi_device *sdev) 22 + { 23 + struct regmap *regmap; 24 + struct nvmem_config nvmem_cfg = { 25 + .dev = &sdev->dev, 26 + .name = "spmi_nvmem", 27 + .id = NVMEM_DEVID_AUTO, 28 + .word_size = 1, 29 + .stride = 1, 30 + .size = 0xffff, 31 + .reg_read = (void *)regmap_bulk_read, 32 + .reg_write = (void *)regmap_bulk_write, 33 + }; 34 + 35 + regmap = devm_regmap_init_spmi_ext(sdev, &apple_spmi_regmap_config); 36 + if (IS_ERR(regmap)) 37 + return PTR_ERR(regmap); 38 + 39 + nvmem_cfg.priv = regmap; 40 + 41 + return PTR_ERR_OR_ZERO(devm_nvmem_register(&sdev->dev, &nvmem_cfg)); 42 + } 43 + 44 + static const struct of_device_id apple_spmi_nvmem_id_table[] = { 45 + { .compatible = "apple,spmi-nvmem" }, 46 + { }, 47 + }; 48 + MODULE_DEVICE_TABLE(of, apple_spmi_nvmem_id_table); 49 + 50 + static struct spmi_driver apple_spmi_nvmem_driver = { 51 + .probe = apple_spmi_nvmem_probe, 52 + .driver = { 53 + .name = "apple-spmi-nvmem", 54 + .of_match_table = apple_spmi_nvmem_id_table, 55 + }, 56 + }; 57 + 58 + module_spmi_driver(apple_spmi_nvmem_driver); 59 + 60 + MODULE_LICENSE("Dual MIT/GPL"); 61 + MODULE_AUTHOR("Hector Martin <marcan@marcan.st>"); 62 + MODULE_DESCRIPTION("Apple SPMI NVMEM driver");