Lines Matching refs:ps_bridge
158 static int _ps8640_wait_hpd_asserted(struct ps8640 *ps_bridge, unsigned long wait_us)
160 struct regmap *map = ps_bridge->regmap[PAGE2_TOP_CNTL];
181 if (!ret && ps_bridge->need_post_hpd_delay) {
182 ps_bridge->need_post_hpd_delay = false;
191 struct ps8640 *ps_bridge = aux_to_ps8640(aux);
192 struct device *dev = &ps_bridge->page[PAGE0_DP_CNTL]->dev;
201 ret = _ps8640_wait_hpd_asserted(ps_bridge, wait_us);
211 struct ps8640 *ps_bridge = aux_to_ps8640(aux);
212 struct regmap *map = ps_bridge->regmap[PAGE0_DP_CNTL];
213 struct device *dev = &ps_bridge->page[PAGE0_DP_CNTL]->dev;
345 struct ps8640 *ps_bridge = aux_to_ps8640(aux);
346 struct device *dev = &ps_bridge->page[PAGE0_DP_CNTL]->dev;
349 mutex_lock(&ps_bridge->aux_lock);
351 ret = _ps8640_wait_hpd_asserted(ps_bridge, 200 * 1000);
361 mutex_unlock(&ps_bridge->aux_lock);
366 static void ps8640_bridge_vdo_control(struct ps8640 *ps_bridge,
369 struct regmap *map = ps_bridge->regmap[PAGE3_DSI_CNTL1];
370 struct device *dev = &ps_bridge->page[PAGE3_DSI_CNTL1]->dev;
384 struct ps8640 *ps_bridge = dev_get_drvdata(dev);
387 ret = regulator_bulk_enable(ARRAY_SIZE(ps_bridge->supplies),
388 ps_bridge->supplies);
394 gpiod_set_value(ps_bridge->gpio_powerdown, 0);
395 gpiod_set_value(ps_bridge->gpio_reset, 1);
397 gpiod_set_value(ps_bridge->gpio_reset, 0);
400 gpiod_set_value(ps_bridge->gpio_reset, 1);
402 gpiod_set_value(ps_bridge->gpio_reset, 0);
405 ps_bridge->need_post_hpd_delay = true;
421 struct ps8640 *ps_bridge = dev_get_drvdata(dev);
424 gpiod_set_value(ps_bridge->gpio_reset, 1);
425 gpiod_set_value(ps_bridge->gpio_powerdown, 1);
426 ret = regulator_bulk_disable(ARRAY_SIZE(ps_bridge->supplies),
427 ps_bridge->supplies);
443 struct ps8640 *ps_bridge = bridge_to_ps8640(bridge);
444 struct regmap *map = ps_bridge->regmap[PAGE2_TOP_CNTL];
445 struct device *dev = &ps_bridge->page[PAGE0_DP_CNTL]->dev;
449 ret = _ps8640_wait_hpd_asserted(ps_bridge, 200 * 1000);
470 ps8640_bridge_vdo_control(ps_bridge, ENABLE);
472 ps_bridge->pre_enabled = true;
478 struct ps8640 *ps_bridge = bridge_to_ps8640(bridge);
480 ps_bridge->pre_enabled = false;
482 ps8640_bridge_vdo_control(ps_bridge, DISABLE);
490 mutex_lock(&ps_bridge->aux_lock);
492 pm_runtime_put_sync_suspend(&ps_bridge->page[PAGE0_DP_CNTL]->dev);
494 mutex_unlock(&ps_bridge->aux_lock);
500 struct ps8640 *ps_bridge = bridge_to_ps8640(bridge);
501 struct device *dev = &ps_bridge->page[0]->dev;
507 ps_bridge->aux.drm_dev = bridge->dev;
508 ret = drm_dp_aux_register(&ps_bridge->aux);
514 ps_bridge->link = device_link_add(bridge->dev->dev, dev, DL_FLAG_STATELESS);
515 if (!ps_bridge->link) {
522 ret = drm_bridge_attach(bridge->encoder, ps_bridge->panel_bridge,
523 &ps_bridge->bridge, flags);
530 device_link_del(ps_bridge->link);
532 drm_dp_aux_unregister(&ps_bridge->aux);
539 struct ps8640 *ps_bridge = bridge_to_ps8640(bridge);
541 drm_dp_aux_unregister(&ps_bridge->aux);
542 if (ps_bridge->link)
543 device_link_del(ps_bridge->link);
562 static int ps8640_bridge_get_dsi_resources(struct device *dev, struct ps8640 *ps_bridge)
593 ps_bridge->dsi = dsi;
606 struct ps8640 *ps_bridge = aux_to_ps8640(aux);
621 ps_bridge->panel_bridge = devm_drm_of_get_bridge(dev, np, 1, 0);
622 if (IS_ERR(ps_bridge->panel_bridge))
623 return PTR_ERR(ps_bridge->panel_bridge);
625 ret = devm_drm_bridge_add(dev, &ps_bridge->bridge);
629 return devm_mipi_dsi_attach(dev, ps_bridge->dsi);
635 struct ps8640 *ps_bridge;
639 ps_bridge = devm_kzalloc(dev, sizeof(*ps_bridge), GFP_KERNEL);
640 if (!ps_bridge)
643 mutex_init(&ps_bridge->aux_lock);
645 ps_bridge->supplies[0].supply = "vdd12";
646 ps_bridge->supplies[1].supply = "vdd33";
647 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(ps_bridge->supplies),
648 ps_bridge->supplies);
652 ps_bridge->gpio_powerdown = devm_gpiod_get(&client->dev, "powerdown",
654 if (IS_ERR(ps_bridge->gpio_powerdown))
655 return PTR_ERR(ps_bridge->gpio_powerdown);
660 ps_bridge->gpio_reset = devm_gpiod_get(&client->dev, "reset",
662 if (IS_ERR(ps_bridge->gpio_reset))
663 return PTR_ERR(ps_bridge->gpio_reset);
665 ps_bridge->bridge.funcs = &ps8640_bridge_funcs;
666 ps_bridge->bridge.of_node = dev->of_node;
667 ps_bridge->bridge.type = DRM_MODE_CONNECTOR_eDP;
673 ret = ps8640_bridge_get_dsi_resources(&client->dev, ps_bridge);
677 ps_bridge->page[PAGE0_DP_CNTL] = client;
679 ps_bridge->regmap[PAGE0_DP_CNTL] = devm_regmap_init_i2c(client, ps8640_regmap_config);
680 if (IS_ERR(ps_bridge->regmap[PAGE0_DP_CNTL]))
681 return PTR_ERR(ps_bridge->regmap[PAGE0_DP_CNTL]);
683 for (i = 1; i < ARRAY_SIZE(ps_bridge->page); i++) {
684 ps_bridge->page[i] = devm_i2c_new_dummy_device(&client->dev,
687 if (IS_ERR(ps_bridge->page[i]))
688 return PTR_ERR(ps_bridge->page[i]);
690 ps_bridge->regmap[i] = devm_regmap_init_i2c(ps_bridge->page[i],
692 if (IS_ERR(ps_bridge->regmap[i]))
693 return PTR_ERR(ps_bridge->regmap[i]);
696 i2c_set_clientdata(client, ps_bridge);
698 ps_bridge->aux.name = "parade-ps8640-aux";
699 ps_bridge->aux.dev = dev;
700 ps_bridge->aux.transfer = ps8640_aux_transfer;
701 ps_bridge->aux.wait_hpd_asserted = ps8640_wait_hpd_asserted;
702 drm_dp_aux_init(&ps_bridge->aux);
720 ret = devm_of_dp_aux_populate_bus(&ps_bridge->aux, ps8640_bridge_link_panel);
728 return ps8640_bridge_link_panel(&ps_bridge->aux);