Lines Matching refs:flash_data
162 struct qcom_flash_data *flash_data; member
177 struct qcom_flash_data *flash_data = led->flash_data; in set_flash_module_en() local
184 mutex_lock(&flash_data->lock); in set_flash_module_en()
186 flash_data->chan_en_bits |= led_mask; in set_flash_module_en()
188 flash_data->chan_en_bits &= ~led_mask; in set_flash_module_en()
190 enable = !!flash_data->chan_en_bits; in set_flash_module_en()
191 rc = regmap_field_write(flash_data->r_fields[REG_MODULE_EN], enable); in set_flash_module_en()
194 mutex_unlock(&flash_data->lock); in set_flash_module_en()
201 struct qcom_flash_data *flash_data = led->flash_data; in update_allowed_flash_current() local
205 mutex_lock(&flash_data->lock); in update_allowed_flash_current()
212 if (flash_data->total_ma >= led->current_in_use_ma) in update_allowed_flash_current()
213 flash_data->total_ma -= led->current_in_use_ma; in update_allowed_flash_current()
215 flash_data->total_ma = 0; in update_allowed_flash_current()
229 rc = regmap_field_read(flash_data->r_fields[REG_THERM_THRSH1], &thrsh[0]); in update_allowed_flash_current()
233 rc = regmap_field_read(flash_data->r_fields[REG_THERM_THRSH2], &thrsh[1]); in update_allowed_flash_current()
237 if (flash_data->hw_type == QCOM_MVFLASH_3CH) { in update_allowed_flash_current()
238 rc = regmap_field_read(flash_data->r_fields[REG_THERM_THRSH3], &thrsh[2]); in update_allowed_flash_current()
244 if (flash_data->hw_type == QCOM_MVFLASH_4CH) in update_allowed_flash_current()
245 min_thrsh = (flash_data->revision == FLASH_4CH_REVISION_V0P1) ? in update_allowed_flash_current()
248 rc = regmap_field_write(flash_data->r_fields[REG_THERM_THRSH1], min_thrsh); in update_allowed_flash_current()
252 if (flash_data->hw_type == QCOM_MVFLASH_4CH) in update_allowed_flash_current()
259 rc = regmap_field_write(flash_data->r_fields[REG_THERM_THRSH2], min_thrsh); in update_allowed_flash_current()
263 if (flash_data->hw_type == QCOM_MVFLASH_3CH) { in update_allowed_flash_current()
264 rc = regmap_field_write(flash_data->r_fields[REG_THERM_THRSH3], min_thrsh); in update_allowed_flash_current()
270 rc = regmap_field_read(flash_data->r_fields[REG_STATUS2], &sts); in update_allowed_flash_current()
275 if (flash_data->hw_type == QCOM_MVFLASH_3CH) { in update_allowed_flash_current()
290 if (therm_ma <= flash_data->total_ma) in update_allowed_flash_current()
293 avail_ma = therm_ma - flash_data->total_ma; in update_allowed_flash_current()
297 flash_data->total_ma += led->current_in_use_ma; in update_allowed_flash_current()
300 led->current_in_use_ma, flash_data->total_ma); in update_allowed_flash_current()
304 rc = regmap_field_write(flash_data->r_fields[REG_THERM_THRSH1], thrsh[0]); in update_allowed_flash_current()
308 rc = regmap_field_write(flash_data->r_fields[REG_THERM_THRSH2], thrsh[1]); in update_allowed_flash_current()
312 if (flash_data->hw_type == QCOM_MVFLASH_3CH) in update_allowed_flash_current()
313 rc = regmap_field_write(flash_data->r_fields[REG_THERM_THRSH3], thrsh[2]); in update_allowed_flash_current()
316 mutex_unlock(&flash_data->lock); in update_allowed_flash_current()
322 struct qcom_flash_data *flash_data = led->flash_data; in set_flash_current() local
342 rc = regmap_fields_write(flash_data->r_fields[REG_ITARGET], chan_id, itarget); in set_flash_current()
346 if (flash_data->hw_type == QCOM_MVFLASH_3CH) { in set_flash_current()
352 } else if (flash_data->hw_type == QCOM_MVFLASH_4CH) { in set_flash_current()
360 "HW type %d is not supported\n", flash_data->hw_type); in set_flash_current()
365 return regmap_field_update_bits(flash_data->r_fields[REG_IRESOLUTION], ires_mask, ires_val); in set_flash_current()
370 struct qcom_flash_data *flash_data = led->flash_data; in set_flash_timeout() local
386 rc = regmap_fields_write(flash_data->r_fields[REG_CHAN_TIMER], chan_id, timer); in set_flash_timeout()
396 struct qcom_flash_data *flash_data = led->flash_data; in set_flash_strobe() local
414 flash_data->r_fields[REG_CHAN_STROBE], chan_id, strobe_sel); in set_flash_strobe()
423 rc = regmap_field_update_bits(flash_data->r_fields[REG_CHAN_EN], chan_mask, chan_en); in set_flash_strobe()
491 struct qcom_flash_data *flash_data = led->flash_data; in qcom_flash_fault_get() local
497 rc = regmap_field_read(flash_data->r_fields[REG_STATUS1], &val); in qcom_flash_fault_get()
511 rc = regmap_field_read(flash_data->r_fields[REG_STATUS2], &val); in qcom_flash_fault_get()
515 if (flash_data->hw_type == QCOM_MVFLASH_3CH) { in qcom_flash_fault_get()
524 } else if (flash_data->hw_type == QCOM_MVFLASH_4CH) { in qcom_flash_fault_get()
543 rc = regmap_field_read(flash_data->r_fields[REG_STATUS3], &val); in qcom_flash_fault_get()
547 if (flash_data->hw_type == QCOM_MVFLASH_3CH) { in qcom_flash_fault_get()
550 } else if (flash_data->hw_type == QCOM_MVFLASH_4CH) { in qcom_flash_fault_get()
658 struct qcom_flash_data *flash_data = led->flash_data; in qcom_flash_v4l2_init() local
684 flash_data->v4l2_flash[flash_data->leds_count] = v4l2_flash; in qcom_flash_v4l2_init()
698 struct qcom_flash_data *flash_data = led->flash_data; in qcom_flash_register_led_device() local
712 if (count > flash_data->max_channels) { in qcom_flash_register_led_device()
714 count, flash_data->max_channels); in qcom_flash_register_led_device()
730 if ((channels[i] == 0) || (channels[i] > flash_data->max_channels)) { in qcom_flash_register_led_device()
732 flash_data->max_channels); in qcom_flash_register_led_device()
813 struct qcom_flash_data *flash_data; in qcom_flash_led_probe() local
822 flash_data = devm_kzalloc(dev, sizeof(*flash_data), GFP_KERNEL); in qcom_flash_led_probe()
823 if (!flash_data) in qcom_flash_led_probe()
856 flash_data->hw_type = QCOM_MVFLASH_3CH; in qcom_flash_led_probe()
857 flash_data->max_channels = 3; in qcom_flash_led_probe()
860 flash_data->hw_type = QCOM_MVFLASH_4CH; in qcom_flash_led_probe()
861 flash_data->max_channels = 4; in qcom_flash_led_probe()
870 flash_data->revision = val; in qcom_flash_led_probe()
879 rc = devm_regmap_field_bulk_alloc(dev, regmap, flash_data->r_fields, regs, REG_MAX_COUNT); in qcom_flash_led_probe()
885 platform_set_drvdata(pdev, flash_data); in qcom_flash_led_probe()
886 mutex_init(&flash_data->lock); in qcom_flash_led_probe()
889 if (count == 0 || count > flash_data->max_channels) { in qcom_flash_led_probe()
890 dev_err(dev, "No child or child count exceeds %d\n", flash_data->max_channels); in qcom_flash_led_probe()
894 flash_data->v4l2_flash = devm_kcalloc(dev, count, in qcom_flash_led_probe()
895 sizeof(*flash_data->v4l2_flash), GFP_KERNEL); in qcom_flash_led_probe()
896 if (!flash_data->v4l2_flash) in qcom_flash_led_probe()
906 led->flash_data = flash_data; in qcom_flash_led_probe()
911 flash_data->leds_count++; in qcom_flash_led_probe()
918 while (flash_data->v4l2_flash[flash_data->leds_count] && flash_data->leds_count) in qcom_flash_led_probe()
919 v4l2_flash_release(flash_data->v4l2_flash[flash_data->leds_count--]); in qcom_flash_led_probe()
925 struct qcom_flash_data *flash_data = platform_get_drvdata(pdev); in qcom_flash_led_remove() local
927 while (flash_data->v4l2_flash[flash_data->leds_count] && flash_data->leds_count) in qcom_flash_led_remove()
928 v4l2_flash_release(flash_data->v4l2_flash[flash_data->leds_count--]); in qcom_flash_led_remove()
930 mutex_destroy(&flash_data->lock); in qcom_flash_led_remove()