Lines Matching refs:pdata
120 static void ti_sn_bridge_write_u16(struct ti_sn_bridge *pdata, in ti_sn_bridge_write_u16() argument
123 regmap_write(pdata->regmap, reg, val & 0xFF); in ti_sn_bridge_write_u16()
124 regmap_write(pdata->regmap, reg + 1, val >> 8); in ti_sn_bridge_write_u16()
129 struct ti_sn_bridge *pdata = dev_get_drvdata(dev); in ti_sn_bridge_resume() local
132 ret = regulator_bulk_enable(SN_REGULATOR_SUPPLY_NUM, pdata->supplies); in ti_sn_bridge_resume()
138 gpiod_set_value(pdata->enable_gpio, 1); in ti_sn_bridge_resume()
145 struct ti_sn_bridge *pdata = dev_get_drvdata(dev); in ti_sn_bridge_suspend() local
148 gpiod_set_value(pdata->enable_gpio, 0); in ti_sn_bridge_suspend()
150 ret = regulator_bulk_disable(SN_REGULATOR_SUPPLY_NUM, pdata->supplies); in ti_sn_bridge_suspend()
163 struct ti_sn_bridge *pdata = s->private; in status_show() local
168 pm_runtime_get_sync(pdata->dev); in status_show()
172 regmap_read(pdata->regmap, reg, &val); in status_show()
176 pm_runtime_put(pdata->dev); in status_show()
183 static void ti_sn_debugfs_init(struct ti_sn_bridge *pdata) in ti_sn_debugfs_init() argument
185 pdata->debugfs = debugfs_create_dir(dev_name(pdata->dev), NULL); in ti_sn_debugfs_init()
187 debugfs_create_file("status", 0600, pdata->debugfs, pdata, in ti_sn_debugfs_init()
191 static void ti_sn_debugfs_remove(struct ti_sn_bridge *pdata) in ti_sn_debugfs_remove() argument
193 debugfs_remove_recursive(pdata->debugfs); in ti_sn_debugfs_remove()
194 pdata->debugfs = NULL; in ti_sn_debugfs_remove()
206 struct ti_sn_bridge *pdata = connector_to_ti_sn_bridge(connector); in ti_sn_bridge_connector_get_modes() local
208 return drm_panel_get_modes(pdata->panel); in ti_sn_bridge_connector_get_modes()
252 static int ti_sn_bridge_parse_regulators(struct ti_sn_bridge *pdata) in ti_sn_bridge_parse_regulators() argument
260 pdata->supplies[i].supply = ti_sn_bridge_supply_names[i]; in ti_sn_bridge_parse_regulators()
262 return devm_regulator_bulk_get(pdata->dev, SN_REGULATOR_SUPPLY_NUM, in ti_sn_bridge_parse_regulators()
263 pdata->supplies); in ti_sn_bridge_parse_regulators()
269 struct ti_sn_bridge *pdata = bridge_to_ti_sn_bridge(bridge); in ti_sn_bridge_attach() local
277 ret = drm_connector_init(bridge->dev, &pdata->connector, in ti_sn_bridge_attach()
285 drm_connector_helper_add(&pdata->connector, in ti_sn_bridge_attach()
287 drm_connector_attach_encoder(&pdata->connector, bridge->encoder); in ti_sn_bridge_attach()
300 host = of_find_mipi_dsi_host_by_node(pdata->host_node); in ti_sn_bridge_attach()
320 pm_runtime_get_sync(pdata->dev); in ti_sn_bridge_attach()
321 regmap_read(pdata->regmap, SN_DPPLL_SRC_REG, &val); in ti_sn_bridge_attach()
322 pm_runtime_put(pdata->dev); in ti_sn_bridge_attach()
331 pdata->dsi = dsi; in ti_sn_bridge_attach()
334 drm_panel_attach(pdata->panel, &pdata->connector); in ti_sn_bridge_attach()
341 drm_connector_cleanup(&pdata->connector); in ti_sn_bridge_attach()
347 struct ti_sn_bridge *pdata = bridge_to_ti_sn_bridge(bridge); in ti_sn_bridge_disable() local
349 drm_panel_disable(pdata->panel); in ti_sn_bridge_disable()
352 regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, 0); in ti_sn_bridge_disable()
354 regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0); in ti_sn_bridge_disable()
356 regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 0); in ti_sn_bridge_disable()
358 drm_panel_unprepare(pdata->panel); in ti_sn_bridge_disable()
361 static u32 ti_sn_bridge_get_dsi_freq(struct ti_sn_bridge *pdata) in ti_sn_bridge_get_dsi_freq() argument
365 &pdata->bridge.encoder->crtc->state->adjusted_mode; in ti_sn_bridge_get_dsi_freq()
368 mipi_dsi_pixel_format_to_bpp(pdata->dsi->format); in ti_sn_bridge_get_dsi_freq()
369 clk_freq_khz = bit_rate_khz / (pdata->dsi->lanes * 2); in ti_sn_bridge_get_dsi_freq()
392 static void ti_sn_bridge_set_refclk_freq(struct ti_sn_bridge *pdata) in ti_sn_bridge_set_refclk_freq() argument
399 if (pdata->refclk) { in ti_sn_bridge_set_refclk_freq()
400 refclk_rate = clk_get_rate(pdata->refclk); in ti_sn_bridge_set_refclk_freq()
403 clk_prepare_enable(pdata->refclk); in ti_sn_bridge_set_refclk_freq()
405 refclk_rate = ti_sn_bridge_get_dsi_freq(pdata) * 1000; in ti_sn_bridge_set_refclk_freq()
415 regmap_update_bits(pdata->regmap, SN_DPPLL_SRC_REG, REFCLK_FREQ_MASK, in ti_sn_bridge_set_refclk_freq()
428 static void ti_sn_bridge_set_dsi_dp_rate(struct ti_sn_bridge *pdata) in ti_sn_bridge_set_dsi_dp_rate() argument
433 &pdata->bridge.encoder->crtc->state->adjusted_mode; in ti_sn_bridge_set_dsi_dp_rate()
437 mipi_dsi_pixel_format_to_bpp(pdata->dsi->format); in ti_sn_bridge_set_dsi_dp_rate()
438 clk_freq_mhz = bit_rate_mhz / (pdata->dsi->lanes * 2); in ti_sn_bridge_set_dsi_dp_rate()
443 regmap_write(pdata->regmap, SN_DSIA_CLK_FREQ_REG, val); in ti_sn_bridge_set_dsi_dp_rate()
446 dp_rate_mhz = ((bit_rate_mhz / pdata->dsi->lanes) * DP_CLK_FUDGE_NUM) / in ti_sn_bridge_set_dsi_dp_rate()
452 regmap_update_bits(pdata->regmap, SN_DATARATE_CONFIG_REG, in ti_sn_bridge_set_dsi_dp_rate()
456 static void ti_sn_bridge_set_video_timings(struct ti_sn_bridge *pdata) in ti_sn_bridge_set_video_timings() argument
459 &pdata->bridge.encoder->crtc->state->adjusted_mode; in ti_sn_bridge_set_video_timings()
467 ti_sn_bridge_write_u16(pdata, SN_CHA_ACTIVE_LINE_LENGTH_LOW_REG, in ti_sn_bridge_set_video_timings()
469 ti_sn_bridge_write_u16(pdata, SN_CHA_VERTICAL_DISPLAY_SIZE_LOW_REG, in ti_sn_bridge_set_video_timings()
471 regmap_write(pdata->regmap, SN_CHA_HSYNC_PULSE_WIDTH_LOW_REG, in ti_sn_bridge_set_video_timings()
473 regmap_write(pdata->regmap, SN_CHA_HSYNC_PULSE_WIDTH_HIGH_REG, in ti_sn_bridge_set_video_timings()
476 regmap_write(pdata->regmap, SN_CHA_VSYNC_PULSE_WIDTH_LOW_REG, in ti_sn_bridge_set_video_timings()
478 regmap_write(pdata->regmap, SN_CHA_VSYNC_PULSE_WIDTH_HIGH_REG, in ti_sn_bridge_set_video_timings()
482 regmap_write(pdata->regmap, SN_CHA_HORIZONTAL_BACK_PORCH_REG, in ti_sn_bridge_set_video_timings()
484 regmap_write(pdata->regmap, SN_CHA_VERTICAL_BACK_PORCH_REG, in ti_sn_bridge_set_video_timings()
487 regmap_write(pdata->regmap, SN_CHA_HORIZONTAL_FRONT_PORCH_REG, in ti_sn_bridge_set_video_timings()
489 regmap_write(pdata->regmap, SN_CHA_VERTICAL_FRONT_PORCH_REG, in ti_sn_bridge_set_video_timings()
497 struct ti_sn_bridge *pdata = bridge_to_ti_sn_bridge(bridge); in ti_sn_bridge_enable() local
502 val = CHA_DSI_LANES(4 - pdata->dsi->lanes); in ti_sn_bridge_enable()
503 regmap_update_bits(pdata->regmap, SN_DSI_LANES_REG, in ti_sn_bridge_enable()
507 val = DP_NUM_LANES(pdata->dsi->lanes - 1); in ti_sn_bridge_enable()
508 regmap_update_bits(pdata->regmap, SN_SSC_CONFIG_REG, DP_NUM_LANES_MASK, in ti_sn_bridge_enable()
512 ti_sn_bridge_set_dsi_dp_rate(pdata); in ti_sn_bridge_enable()
515 regmap_write(pdata->regmap, SN_PLL_ENABLE_REG, 1); in ti_sn_bridge_enable()
517 ret = regmap_read_poll_timeout(pdata->regmap, SN_DPPLL_SRC_REG, val, in ti_sn_bridge_enable()
531 drm_dp_dpcd_writeb(&pdata->aux, DP_EDP_CONFIGURATION_SET, in ti_sn_bridge_enable()
535 regmap_write(pdata->regmap, SN_ML_TX_MODE_REG, 0x0A); in ti_sn_bridge_enable()
536 ret = regmap_read_poll_timeout(pdata->regmap, SN_ML_TX_MODE_REG, val, in ti_sn_bridge_enable()
549 ti_sn_bridge_set_video_timings(pdata); in ti_sn_bridge_enable()
552 regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, in ti_sn_bridge_enable()
555 drm_panel_enable(pdata->panel); in ti_sn_bridge_enable()
560 struct ti_sn_bridge *pdata = bridge_to_ti_sn_bridge(bridge); in ti_sn_bridge_pre_enable() local
562 pm_runtime_get_sync(pdata->dev); in ti_sn_bridge_pre_enable()
565 ti_sn_bridge_set_refclk_freq(pdata); in ti_sn_bridge_pre_enable()
583 regmap_update_bits(pdata->regmap, SN_HPD_DISABLE_REG, HPD_DISABLE, in ti_sn_bridge_pre_enable()
586 drm_panel_prepare(pdata->panel); in ti_sn_bridge_pre_enable()
591 struct ti_sn_bridge *pdata = bridge_to_ti_sn_bridge(bridge); in ti_sn_bridge_post_disable() local
593 if (pdata->refclk) in ti_sn_bridge_post_disable()
594 clk_disable_unprepare(pdata->refclk); in ti_sn_bridge_post_disable()
596 pm_runtime_put_sync(pdata->dev); in ti_sn_bridge_post_disable()
615 struct ti_sn_bridge *pdata = aux_to_ti_sn_bridge(aux); in ti_sn_aux_transfer() local
630 regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val); in ti_sn_aux_transfer()
636 regmap_write(pdata->regmap, SN_AUX_ADDR_19_16_REG, in ti_sn_aux_transfer()
638 regmap_write(pdata->regmap, SN_AUX_ADDR_15_8_REG, in ti_sn_aux_transfer()
640 regmap_write(pdata->regmap, SN_AUX_ADDR_7_0_REG, msg->address & 0xFF); in ti_sn_aux_transfer()
642 regmap_write(pdata->regmap, SN_AUX_LENGTH_REG, msg->size); in ti_sn_aux_transfer()
646 regmap_write(pdata->regmap, SN_AUX_WDATA_REG(i), in ti_sn_aux_transfer()
650 regmap_write(pdata->regmap, SN_AUX_CMD_REG, request_val | AUX_CMD_SEND); in ti_sn_aux_transfer()
652 ret = regmap_read_poll_timeout(pdata->regmap, SN_AUX_CMD_REG, val, in ti_sn_aux_transfer()
658 ret = regmap_read(pdata->regmap, SN_AUX_CMD_STATUS_REG, &val); in ti_sn_aux_transfer()
671 ret = regmap_read(pdata->regmap, SN_AUX_RDATA_REG(i), in ti_sn_aux_transfer()
683 static int ti_sn_bridge_parse_dsi_host(struct ti_sn_bridge *pdata) in ti_sn_bridge_parse_dsi_host() argument
685 struct device_node *np = pdata->dev->of_node; in ti_sn_bridge_parse_dsi_host()
687 pdata->host_node = of_graph_get_remote_node(np, 0, 0); in ti_sn_bridge_parse_dsi_host()
689 if (!pdata->host_node) { in ti_sn_bridge_parse_dsi_host()
700 struct ti_sn_bridge *pdata; in ti_sn_bridge_probe() local
708 pdata = devm_kzalloc(&client->dev, sizeof(struct ti_sn_bridge), in ti_sn_bridge_probe()
710 if (!pdata) in ti_sn_bridge_probe()
713 pdata->regmap = devm_regmap_init_i2c(client, in ti_sn_bridge_probe()
715 if (IS_ERR(pdata->regmap)) { in ti_sn_bridge_probe()
717 return PTR_ERR(pdata->regmap); in ti_sn_bridge_probe()
720 pdata->dev = &client->dev; in ti_sn_bridge_probe()
722 ret = drm_of_find_panel_or_bridge(pdata->dev->of_node, 1, 0, in ti_sn_bridge_probe()
723 &pdata->panel, NULL); in ti_sn_bridge_probe()
729 dev_set_drvdata(&client->dev, pdata); in ti_sn_bridge_probe()
731 pdata->enable_gpio = devm_gpiod_get(pdata->dev, "enable", in ti_sn_bridge_probe()
733 if (IS_ERR(pdata->enable_gpio)) { in ti_sn_bridge_probe()
735 ret = PTR_ERR(pdata->enable_gpio); in ti_sn_bridge_probe()
739 ret = ti_sn_bridge_parse_regulators(pdata); in ti_sn_bridge_probe()
745 pdata->refclk = devm_clk_get(pdata->dev, "refclk"); in ti_sn_bridge_probe()
746 if (IS_ERR(pdata->refclk)) { in ti_sn_bridge_probe()
747 ret = PTR_ERR(pdata->refclk); in ti_sn_bridge_probe()
751 pdata->refclk = NULL; in ti_sn_bridge_probe()
754 ret = ti_sn_bridge_parse_dsi_host(pdata); in ti_sn_bridge_probe()
758 pm_runtime_enable(pdata->dev); in ti_sn_bridge_probe()
760 i2c_set_clientdata(client, pdata); in ti_sn_bridge_probe()
762 pdata->aux.name = "ti-sn65dsi86-aux"; in ti_sn_bridge_probe()
763 pdata->aux.dev = pdata->dev; in ti_sn_bridge_probe()
764 pdata->aux.transfer = ti_sn_aux_transfer; in ti_sn_bridge_probe()
765 drm_dp_aux_register(&pdata->aux); in ti_sn_bridge_probe()
767 pdata->bridge.funcs = &ti_sn_bridge_funcs; in ti_sn_bridge_probe()
768 pdata->bridge.of_node = client->dev.of_node; in ti_sn_bridge_probe()
770 drm_bridge_add(&pdata->bridge); in ti_sn_bridge_probe()
772 ti_sn_debugfs_init(pdata); in ti_sn_bridge_probe()
779 struct ti_sn_bridge *pdata = i2c_get_clientdata(client); in ti_sn_bridge_remove() local
781 if (!pdata) in ti_sn_bridge_remove()
784 ti_sn_debugfs_remove(pdata); in ti_sn_bridge_remove()
786 of_node_put(pdata->host_node); in ti_sn_bridge_remove()
788 pm_runtime_disable(pdata->dev); in ti_sn_bridge_remove()
790 if (pdata->dsi) { in ti_sn_bridge_remove()
791 mipi_dsi_detach(pdata->dsi); in ti_sn_bridge_remove()
792 mipi_dsi_device_unregister(pdata->dsi); in ti_sn_bridge_remove()
795 drm_bridge_remove(&pdata->bridge); in ti_sn_bridge_remove()