0%
注册部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| static int qpnp_wled_probe(struct spmi_device *spmi) { .................................
INIT_WORK(&wled->work, qpnp_wled_work); wled->ramp_ms = QPNP_WLED_RAMP_DLY_MS; wled->ramp_step = 1;
wled->cdev.brightness_set = qpnp_wled_set; wled->cdev.brightness_get = qpnp_wled_get;
wled->cdev.max_brightness = WLED_MAX_LEVEL_4095;
rc = led_classdev_register(&spmi->dev, &wled->cdev); ................................. }
|
应用部分
1 2 3 4 5 6 7 8 9 10
| static void qpnp_wled_set(struct led_classdev *led_cdev, enum led_brightness level) { .................................
schedule_work(&wled->work);
................................
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| static void qpnp_wled_work(struct work_struct *work) { ...........................................
rc = qpnp_wled_set_level(wled, level);
..........................................
rc = qpnp_wled_module_en(wled, wled->ctrl_base, !!level); .........................................
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| static int qpnp_wled_set_level(struct qpnp_wled *wled, int level) { ................................
reg = level & QPNP_WLED_BRIGHT_LSB_MASK; rc = qpnp_wled_write_reg(wled, ®, QPNP_WLED_BRIGHT_LSB_REG(wled->sink_base, wled->strings[i])); reg = level >> QPNP_WLED_BRIGHT_MSB_SHIFT; reg = reg & QPNP_WLED_BRIGHT_MSB_MASK; rc = qpnp_wled_write_reg(wled, ®, QPNP_WLED_BRIGHT_MSB_REG(wled->sink_base, wled->strings[i]));
................................... }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| static int qpnp_wled_module_en(struct qpnp_wled *wled, u16 base_addr, bool state) { rc = qpnp_wled_read_reg(wled, ®, QPNP_WLED_MODULE_EN_REG(base_addr)); if (rc < 0) return rc; reg &= QPNP_WLED_MODULE_EN_MASK; reg |= (state << QPNP_WLED_MODULE_EN_SHIFT); rc = qpnp_wled_write_reg(wled, ®, QPNP_WLED_MODULE_EN_REG(base_addr)); if (rc) return rc; }
|
1 2 3 4 5 6
| static int qpnp_wled_write_reg(struct qpnp_wled *wled, u8 *data, u16 addr) { rc = spmi_ext_register_writel(wled->spmi->ctrl, wled->spmi->sid, addr, data, 1);
}
|
卸载部分
1 2 3 4
| int spmi_ext_register_writel(struct spmi_controller *ctrl, u8 sid, u16 addr, u8 *buf, int len) { }
|