static const char * const axp20x_model_names[] = { "AXP152", "AXP202", "AXP209", "AXP221", "AXP223", "AXP288", "AXP803", "AXP806", "AXP809", "AXP813", }; static const struct regmap_range axp152_writeable_ranges[] = { regmap_reg_range(AXP152_LDO3456_DC1234_CTRL, AXP152_IRQ3_STATE), regmap_reg_range(AXP152_DCDC_MODE, AXP152_PWM1_DUTY_CYCLE), }; static const struct regmap_range axp152_volatile_ranges[] = { regmap_reg_range(AXP152_PWR_OP_MODE, AXP152_PWR_OP_MODE), regmap_reg_range(AXP152_IRQ1_EN, AXP152_IRQ3_STATE), regmap_reg_range(AXP152_GPIO_INPUT, AXP152_GPIO_INPUT), }; static const struct regmap_access_table axp152_writeable_table = { .yes_ranges = axp152_writeable_ranges, .n_yes_ranges = ARRAY_SIZE(axp152_writeable_ranges), }; static const struct regmap_access_table axp152_volatile_table = {
* 3) After the conversion is done TSC200X drives DAV line down. * 4) GPIO IRQ is received and tsc200x_irq_thread() is scheduled. * 5) tsc200x_irq_thread() queues up a transfer to fetch the x, y, z1, z2 * values. * 6) tsc200x_irq_thread() reports coordinates to input layer and sets up * tsc200x_penup_timer() to be called after TSC200X_PENUP_TIME_MS (40ms). * 7) When the penup timer expires, there have not been touch or DAV interrupts * during the last 40ms which means the pen has been lifted. * * ESD recovery via a hardware reset is done if the TSC200X doesn't respond * after a configurable period (in ms) of activity. If esd_timeout is 0, the * watchdog is disabled. */ static const struct regmap_range tsc200x_writable_ranges[] = { regmap_reg_range(TSC200X_REG_AUX_HIGH, TSC200X_REG_CFR2), }; static const struct regmap_access_table tsc200x_writable_table = { .yes_ranges = tsc200x_writable_ranges, .n_yes_ranges = ARRAY_SIZE(tsc200x_writable_ranges), }; const struct regmap_config tsc200x_regmap_config = { .reg_bits = 8, .val_bits = 16, .reg_stride = 0x08, .max_register = 0x78, .read_flag_mask = TSC200X_REG_READ, .write_flag_mask = TSC200X_REG_PND0, .wr_table = &tsc200x_writable_table,
{ 0x1f, 0x00 }, { 0x20, 0x00 }, { 0x21, 0x00 }, { 0x22, 0x00 }, { 0x23, 0x00 }, { 0x24, 0x00 }, { 0x25, 0x00 }, { 0x26, 0x00 }, { 0x27, 0x2d }, { 0x28, 0xc0 }, { 0x2b, 0x00 }, { 0x2c, 0x0c }, }; static const struct regmap_range sta32x_write_regs_range[] = { regmap_reg_range(STA32X_CONFA, STA32X_FDRC2), }; static const struct regmap_range sta32x_read_regs_range[] = { regmap_reg_range(STA32X_CONFA, STA32X_FDRC2), }; static const struct regmap_range sta32x_volatile_regs_range[] = { regmap_reg_range(STA32X_CFADDR2, STA32X_CFUD), }; static const struct regmap_access_table sta32x_write_regs = { .yes_ranges = sta32x_write_regs_range, .n_yes_ranges = ARRAY_SIZE(sta32x_write_regs_range), };
/* shunt resistance */ static SENSOR_DEVICE_ATTR_RW(shunt1_resistor, ina3221_shunt, INA3221_CHANNEL1); static SENSOR_DEVICE_ATTR_RW(shunt2_resistor, ina3221_shunt, INA3221_CHANNEL2); static SENSOR_DEVICE_ATTR_RW(shunt3_resistor, ina3221_shunt, INA3221_CHANNEL3); static struct attribute *ina3221_attrs[] = { &sensor_dev_attr_shunt1_resistor.dev_attr.attr, &sensor_dev_attr_shunt2_resistor.dev_attr.attr, &sensor_dev_attr_shunt3_resistor.dev_attr.attr, NULL, }; ATTRIBUTE_GROUPS(ina3221); static const struct regmap_range ina3221_yes_ranges[] = { regmap_reg_range(INA3221_CONFIG, INA3221_BUS3), regmap_reg_range(INA3221_MASK_ENABLE, INA3221_MASK_ENABLE), }; static const struct regmap_access_table ina3221_volatile_table = { .yes_ranges = ina3221_yes_ranges, .n_yes_ranges = ARRAY_SIZE(ina3221_yes_ranges), }; static const struct regmap_config ina3221_regmap_config = { .reg_bits = 8, .val_bits = 16, .cache_type = REGCACHE_RBTREE, .volatile_table = &ina3221_volatile_table, };
static const struct snd_kcontrol_new tas5711_controls[] = { SOC_SINGLE_TLV("Master Volume", TAS571X_MVOL_REG, 0, 0xff, 1, tas5711_volume_tlv), SOC_DOUBLE_R_TLV("Speaker Volume", TAS571X_CH1_VOL_REG, TAS571X_CH2_VOL_REG, 0, 0xff, 1, tas5711_volume_tlv), SOC_DOUBLE("Speaker Switch", TAS571X_SOFT_MUTE_REG, TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, 1, 1), }; static const struct regmap_range tas571x_readonly_regs_range[] = { regmap_reg_range(TAS571X_CLK_CTRL_REG, TAS571X_DEV_ID_REG), }; static const struct regmap_range tas571x_volatile_regs_range[] = { regmap_reg_range(TAS571X_CLK_CTRL_REG, TAS571X_ERR_STATUS_REG), regmap_reg_range(TAS571X_OSC_TRIM_REG, TAS571X_OSC_TRIM_REG), }; static const struct regmap_access_table tas571x_write_regs = { .no_ranges = tas571x_readonly_regs_range, .n_no_ranges = ARRAY_SIZE(tas571x_readonly_regs_range), }; static const struct regmap_access_table tas571x_volatile_regs = { .yes_ranges = tas571x_volatile_regs_range, .n_yes_ranges = ARRAY_SIZE(tas571x_volatile_regs_range),
#include <linux/mfd/axp20x.h> #include <linux/mfd/core.h> #include <linux/of_device.h> #include <linux/of_irq.h> #include <linux/acpi.h> #define AXP20X_OFF 0x80 static const char const *axp20x_model_names[] = { "AXP202", "AXP209", "AXP288", }; static const struct regmap_range axp20x_writeable_ranges[] = { regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_IRQ5_STATE), regmap_reg_range(AXP20X_DCDC_MODE, AXP20X_FG_RES), }; static const struct regmap_range axp20x_volatile_ranges[] = { regmap_reg_range(AXP20X_IRQ1_EN, AXP20X_IRQ5_STATE), }; static const struct regmap_access_table axp20x_writeable_table = { .yes_ranges = axp20x_writeable_ranges, .n_yes_ranges = ARRAY_SIZE(axp20x_writeable_ranges), }; static const struct regmap_access_table axp20x_volatile_table = { .yes_ranges = axp20x_volatile_ranges, .n_yes_ranges = ARRAY_SIZE(axp20x_volatile_ranges),
{ 0x39, 0x01 }, { 0x3a, 0xee }, { 0x3b, 0xff }, { 0x3c, 0x7e }, { 0x3d, 0xc0 }, { 0x3e, 0x26 }, { 0x3f, 0x00 }, { 0x48, 0x00 }, { 0x49, 0x00 }, { 0x4a, 0x00 }, { 0x4b, 0x04 }, { 0x4c, 0x00 }, }; static const struct regmap_range sta350_write_regs_range[] = { regmap_reg_range(STA350_CONFA, STA350_AUTO2), regmap_reg_range(STA350_C1CFG, STA350_FDRC2), regmap_reg_range(STA350_EQCFG, STA350_EVOLRES), regmap_reg_range(STA350_NSHAPE, STA350_MISC2), }; static const struct regmap_range sta350_read_regs_range[] = { regmap_reg_range(STA350_CONFA, STA350_AUTO2), regmap_reg_range(STA350_C1CFG, STA350_STATUS), regmap_reg_range(STA350_EQCFG, STA350_EVOLRES), regmap_reg_range(STA350_NSHAPE, STA350_MISC2), }; static const struct regmap_range sta350_volatile_regs_range[] = { regmap_reg_range(STA350_CFADDR2, STA350_CFUD), regmap_reg_range(STA350_STATUS, STA350_STATUS),
ret = of_property_read_u32(rnode, "ti,active-discharge-time", &rpdata->active_discharge_time); if (ret < 0) { dev_err(dev, "Discharge time read failed: %d\n", ret); return ret; } } } return 0; } static const struct regmap_range tps65132_no_reg_ranges[] = { regmap_reg_range(TPS65132_REG_APPS_DISP_DISN + 1, TPS65132_REG_CONTROL - 1), }; static const struct regmap_access_table tps65132_no_reg_table = { .no_ranges = tps65132_no_reg_ranges, .n_no_ranges = ARRAY_SIZE(tps65132_no_reg_ranges), }; static const struct regmap_config tps65132_regmap_config = { .reg_bits = 8, .val_bits = 8, .max_register = TPS65132_REG_CONTROL + 1, .cache_type = REGCACHE_NONE, .rd_table = &tps65132_no_reg_table, .wr_table = &tps65132_no_reg_table, };
static bool twl4030_49_nop_reg(struct device *dev, unsigned int reg) { switch (reg) { case 0x00: case 0x03: case 0x40: case 0x41: case 0x42: return false; default: return true; } } static const struct regmap_range twl4030_49_volatile_ranges[] = { regmap_reg_range(TWL4030_BASEADD_TEST, 0xff), }; static const struct regmap_access_table twl4030_49_volatile_table = { .yes_ranges = twl4030_49_volatile_ranges, .n_yes_ranges = ARRAY_SIZE(twl4030_49_volatile_ranges), }; static const struct regmap_config twl4030_regmap_config[4] = { { /* Address 0x48 */ .reg_bits = 8, .val_bits = 8, .max_register = 0xff, }, {
* * Copyright (C) Josef Gajdusek <*****@*****.**> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include <linux/module.h> #include <linux/spi/spi.h> #include <linux/iio/iio.h> #include "hmc5843.h" static const struct regmap_range hmc5843_readable_ranges[] = { regmap_reg_range(0, HMC5843_ID_END), }; static const struct regmap_access_table hmc5843_readable_table = { .yes_ranges = hmc5843_readable_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_readable_ranges), }; static const struct regmap_range hmc5843_writable_ranges[] = { regmap_reg_range(0, HMC5843_MODE_REG), }; static const struct regmap_access_table hmc5843_writable_table = { .yes_ranges = hmc5843_writable_ranges, .n_yes_ranges = ARRAY_SIZE(hmc5843_writable_ranges), };
.resources = power_resources, .num_resources = ARRAY_SIZE(power_resources), }, }; static struct regmap_irq_chip max77620_top_irq_chip = { .name = "max77620-top", .irqs = max77620_top_irqs, .num_irqs = ARRAY_SIZE(max77620_top_irqs), .num_regs = 2, .status_base = MAX77620_REG_IRQTOP, .mask_base = MAX77620_REG_IRQTOPM, }; static const struct regmap_range max77620_readable_ranges[] = { regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4), }; static const struct regmap_access_table max77620_readable_table = { .yes_ranges = max77620_readable_ranges, .n_yes_ranges = ARRAY_SIZE(max77620_readable_ranges), }; static const struct regmap_range max20024_readable_ranges[] = { regmap_reg_range(MAX77620_REG_CNFGGLBL1, MAX77620_REG_DVSSD4), regmap_reg_range(MAX20024_REG_MAX_ADD, MAX20024_REG_MAX_ADD), }; static const struct regmap_access_table max20024_readable_table = { .yes_ranges = max20024_readable_ranges, .n_yes_ranges = ARRAY_SIZE(max20024_readable_ranges),
*/ #include <linux/i2c.h> #include <linux/interrupt.h> #include <linux/mfd/core.h> #include <linux/module.h> #include <linux/mfd/bd9571mwv.h> static const struct mfd_cell bd9571mwv_cells[] = { { .name = "bd9571mwv-regulator", }, { .name = "bd9571mwv-gpio", }, }; static const struct regmap_range bd9571mwv_readable_yes_ranges[] = { regmap_reg_range(BD9571MWV_VENDOR_CODE, BD9571MWV_PRODUCT_REVISION), regmap_reg_range(BD9571MWV_BKUP_MODE_CNT, BD9571MWV_BKUP_MODE_CNT), regmap_reg_range(BD9571MWV_AVS_SET_MONI, BD9571MWV_AVS_DVFS_VID(3)), regmap_reg_range(BD9571MWV_VD18_VID, BD9571MWV_VD33_VID), regmap_reg_range(BD9571MWV_DVFS_VINIT, BD9571MWV_DVFS_VINIT), regmap_reg_range(BD9571MWV_DVFS_SETVMAX, BD9571MWV_DVFS_MONIVDAC), regmap_reg_range(BD9571MWV_GPIO_IN, BD9571MWV_GPIO_IN), regmap_reg_range(BD9571MWV_GPIO_INT, BD9571MWV_GPIO_INTMASK), regmap_reg_range(BD9571MWV_INT_INTREQ, BD9571MWV_INT_INTMASK), }; static const struct regmap_access_table bd9571mwv_readable_table = { .yes_ranges = bd9571mwv_readable_yes_ranges, .n_yes_ranges = ARRAY_SIZE(bd9571mwv_readable_yes_ranges), };
u32 val = 0; if (as3722->en_intern_int_pullup) val |= AS3722_INT_PULL_UP; if (as3722->en_intern_i2c_pullup) val |= AS3722_I2C_PULL_UP; ret = as3722_update_bits(as3722, AS3722_IOVOLTAGE_REG, AS3722_INT_PULL_UP | AS3722_I2C_PULL_UP, val); if (ret < 0) dev_err(as3722->dev, "IOVOLTAGE_REG update failed: %d\n", ret); return ret; } static const struct regmap_range as3722_readable_ranges[] = { regmap_reg_range(AS3722_SD0_VOLTAGE_REG, AS3722_SD6_VOLTAGE_REG), regmap_reg_range(AS3722_GPIO0_CONTROL_REG, AS3722_LDO7_VOLTAGE_REG), regmap_reg_range(AS3722_LDO9_VOLTAGE_REG, AS3722_REG_SEQU_MOD3_REG), regmap_reg_range(AS3722_SD_PHSW_CTRL_REG, AS3722_PWM_CONTROL_H_REG), regmap_reg_range(AS3722_WATCHDOG_TIMER_REG, AS3722_WATCHDOG_TIMER_REG), regmap_reg_range(AS3722_WATCHDOG_SOFTWARE_SIGNAL_REG, AS3722_BATTERY_VOLTAGE_MONITOR2_REG), regmap_reg_range(AS3722_SD_CONTROL_REG, AS3722_PWM_VCONTROL4_REG), regmap_reg_range(AS3722_BB_CHARGER_REG, AS3722_SRAM_REG), regmap_reg_range(AS3722_RTC_ACCESS_REG, AS3722_RTC_ACCESS_REG), regmap_reg_range(AS3722_RTC_STATUS_REG, AS3722_TEMP_STATUS_REG), regmap_reg_range(AS3722_ADC0_CONTROL_REG, AS3722_ADC_CONFIGURATION_REG), regmap_reg_range(AS3722_ASIC_ID1_REG, AS3722_ASIC_ID2_REG), regmap_reg_range(AS3722_LOCK_REG, AS3722_LOCK_REG), regmap_reg_range(AS3722_FUSE7_REG, AS3722_FUSE7_REG), };
}; static const struct iio_chan_spec pa12203001_channels[] = { { .type = IIO_LIGHT, .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE), }, { .type = IIO_PROXIMITY, .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), } }; static const struct regmap_range pa12203001_volatile_regs_ranges[] = { regmap_reg_range(PA12203001_REG_ADL, PA12203001_REG_ADL + 1), regmap_reg_range(PA12203001_REG_PDH, PA12203001_REG_PDH), }; static const struct regmap_access_table pa12203001_volatile_regs = { .yes_ranges = pa12203001_volatile_regs_ranges, .n_yes_ranges = ARRAY_SIZE(pa12203001_volatile_regs_ranges), }; static const struct regmap_config pa12203001_regmap_config = { .reg_bits = 8, .val_bits = 8, .max_register = PA12203001_REG_PSET, .cache_type = REGCACHE_RBTREE, .volatile_table = &pa12203001_volatile_regs, };