Lines Matching +full:enable +full:- +full:ssc

1 // SPDX-License-Identifier: GPL-2.0+
19 #include <uapi/linux/media-bus-format.h>
34 bool ssc; member
38 int (*enable)(struct max96772_panel *p); member
56 bool ssc; member
62 ret = regmap_write(p->regmap.serializer, reg, val); \
69 ret = regmap_read(p->regmap.serializer, reg, val); \
76 ret = regmap_write(p->regmap.deserializer, reg, val); \
83 ret = regmap_read(p->regmap.deserializer, reg, val); \
153 const struct drm_display_mode *mode = &p->mode; in max96772_prepare()
159 if (p->panel_dual_link) { in max96772_prepare()
163 maxim_deserializer_write(p, 0xe790, p->link_rate); in max96772_prepare()
164 maxim_deserializer_write(p, 0xe792, p->lane_count); in max96772_prepare()
166 if (p->ssc) { in max96772_prepare()
173 dev_info(p->dev, "link_rate=0x%02x, lane_count=0x%02x, ssc=%d\n", in max96772_prepare()
174 p->link_rate, p->lane_count, p->ssc); in max96772_prepare()
176 switch (p->link_rate) { in max96772_prepare()
178 regmap_multi_reg_write(p->regmap.deserializer, max96772_clk_ref[2], in max96772_prepare()
182 regmap_multi_reg_write(p->regmap.deserializer, max96772_clk_ref[1], in max96772_prepare()
187 regmap_multi_reg_write(p->regmap.deserializer, max96772_clk_ref[0], in max96772_prepare()
192 vact = mode->vdisplay; in max96772_prepare()
193 vsa = mode->vsync_end - mode->vsync_start; in max96772_prepare()
194 vfp = mode->vsync_start - mode->vdisplay; in max96772_prepare()
195 vbp = mode->vtotal - mode->vsync_end; in max96772_prepare()
196 hact = mode->hdisplay; in max96772_prepare()
197 hsa = mode->hsync_end - mode->hsync_start; in max96772_prepare()
198 hfp = mode->hsync_start - mode->hdisplay; in max96772_prepare()
199 hbp = mode->htotal - mode->hsync_end; in max96772_prepare()
218 hsync_pol = !!(mode->flags & DRM_MODE_FLAG_NHSYNC); in max96772_prepare()
219 vsync_pol = !!(mode->flags & DRM_MODE_FLAG_NVSYNC); in max96772_prepare()
226 /* HWORDS = ((HRES x bits / pixel) / 16) - LANE_COUNT */ in max96772_prepare()
227 hwords = DIV_ROUND_CLOSEST_ULL(hact * 24, 16) - p->lane_count; in max96772_prepare()
232 mvid = DIV_ROUND_CLOSEST_ULL((u64)mode->clock * 32768, in max96772_prepare()
233 drm_dp_bw_code_to_link_rate(p->link_rate)); in max96772_prepare()
260 ret = regmap_read_poll_timeout(p->regmap.deserializer, 0x07f0, val, in max96776_enable()
274 dev_err(p->dev, "Link Training failed: LANE0_1_STATUS=0x%02x, LANE2_3_STATUS=0x%02x\n", in max96776_enable()
289 pinctrl_pm_select_default_state(p->dev); in max96772_panel_prepare()
291 if (p->desc->prepare) in max96772_panel_prepare()
292 p->desc->prepare(p); in max96772_panel_prepare()
294 if (!p->desc->link_rate || !p->desc->lane_count) { in max96772_panel_prepare()
300 dev_err(p->dev, "failed to read max lane count\n"); in max96772_panel_prepare()
304 p->lane_count = min_t(int, 4, dpcd & DP_MAX_LANE_COUNT_MASK); in max96772_panel_prepare()
308 dev_err(p->dev, "failed to read max link rate\n"); in max96772_panel_prepare()
312 p->link_rate = min_t(int, dpcd, DP_LINK_BW_5_4); in max96772_panel_prepare()
316 dev_err(p->dev, "failed to read max downspread\n"); in max96772_panel_prepare()
320 p->ssc = !!(dpcd & DP_MAX_DOWNSPREAD_0_5); in max96772_panel_prepare()
322 p->link_rate = p->desc->link_rate; in max96772_panel_prepare()
323 p->lane_count = p->desc->lane_count; in max96772_panel_prepare()
324 p->ssc = p->desc->ssc; in max96772_panel_prepare()
334 if (p->desc->unprepare) in max96772_panel_unprepare()
335 p->desc->unprepare(p); in max96772_panel_unprepare()
337 pinctrl_pm_select_sleep_state(p->dev); in max96772_panel_unprepare()
348 if (p->desc->enable) in max96772_panel_enable()
349 p->desc->enable(p); in max96772_panel_enable()
351 backlight_enable(p->backlight); in max96772_panel_enable()
353 if (p->desc->backlight_enable) in max96772_panel_enable()
354 p->desc->backlight_enable(p); in max96772_panel_enable()
363 if (p->desc->backlight_disable) in max96772_panel_disable()
364 p->desc->backlight_disable(p); in max96772_panel_disable()
366 backlight_disable(p->backlight); in max96772_panel_disable()
368 if (p->desc->disable) in max96772_panel_disable()
369 p->desc->disable(p); in max96772_panel_disable()
381 connector->display_info.width_mm = p->desc->width_mm; in max96772_panel_get_modes()
382 connector->display_info.height_mm = p->desc->height_mm; in max96772_panel_get_modes()
383 drm_display_info_set_bus_formats(&connector->display_info, &bus_format, 1); in max96772_panel_get_modes()
385 mode = drm_mode_duplicate(connector->dev, &p->mode); in max96772_panel_get_modes()
386 mode->width_mm = p->desc->width_mm; in max96772_panel_get_modes()
387 mode->height_mm = p->desc->height_mm; in max96772_panel_get_modes()
388 mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; in max96772_panel_get_modes()
399 .enable = max96772_panel_enable,
406 struct device *dev = p->dev; in max96772_panel_parse_dt()
411 ret = of_get_display_timing(dev->of_node, "panel-timing", &dt); in max96772_panel_parse_dt()
413 dev_err(dev, "%pOF: no panel-timing node found\n", dev->of_node); in max96772_panel_parse_dt()
418 drm_display_mode_from_videomode(&vm, &p->mode); in max96772_panel_parse_dt()
419 p->panel_dual_link = of_property_read_bool(dev->of_node, "panel_dual_link"); in max96772_panel_parse_dt()
448 struct device *dev = &client->dev; in max96772_panel_probe()
455 return -ENOMEM; in max96772_panel_probe()
457 p->dev = dev; in max96772_panel_probe()
458 p->desc = of_device_get_match_data(dev); in max96772_panel_probe()
465 p->backlight = devm_of_find_backlight(dev); in max96772_panel_probe()
466 if (IS_ERR(p->backlight)) in max96772_panel_probe()
467 return dev_err_probe(dev, PTR_ERR(p->backlight), in max96772_panel_probe()
470 p->regmap.deserializer = in max96772_panel_probe()
472 if (IS_ERR(p->regmap.deserializer)) in max96772_panel_probe()
473 return dev_err_probe(dev, PTR_ERR(p->regmap.deserializer), in max96772_panel_probe()
476 parent = of_find_i2c_device_by_node(dev->of_node->parent->parent); in max96772_panel_probe()
478 return dev_err_probe(dev, -ENODEV, "failed to find parent\n"); in max96772_panel_probe()
480 p->regmap.serializer = dev_get_regmap(&parent->dev, NULL); in max96772_panel_probe()
481 if (!p->regmap.serializer) in max96772_panel_probe()
482 return dev_err_probe(dev, -ENODEV, in max96772_panel_probe()
485 drm_panel_init(&p->panel, dev, &max96772_panel_funcs, in max96772_panel_probe()
487 drm_panel_add(&p->panel); in max96772_panel_probe()
496 drm_panel_remove(&p->panel); in max96772_panel_remove()
513 .name = "boe,ae146mit0-l10",
518 .ssc = 0,
525 { .compatible = "boe,ae146m1t-l10", &boe_ae146m1t_l10 },
532 .name = "max96772-panel",
541 MODULE_AUTHOR("Wyon Bi <bivvy.bi@rock-chips.com>");