static ssize_t store_als_en(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct lm3533_bl *bl = dev_get_drvdata(dev); int ctrlbank = lm3533_bl_get_ctrlbank_id(bl); int enable; u8 val; u8 mask; int ret; if (kstrtoint(buf, 0, &enable)) return -EINVAL; mask = 1 << (2 * ctrlbank); if (enable) val = mask; else val = 0; ret = lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, mask); if (ret) return ret; return len; }
static ssize_t store_linear(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct lm3533_bl *bl = dev_get_drvdata(dev); unsigned long linear; u8 mask; u8 val; int ret; if (kstrtoul(buf, 0, &linear)) return -EINVAL; mask = 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); if (linear) val = mask; else val = 0; ret = lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, mask); if (ret) return ret; return len; }
/* * LVLED output config -- output lvled controlled by LED led */ static int lm3533_set_lvled_config(struct lm3533 *lm3533, u8 lvled, u8 led) { u8 reg; u8 val; u8 mask; int shift; int ret; if (lvled == 0 || lvled > LM3533_LVLED_ID_MAX) return -EINVAL; if (led > LM3533_LED_ID_MAX) return -EINVAL; if (lvled < 4) { reg = LM3533_REG_OUTPUT_CONF1; shift = 2 * lvled; } else { reg = LM3533_REG_OUTPUT_CONF2; shift = 2 * (lvled - 4); } mask = LM3533_LED_ID_MASK << shift; val = led << shift; ret = lm3533_update(lm3533, reg, val, mask); if (ret) dev_err(lm3533->dev, "failed to set lvled config\n"); return ret; }
static int __devinit lm3533_bl_setup(struct lm3533_bl *bl, struct lm3533_bl_platform_data *pdata) { int ret; u8 mask; u8 val; ret = lm3533_ctrlbank_set_max_current(&bl->cb, pdata->max_current); if (ret) return ret; mask = 1 << (2 * lm3533_bl_get_ctrlbank_id(bl) + 1); if (pdata->linear) val = mask; else val = 0; ret = lm3533_update(bl->lm3533, LM3533_REG_CTRLBANK_AB_BCONF, val, mask); if (ret) return ret; return lm3533_ctrlbank_set_pwm(&bl->cb, pdata->pwm); }
static int lm3533_set_boost_ovp(struct lm3533 *lm3533, enum lm3533_boost_ovp ovp) { int ret; ret = lm3533_update(lm3533, LM3533_REG_BOOST_PWM, ovp << LM3533_BOOST_OVP_SHIFT, LM3533_BOOST_OVP_MASK); if (ret) dev_err(lm3533->dev, "failed to set boost ovp\n"); return ret; }
static int lm3533_set_boost_freq(struct lm3533 *lm3533, enum lm3533_boost_freq freq) { int ret; ret = lm3533_update(lm3533, LM3533_REG_BOOST_PWM, freq << LM3533_BOOST_FREQ_SHIFT, LM3533_BOOST_FREQ_MASK); if (ret) dev_err(lm3533->dev, "failed to set boost frequency\n"); return ret; }
int lm3533_ctrlbank_disable(struct lm3533_ctrlbank *cb) { u8 mask; int ret; dev_dbg(cb->dev, "%s - %d\n", __func__, cb->id); mask = 1 << cb->id; ret = lm3533_update(cb->lm3533, LM3533_REG_CTRLBANK_ENABLE, 0, mask); if (ret) dev_err(cb->dev, "failed to disable ctrlbank %d\n", cb->id); return ret; }
static int lm3533_als_set_int_mode(struct iio_dev *indio_dev, int enable) { struct lm3533_als *als = iio_priv(indio_dev); u8 mask = LM3533_ALS_INT_ENABLE_MASK; u8 val; int ret; if (enable) val = mask; else val = 0; ret = lm3533_update(als->lm3533, LM3533_REG_ALS_ZONE_INFO, val, mask); if (ret) { dev_err(&indio_dev->dev, "failed to set int mode %d\n", enable); return ret; } return 0; }
/* * HVLED output config -- output hvled controlled by backlight bl */ static int lm3533_set_hvled_config(struct lm3533 *lm3533, u8 hvled, u8 bl) { u8 val; u8 mask; int shift; int ret; if (hvled == 0 || hvled > LM3533_HVLED_ID_MAX) return -EINVAL; if (bl > LM3533_BL_ID_MAX) return -EINVAL; shift = hvled - 1; mask = LM3533_BL_ID_MASK << shift; val = bl << shift; ret = lm3533_update(lm3533, LM3533_REG_OUTPUT_CONF1, val, mask); if (ret) dev_err(lm3533->dev, "failed to set hvled config\n"); return ret; }