本文整理汇总了C++中regmap_read函数的典型用法代码示例。如果您正苦于以下问题:C++ regmap_read函数的具体用法?C++ regmap_read怎么用?C++ regmap_read使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了regmap_read函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: lp873x_probe
static int lp873x_probe(struct i2c_client *client,
const struct i2c_device_id *ids)
{
struct lp873x *lp873;
int ret;
unsigned int otpid;
lp873 = devm_kzalloc(&client->dev, sizeof(*lp873), GFP_KERNEL);
if (!lp873)
return -ENOMEM;
lp873->dev = &client->dev;
lp873->regmap = devm_regmap_init_i2c(client, &lp873x_regmap_config);
if (IS_ERR(lp873->regmap)) {
ret = PTR_ERR(lp873->regmap);
dev_err(lp873->dev,
"Failed to initialize register map: %d\n", ret);
return ret;
}
ret = regmap_read(lp873->regmap, LP873X_REG_OTP_REV, &otpid);
if (ret) {
dev_err(lp873->dev, "Failed to read OTP ID\n");
return ret;
}
lp873->rev = otpid & LP873X_OTP_REV_OTP_ID;
i2c_set_clientdata(client, lp873);
ret = mfd_add_devices(lp873->dev, PLATFORM_DEVID_AUTO, lp873x_cells,
ARRAY_SIZE(lp873x_cells), NULL, 0, NULL);
return ret;
}
示例2: lm3639_flash_brightness_set
/* flash */
static void lm3639_flash_brightness_set(struct led_classdev *cdev,
enum led_brightness brightness)
{
int ret;
unsigned int reg_val;
struct lm3639_chip_data *pchip;
pchip = container_of(cdev, struct lm3639_chip_data, cdev_flash);
ret = regmap_read(pchip->regmap, REG_FLAG, ®_val);
if (ret < 0)
goto out;
if (reg_val != 0)
dev_info(pchip->dev, "last flag is 0x%x\n", reg_val);
/* torch off before flash control */
ret = regmap_update_bits(pchip->regmap, REG_ENABLE, 0x06, 0x00);
if (ret < 0)
goto out;
/* brightness 0 means off state */
if (!brightness)
return;
ret = regmap_update_bits(pchip->regmap,
REG_FL_CONF_1, 0x0F, brightness - 1);
if (ret < 0)
goto out;
ret = regmap_update_bits(pchip->regmap, REG_ENABLE, 0x06, 0x06);
if (ret < 0)
goto out;
return;
out:
dev_err(pchip->dev, "i2c failed to access register\n");
}
示例3: max8973_get_current_limit
static int max8973_get_current_limit(struct regulator_dev *rdev)
{
struct max8973_chip *max = rdev_get_drvdata(rdev);
unsigned int control2;
int ret;
ret = regmap_read(max->regmap, MAX8973_CONTROL2, &control2);
if (ret < 0) {
dev_err(max->dev, "register %d read failed: %d\n",
MAX8973_CONTROL2, ret);
return ret;
}
switch (control2 & MAX8973_CKKADV_TRIP_MASK) {
case MAX8973_CKKADV_TRIP_DISABLE:
return 15000000;
case MAX8973_CKKADV_TRIP_150mV_PER_US:
return 12000000;
case MAX8973_CKKADV_TRIP_75mV_PER_US:
return 9000000;
default:
break;
}
return 9000000;
}
示例4: arizona_poll_reg
static int arizona_poll_reg(struct arizona *arizona,
int timeout, unsigned int reg,
unsigned int mask, unsigned int target)
{
unsigned int val = 0;
int ret, i;
for (i = 0; i < timeout; i++) {
ret = regmap_read(arizona->regmap, reg, &val);
if (ret != 0) {
dev_err(arizona->dev, "Failed to read reg %u: %d\n",
reg, ret);
continue;
}
if ((val & mask) == target)
return 0;
msleep(1);
}
dev_err(arizona->dev, "Polling reg %u timed out: %x\n", reg, val);
return -ETIMEDOUT;
}
示例5: rockchip_pmu_set_idle_request
static int rockchip_pmu_set_idle_request(struct rockchip_pm_domain *pd,
bool idle)
{
const struct rockchip_domain_info *pd_info = pd->info;
struct rockchip_pmu *pmu = pd->pmu;
unsigned int val;
if (pd_info->req_mask == 0)
return 0;
regmap_update_bits(pmu->regmap, pmu->info->req_offset,
pd_info->req_mask, idle ? -1U : 0);
dsb(sy);
do {
regmap_read(pmu->regmap, pmu->info->ack_offset, &val);
} while ((val & pd_info->ack_mask) != (idle ? pd_info->ack_mask : 0));
while (rockchip_pmu_domain_is_idle(pd) != idle)
cpu_relax();
return 0;
}
示例6: __mtk_rtc_read_time
static int __mtk_rtc_read_time(struct mt6397_rtc *rtc,
struct rtc_time *tm, int *sec)
{
int ret;
u16 data[RTC_OFFSET_COUNT];
mutex_lock(&rtc->lock);
ret = regmap_bulk_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC,
data, RTC_OFFSET_COUNT);
if (ret < 0)
goto exit;
tm->tm_sec = data[RTC_OFFSET_SEC];
tm->tm_min = data[RTC_OFFSET_MIN];
tm->tm_hour = data[RTC_OFFSET_HOUR];
tm->tm_mday = data[RTC_OFFSET_DOM];
tm->tm_mon = data[RTC_OFFSET_MTH];
tm->tm_year = data[RTC_OFFSET_YEAR];
ret = regmap_read(rtc->regmap, rtc->addr_base + RTC_TC_SEC, sec);
exit:
mutex_unlock(&rtc->lock);
return ret;
}
示例7: ncp6335d_restore_working_reg
static int ncp6335d_restore_working_reg(struct device_node *node,
struct ncp6335d_info *dd)
{
int ret;
unsigned int val;
/* Restore register from back up register */
ret = regmap_read(dd->regmap, dd->vsel_backup_reg, &val);
if (ret < 0) {
dev_err(dd->dev, "Failed to get backup data from reg %d, ret = %d\n",
dd->vsel_backup_reg, ret);
return ret;
}
ret = regmap_update_bits(dd->regmap, dd->vsel_reg,
NCP6335D_VOUT_SEL_MASK, val);
if (ret < 0) {
dev_err(dd->dev, "Failed to update working reg %d, ret = %d\n",
dd->vsel_reg, ret);
return ret;
}
return ret;
}
示例8: lm363x_regulator_enable_time
static int lm363x_regulator_enable_time(struct regulator_dev *rdev)
{
enum lm363x_regulator_id id = rdev_get_id(rdev);
u8 val, addr, mask;
switch (id) {
case LM3631_LDO_CONT:
addr = LM3631_REG_ENTIME_VCONT;
mask = LM3631_ENTIME_CONT_MASK;
break;
case LM3631_LDO_OREF:
addr = LM3631_REG_ENTIME_VOREF;
mask = LM3631_ENTIME_MASK;
break;
case LM3631_LDO_POS:
addr = LM3631_REG_ENTIME_VPOS;
mask = LM3631_ENTIME_MASK;
break;
case LM3631_LDO_NEG:
addr = LM3631_REG_ENTIME_VNEG;
mask = LM3631_ENTIME_MASK;
break;
default:
return 0;
}
if (regmap_read(rdev->regmap, addr, (unsigned int *)&val))
return -EINVAL;
val = (val & mask) >> LM3631_ENTIME_SHIFT;
if (id == LM3631_LDO_CONT)
return ldo_cont_enable_time[val];
else
return ENABLE_TIME_USEC * val;
}
示例9: max77693_get_flash_faults
static int max77693_get_flash_faults(struct max77693_sub_led *sub_led)
{
struct max77693_led_device *led = sub_led_to_led(sub_led);
struct regmap *rmap = led->regmap;
unsigned int v;
u8 fault_open_mask, fault_short_mask;
int ret;
sub_led->flash_faults = 0;
if (led->iout_joint) {
fault_open_mask = FLASH_INT_FLED1_OPEN | FLASH_INT_FLED2_OPEN;
fault_short_mask = FLASH_INT_FLED1_SHORT |
FLASH_INT_FLED2_SHORT;
} else {
fault_open_mask = (sub_led->fled_id == FLED1) ?
FLASH_INT_FLED1_OPEN :
FLASH_INT_FLED2_OPEN;
fault_short_mask = (sub_led->fled_id == FLED1) ?
FLASH_INT_FLED1_SHORT :
FLASH_INT_FLED2_SHORT;
}
ret = regmap_read(rmap, MAX77693_LED_REG_FLASH_INT, &v);
if (ret < 0)
return ret;
if (v & fault_open_mask)
sub_led->flash_faults |= LED_FAULT_OVER_VOLTAGE;
if (v & fault_short_mask)
sub_led->flash_faults |= LED_FAULT_SHORT_CIRCUIT;
if (v & FLASH_INT_OVER_CURRENT)
sub_led->flash_faults |= LED_FAULT_OVER_CURRENT;
return 0;
}
示例10: fsl_sai_set_dai_sysclk_tr
static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int fsl_dir)
{
struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai);
u32 val_cr2, reg_cr2;
if (fsl_dir == FSL_FMT_TRANSMITTER)
reg_cr2 = FSL_SAI_TCR2;
else
reg_cr2 = FSL_SAI_RCR2;
regmap_read(sai->regmap, reg_cr2, &val_cr2);
val_cr2 &= ~FSL_SAI_CR2_MSEL_MASK;
switch (clk_id) {
case FSL_SAI_CLK_BUS:
val_cr2 |= FSL_SAI_CR2_MSEL_BUS;
break;
case FSL_SAI_CLK_MAST1:
val_cr2 |= FSL_SAI_CR2_MSEL_MCLK1;
break;
case FSL_SAI_CLK_MAST2:
val_cr2 |= FSL_SAI_CR2_MSEL_MCLK2;
break;
case FSL_SAI_CLK_MAST3:
val_cr2 |= FSL_SAI_CR2_MSEL_MCLK3;
break;
default:
return -EINVAL;
}
regmap_write(sai->regmap, reg_cr2, val_cr2);
return 0;
}
示例11: pmic8xxx_chk_sync_read
/*
* Synchronous read protocol for RevB0 onwards:
*
* 1. Write '1' to ReadState bit in KEYP_SCAN register
* 2. Wait 2*32KHz clocks, so that HW can successfully enter read mode
* synchronously
* 3. Read rows in old array first if events are more than one
* 4. Read rows in recent array
* 5. Wait 4*32KHz clocks
* 6. Write '0' to ReadState bit of KEYP_SCAN register so that hw can
* synchronously exit read mode.
*/
static int pmic8xxx_chk_sync_read(struct pmic8xxx_kp *kp)
{
int rc;
unsigned int scan_val;
rc = regmap_read(kp->regmap, KEYP_SCAN, &scan_val);
if (rc < 0) {
dev_err(kp->dev, "Error reading KEYP_SCAN reg, rc=%d\n", rc);
return rc;
}
scan_val |= 0x1;
rc = regmap_write(kp->regmap, KEYP_SCAN, scan_val);
if (rc < 0) {
dev_err(kp->dev, "Error writing KEYP_SCAN reg, rc=%d\n", rc);
return rc;
}
/* 2 * 32KHz clocks */
udelay((2 * DIV_ROUND_UP(USEC_PER_SEC, KEYP_CLOCK_FREQ)) + 1);
return rc;
}
示例12: lp8860_init
static int lp8860_init(struct lp8860_led *led)
{
unsigned int read_buf;
int ret, i, reg_count;
if (led->regulator) {
ret = regulator_enable(led->regulator);
if (ret) {
dev_err(&led->client->dev,
"Failed to enable regulator\n");
return ret;
}
}
if (led->enable_gpio)
gpiod_direction_output(led->enable_gpio, 1);
ret = lp8860_fault_check(led);
if (ret)
goto out;
ret = regmap_read(led->regmap, LP8860_STATUS, &read_buf);
if (ret)
goto out;
ret = lp8860_unlock_eeprom(led, LP8860_UNLOCK_EEPROM);
if (ret) {
dev_err(&led->client->dev, "Failed unlocking EEPROM\n");
goto out;
}
reg_count = ARRAY_SIZE(lp8860_eeprom_disp_regs) / sizeof(lp8860_eeprom_disp_regs[0]);
for (i = 0; i < reg_count; i++) {
ret = regmap_write(led->eeprom_regmap,
lp8860_eeprom_disp_regs[i].reg,
lp8860_eeprom_disp_regs[i].value);
if (ret) {
dev_err(&led->client->dev, "Failed writing EEPROM\n");
goto out;
}
}
ret = lp8860_unlock_eeprom(led, LP8860_LOCK_EEPROM);
if (ret)
goto out;
ret = regmap_write(led->regmap,
LP8860_EEPROM_CNTRL,
LP8860_PROGRAM_EEPROM);
if (ret) {
dev_err(&led->client->dev, "Failed programming EEPROM\n");
goto out;
}
return ret;
out:
if (ret)
if (led->enable_gpio)
gpiod_direction_output(led->enable_gpio, 0);
if (led->regulator) {
ret = regulator_disable(led->regulator);
if (ret)
dev_err(&led->client->dev,
"Failed to disable regulator\n");
}
return ret;
}
示例13: tsc200x_selftest_show
static ssize_t tsc200x_selftest_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
struct tsc200x *ts = dev_get_drvdata(dev);
unsigned int temp_high;
unsigned int temp_high_orig;
unsigned int temp_high_test;
bool success = true;
int error;
mutex_lock(&ts->mutex);
/*
* Test TSC200X communications via temp high register.
*/
__tsc200x_disable(ts);
error = regmap_read(ts->regmap, TSC200X_REG_TEMP_HIGH, &temp_high_orig);
if (error) {
dev_warn(dev, "selftest failed: read error %d\n", error);
success = false;
goto out;
}
temp_high_test = (temp_high_orig - 1) & MAX_12BIT;
error = regmap_write(ts->regmap, TSC200X_REG_TEMP_HIGH, temp_high_test);
if (error) {
dev_warn(dev, "selftest failed: write error %d\n", error);
success = false;
goto out;
}
error = regmap_read(ts->regmap, TSC200X_REG_TEMP_HIGH, &temp_high);
if (error) {
dev_warn(dev, "selftest failed: read error %d after write\n",
error);
success = false;
goto out;
}
if (temp_high != temp_high_test) {
dev_warn(dev, "selftest failed: %d != %d\n",
temp_high, temp_high_test);
success = false;
}
/* hardware reset */
tsc200x_set_reset(ts, false);
usleep_range(100, 500); /* only 10us required */
tsc200x_set_reset(ts, true);
if (!success)
goto out;
/* test that the reset really happened */
error = regmap_read(ts->regmap, TSC200X_REG_TEMP_HIGH, &temp_high);
if (error) {
dev_warn(dev, "selftest failed: read error %d after reset\n",
error);
success = false;
goto out;
}
if (temp_high != temp_high_orig) {
dev_warn(dev, "selftest failed after reset: %d != %d\n",
temp_high, temp_high_orig);
success = false;
}
out:
__tsc200x_enable(ts);
mutex_unlock(&ts->mutex);
return sprintf(buf, "%d\n", success);
}
示例14: __at86rf230_read
static inline int
__at86rf230_read(struct at86rf230_local *lp,
unsigned int addr, unsigned int *data)
{
return regmap_read(lp->regmap, addr, data);
}
示例15: tps51632_init_dcdc
static int __devinit tps51632_init_dcdc(struct tps51632_chip *tps,
struct tps51632_regulator_platform_data *pdata)
{
int ret;
uint8_t control = 0;
int vsel;
unsigned int vmax;
if (pdata->enable_pwm) {
control |= TPS51632_DVFS_PWMEN;
tps->pwm_enabled = pdata->enable_pwm;
}
vsel = DIV_ROUND_UP(pdata->base_voltage_uV -
TPS51632_MIN_VOLATGE, TPS51632_VOLATGE_STEP) + 0x19;
ret = regmap_write(tps->regmap, TPS51632_VOLTAGE_BASE_REG, vsel);
if (ret < 0) {
dev_err(tps->dev, "BASE reg write failed, err %d\n", ret);
return ret;
}
if (pdata->dvfs_step_20mV)
control |= TPS51632_DVFS_STEP_20;
if (pdata->enable_vmax_alarm)
control |= TPS51632_DVFS_VMAX_PG;
if (pdata->enable_overcurrent_alram)
control |= TPS51632_DVFS_OCA_EN;
if (pdata->max_voltage_uV) {
/**
* TPS51632 hw behavior: VMAX register can be write only
* once as it get locked after first write. The lock get
* reset only when device is power-reset.
* Write register only when lock bit is not enabled.
*/
ret = regmap_read(tps->regmap, TPS51632_VMAX_REG, &vmax);
if (ret < 0) {
dev_err(tps->dev, "VMAX read failed, err %d\n", ret);
return ret;
}
if (vmax & TPS51632_VMAX_LOCK)
goto skip_vmax_config;
vsel = DIV_ROUND_UP(pdata->max_voltage_uV -
TPS51632_MIN_VOLATGE, TPS51632_VOLATGE_STEP) + 0x19;
ret = regmap_write(tps->regmap, TPS51632_VMAX_REG, vsel);
if (ret < 0) {
dev_err(tps->dev, "VMAX write failed, err %d\n", ret);
return ret;
}
}
skip_vmax_config:
ret = regmap_write(tps->regmap, TPS51632_DVFS_CONTROL_REG, control);
if (ret < 0) {
dev_err(tps->dev, "DVFS reg write failed, err %d\n", ret);
return ret;
}
tps->change_uv_per_us = max(6000u, pdata->slew_rate_uv_per_us);
vsel = BIT(tps->change_uv_per_us/6000 - 1);
ret = regmap_write(tps->regmap, TPS51632_SLEW_REGS, vsel);
if (ret < 0)
dev_err(tps->dev, "SLEW reg write failed, err %d\n", ret);
return ret;
}