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

Merge remote-tracking branch 'regmap/topic/spmi' into regmap-next

+100 -1
+4 -1
drivers/base/regmap/Kconfig
··· 3 3 # subsystems should select the appropriate symbols. 4 4 5 5 config REGMAP 6 - default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_MMIO || REGMAP_IRQ) 6 + default y if (REGMAP_I2C || REGMAP_SPI || REGMAP_SPMI || REGMAP_MMIO || REGMAP_IRQ) 7 7 select LZO_COMPRESS 8 8 select LZO_DECOMPRESS 9 9 select IRQ_DOMAIN if REGMAP_IRQ ··· 13 13 tristate 14 14 15 15 config REGMAP_SPI 16 + tristate 17 + 18 + config REGMAP_SPMI 16 19 tristate 17 20 18 21 config REGMAP_MMIO
+1
drivers/base/regmap/Makefile
··· 3 3 obj-$(CONFIG_DEBUG_FS) += regmap-debugfs.o 4 4 obj-$(CONFIG_REGMAP_I2C) += regmap-i2c.o 5 5 obj-$(CONFIG_REGMAP_SPI) += regmap-spi.o 6 + obj-$(CONFIG_REGMAP_SPMI) += regmap-spmi.o 6 7 obj-$(CONFIG_REGMAP_MMIO) += regmap-mmio.o 7 8 obj-$(CONFIG_REGMAP_IRQ) += regmap-irq.o
+90
drivers/base/regmap/regmap-spmi.c
··· 1 + /* 2 + * Register map access API - SPMI support 3 + * 4 + * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 5 + * 6 + * Based on regmap-i2c.c: 7 + * Copyright 2011 Wolfson Microelectronics plc 8 + * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> 9 + * 10 + * This program is free software; you can redistribute it and/or modify 11 + * it under the terms of the GNU General Public License version 2 and 12 + * only version 2 as published by the Free Software Foundation. 13 + * 14 + * This program is distributed in the hope that it will be useful, 15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 + * GNU General Public License for more details. 18 + * 19 + */ 20 + #include <linux/regmap.h> 21 + #include <linux/spmi.h> 22 + #include <linux/module.h> 23 + #include <linux/init.h> 24 + 25 + static int regmap_spmi_read(void *context, 26 + const void *reg, size_t reg_size, 27 + void *val, size_t val_size) 28 + { 29 + BUG_ON(reg_size != 2); 30 + return spmi_ext_register_readl(context, *(u16 *)reg, 31 + val, val_size); 32 + } 33 + 34 + static int regmap_spmi_gather_write(void *context, 35 + const void *reg, size_t reg_size, 36 + const void *val, size_t val_size) 37 + { 38 + BUG_ON(reg_size != 2); 39 + return spmi_ext_register_writel(context, *(u16 *)reg, val, val_size); 40 + } 41 + 42 + static int regmap_spmi_write(void *context, const void *data, 43 + size_t count) 44 + { 45 + BUG_ON(count < 2); 46 + return regmap_spmi_gather_write(context, data, 2, data + 2, count - 2); 47 + } 48 + 49 + static struct regmap_bus regmap_spmi = { 50 + .read = regmap_spmi_read, 51 + .write = regmap_spmi_write, 52 + .gather_write = regmap_spmi_gather_write, 53 + .reg_format_endian_default = REGMAP_ENDIAN_NATIVE, 54 + .val_format_endian_default = REGMAP_ENDIAN_NATIVE, 55 + }; 56 + 57 + /** 58 + * regmap_init_spmi(): Initialize register map 59 + * 60 + * @sdev: Device that will be interacted with 61 + * @config: Configuration for register map 62 + * 63 + * The return value will be an ERR_PTR() on error or a valid pointer to 64 + * a struct regmap. 65 + */ 66 + struct regmap *regmap_init_spmi(struct spmi_device *sdev, 67 + const struct regmap_config *config) 68 + { 69 + return regmap_init(&sdev->dev, &regmap_spmi, sdev, config); 70 + } 71 + EXPORT_SYMBOL_GPL(regmap_init_spmi); 72 + 73 + /** 74 + * devm_regmap_init_spmi(): Initialise managed register map 75 + * 76 + * @sdev: Device that will be interacted with 77 + * @config: Configuration for register map 78 + * 79 + * The return value will be an ERR_PTR() on error or a valid pointer 80 + * to a struct regmap. The regmap will be automatically freed by the 81 + * device management code. 82 + */ 83 + struct regmap *devm_regmap_init_spmi(struct spmi_device *sdev, 84 + const struct regmap_config *config) 85 + { 86 + return devm_regmap_init(&sdev->dev, &regmap_spmi, sdev, config); 87 + } 88 + EXPORT_SYMBOL_GPL(devm_regmap_init_spmi); 89 + 90 + MODULE_LICENSE("GPL");
+5
include/linux/regmap.h
··· 23 23 struct i2c_client; 24 24 struct irq_domain; 25 25 struct spi_device; 26 + struct spmi_device; 26 27 struct regmap; 27 28 struct regmap_range_cfg; 28 29 struct regmap_field; ··· 321 320 const struct regmap_config *config); 322 321 struct regmap *regmap_init_spi(struct spi_device *dev, 323 322 const struct regmap_config *config); 323 + struct regmap *regmap_init_spmi(struct spmi_device *dev, 324 + const struct regmap_config *config); 324 325 struct regmap *regmap_init_mmio_clk(struct device *dev, const char *clk_id, 325 326 void __iomem *regs, 326 327 const struct regmap_config *config); ··· 335 332 const struct regmap_config *config); 336 333 struct regmap *devm_regmap_init_spi(struct spi_device *dev, 337 334 const struct regmap_config *config); 335 + struct regmap *devm_regmap_init_spmi(struct spmi_device *dev, 336 + const struct regmap_config *config); 338 337 struct regmap *devm_regmap_init_mmio_clk(struct device *dev, const char *clk_id, 339 338 void __iomem *regs, 340 339 const struct regmap_config *config);