/* Only all equal current values are supported */ if (pdata->su2_auto_curr1)
ret = regmap_write(as3711->regmap, AS3711_CURR1_VALUE,
brightness); if (!ret && pdata->su2_auto_curr2)
ret = regmap_write(as3711->regmap, AS3711_CURR2_VALUE,
brightness); if (!ret && pdata->su2_auto_curr3)
ret = regmap_write(as3711->regmap, AS3711_CURR3_VALUE,
brightness);
staticint as3711_bl_su2_reset(struct as3711_bl_supply *supply)
{ struct as3711 *as3711 = supply->as3711; int ret = regmap_update_bits(as3711->regmap, AS3711_STEPUP_CONTROL_5, 3, supply->pdata->su2_fbprot); if (!ret)
ret = regmap_update_bits(as3711->regmap,
AS3711_STEPUP_CONTROL_2, 1, 0); if (!ret)
ret = regmap_update_bits(as3711->regmap,
AS3711_STEPUP_CONTROL_2, 1, 1); return ret;
}
/* *Someonewithlessfragileorlessexpensivehardwarecouldtrytosimplify *thebrightnessadjustmentprocedure.
*/ staticint as3711_bl_update_status(struct backlight_device *bl)
{ struct as3711_bl_data *data = bl_get_data(bl); struct as3711_bl_supply *supply = to_supply(data); struct as3711 *as3711 = supply->as3711; int brightness; int ret = 0;
brightness = backlight_get_brightness(bl);
if (data->type == AS3711_BL_SU1) {
ret = as3711_set_brightness_v(as3711, brightness,
AS3711_STEPUP_CONTROL_1);
} else { conststruct as3711_bl_pdata *pdata = supply->pdata;
switch (pdata->su2_feedback) { case AS3711_SU2_VOLTAGE:
ret = as3711_set_brightness_v(as3711, brightness,
AS3711_STEPUP_CONTROL_2); break; case AS3711_SU2_CURR_AUTO:
ret = as3711_set_brightness_auto_i(data, brightness / 4); if (ret < 0) return ret; if (brightness) {
ret = as3711_bl_su2_reset(supply); if (ret < 0) return ret;
udelay(500);
ret = as3711_set_brightness_auto_i(data, brightness);
} else {
ret = regmap_update_bits(as3711->regmap,
AS3711_STEPUP_CONTROL_2, 1, 0);
} break; /* Manual one current feedback pin below */ case AS3711_SU2_CURR1:
ret = regmap_write(as3711->regmap, AS3711_CURR1_VALUE,
brightness); break; case AS3711_SU2_CURR2:
ret = regmap_write(as3711->regmap, AS3711_CURR2_VALUE,
brightness); break; case AS3711_SU2_CURR3:
ret = regmap_write(as3711->regmap, AS3711_CURR3_VALUE,
brightness); break; default:
ret = -EINVAL;
}
} if (!ret)
data->brightness = brightness;
if (!pdata) {
dev_err(&pdev->dev, "No platform data, exiting...\n"); return -ENODEV;
}
if (pdev->dev.parent->of_node) {
ret = as3711_backlight_parse_dt(&pdev->dev); if (ret < 0) return dev_err_probe(&pdev->dev, ret, "DT parsing failed\n");
}
if (!pdata->su1_fb && !pdata->su2_fb) {
dev_err(&pdev->dev, "No framebuffer specified\n"); return -EINVAL;
}
/* *DuetopossiblehardwaredamageIchosetoblockallmodes, *unsupportedonmyhardware.Anyone,wishingtouseanyofthosemodes *willhavetofirstreviewthecode,thenactivateandtestit.
*/ if (pdata->su1_fb ||
pdata->su2_fbprot != AS3711_SU2_GPIO4 ||
pdata->su2_feedback != AS3711_SU2_CURR_AUTO) {
dev_warn(&pdev->dev, "Attention! An untested mode has been chosen!\n" "Please, review the code, enable, test, and report success:-)\n"); return -EINVAL;
}
supply = devm_kzalloc(&pdev->dev, sizeof(*supply), GFP_KERNEL); if (!supply) return -ENOMEM;
supply->as3711 = as3711;
supply->pdata = pdata;
if (pdata->su1_fb) {
su = &supply->su1;
su->type = AS3711_BL_SU1;
max_brightness = min(pdata->su1_max_uA, 31);
ret = as3711_bl_register(pdev, max_brightness, su); if (ret < 0) return ret;
}
if (pdata->su2_fb) {
su = &supply->su2;
su->type = AS3711_BL_SU2;
switch (pdata->su2_fbprot) { case AS3711_SU2_GPIO2: case AS3711_SU2_GPIO3: case AS3711_SU2_GPIO4: case AS3711_SU2_LX_SD4: break; default: return -EINVAL;
}
switch (pdata->su2_feedback) { case AS3711_SU2_VOLTAGE:
max_brightness = min(pdata->su2_max_uA, 31); break; case AS3711_SU2_CURR1: case AS3711_SU2_CURR2: case AS3711_SU2_CURR3: case AS3711_SU2_CURR_AUTO:
max_brightness = min(pdata->su2_max_uA / 150, 255); break; default: return -EINVAL;
}
ret = as3711_bl_init_su2(supply); if (ret < 0) return ret;
ret = as3711_bl_register(pdev, max_brightness, su); if (ret < 0) return ret;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.