Lines Matching refs:sii902x
160 struct sii902x { struct
178 static inline struct sii902x *bridge_to_sii902x(struct rockchip_bridge *bridge) in bridge_to_sii902x() argument
180 return container_of(&bridge, struct sii902x, bridge); in bridge_to_sii902x()
183 static int sii902x_reg_update_bits(struct sii902x *sii902x, u8 reg, u8 mask, u8 val) in sii902x_reg_update_bits() argument
187 status = dm_i2c_reg_read(sii902x->dev, reg); in sii902x_reg_update_bits()
191 return dm_i2c_reg_write(sii902x->dev, reg, status); in sii902x_reg_update_bits()
221 static void sii902x_set_embedded_sync(struct sii902x *sii902x) in sii902x_set_embedded_sync() argument
223 struct udevice *dev = sii902x->dev; in sii902x_set_embedded_sync()
227 if (!sii902x_check_embedded_format(sii902x->bus_format)) in sii902x_set_embedded_sync()
230 switch (sii902x->bus_format) { in sii902x_set_embedded_sync()
235 sii902x_reg_update_bits(sii902x, SII902X_TPI_SYNC_GEN_CTRL, 0x20, 0x20); in sii902x_set_embedded_sync()
241 sii902x_reg_update_bits(sii902x, SII902X_TPI_SYNC_GEN_CTRL, 0x80, 0x00); in sii902x_set_embedded_sync()
243 sii902x_reg_update_bits(sii902x, SII902X_TPI_SYNC_GEN_CTRL, 0x80, 0x80); in sii902x_set_embedded_sync()
245 drm_display_mode_to_videomode(&sii902x->mode, &vm); in sii902x_set_embedded_sync()
248 if (sii902x->mode.flags & DRM_MODE_FLAG_INTERLACE) { in sii902x_set_embedded_sync()
249 data[2] = (sii902x->mode.vtotal >> 1) & 0xff; in sii902x_set_embedded_sync()
250 data[3] = ((sii902x->mode.vtotal >> 1) >> 8) & 0x1f; in sii902x_set_embedded_sync()
261 sii902x_reg_update_bits(sii902x, SII902X_TPI_SYNC_GEN_CTRL, 0x80, 0x80); in sii902x_set_embedded_sync()
262 sii902x_reg_update_bits(sii902x, SII902X_EMBEDDED_SYNC_EXTRACTION_REG, 0x40, 0x40); in sii902x_set_embedded_sync()
264 sii902x_reg_update_bits(sii902x, SII902X_EMBEDDED_SYNC_EXTRACTION_REG, in sii902x_set_embedded_sync()
269 static void sii902x_set_format(struct sii902x *sii902x) in sii902x_set_format() argument
271 struct udevice *dev = sii902x->dev; in sii902x_set_format()
274 switch (sii902x->bus_format) { in sii902x_set_format()
300 sii902x_set_embedded_sync(sii902x); in sii902x_set_format()
303 static void sii902x_set_connector_display_info(struct sii902x *sii902x, in sii902x_set_connector_display_info() argument
306 conn_state->bus_format = sii902x->bus_format; in sii902x_set_connector_display_info()
339 struct sii902x *sii902x = dev_get_priv(bridge->dev); in sii902x_bridge_mode_set() local
342 struct udevice *dev = sii902x->dev; in sii902x_bridge_mode_set()
355 sii902x_reg_update_bits(sii902x, SII902X_SYS_CTRL_DATA, in sii902x_bridge_mode_set()
359 drm_mode_copy(&sii902x->mode, mode); in sii902x_bridge_mode_set()
370 switch (sii902x->bus_format) { in sii902x_bridge_mode_set()
386 switch (sii902x->bus_format) { in sii902x_bridge_mode_set()
413 if (sii902x->mode.flags & DRM_MODE_FLAG_DBLCLK) in sii902x_bridge_mode_set()
417 sii902x_reg_update_bits(sii902x, SII902X_TPI_PIXEL_REPETITION, in sii902x_bridge_mode_set()
420 ret = drm_hdmi_avi_infoframe_from_display_mode(&frame, &sii902x->mode, false); in sii902x_bridge_mode_set()
436 sii902x_set_format(sii902x); in sii902x_bridge_mode_set()
437 sii902x_set_connector_display_info(sii902x, conn_state); in sii902x_bridge_mode_set()
442 struct sii902x *sii902x = dev_get_priv(bridge->dev); in sii902x_bridge_enable() local
444 sii902x_reg_update_bits(sii902x, SII902X_PWR_STATE_CTRL, in sii902x_bridge_enable()
447 sii902x_reg_update_bits(sii902x, SII902X_SYS_CTRL_DATA, SII902X_SYS_CTRL_PWR_DWN, 0); in sii902x_bridge_enable()
452 struct sii902x *sii902x = dev_get_priv(bridge->dev); in sii902x_bridge_disable() local
454 sii902x_reg_update_bits(sii902x, SII902X_SYS_CTRL_DATA, in sii902x_bridge_disable()
466 static void sii902x_reset(struct sii902x *sii902x) in sii902x_reset() argument
468 if (!dm_gpio_is_valid(&sii902x->reset_gpio)) in sii902x_reset()
471 dm_gpio_set_value(&sii902x->reset_gpio, 1); in sii902x_reset()
476 dm_gpio_set_value(&sii902x->reset_gpio, 0); in sii902x_reset()
479 #define SII902X_READ_REG(v) dm_i2c_reg_read(sii902x->dev, v)
493 static int sii902x_i2c_bypass_select(struct sii902x *sii902x) in sii902x_i2c_bypass_select() argument
495 struct udevice *dev = sii902x->dev; in sii902x_i2c_bypass_select()
499 sii902x_reg_update_bits(sii902x, SII902X_SYS_CTRL_DATA, in sii902x_i2c_bypass_select()
528 static int sii902x_i2c_bypass_deselect(struct sii902x *sii902x) in sii902x_i2c_bypass_deselect() argument
530 struct udevice *dev = sii902x->dev; in sii902x_i2c_bypass_deselect()
557 ret = sii902x_reg_update_bits(sii902x, SII902X_SYS_CTRL_DATA, in sii902x_i2c_bypass_deselect()
577 struct sii902x *sii902x = container_of(adap, struct sii902x, adap); in sii902x_i2c_xfer() local
578 struct udevice *dev = sii902x->dev; in sii902x_i2c_xfer()
583 ret = sii902x_i2c_bypass_select(sii902x); in sii902x_i2c_xfer()
598 ret = sii902x_i2c_bypass_deselect(sii902x); in sii902x_i2c_xfer()
608 static int sii902x_init(struct sii902x *sii902x) in sii902x_init() argument
610 struct udevice *dev = sii902x->dev; in sii902x_init()
615 sii902x_reset(sii902x); in sii902x_init()
639 sii902x->adap.i2c_bus = dev->parent; in sii902x_init()
640 sii902x->adap.ddc_xfer = sii902x_i2c_xfer; in sii902x_init()
642 sii902x->edid_data.mode_buf = malloc(MODE_LEN * sizeof(struct drm_display_mode)); in sii902x_init()
643 if (!sii902x->edid_data.mode_buf) { in sii902x_init()
653 struct sii902x *sii902x = dev_get_priv(dev); in sii902x_probe() local
658 sii902x->dev = dev; in sii902x_probe()
659 sii902x->bridge = bridge; in sii902x_probe()
663 &sii902x->reset_gpio, GPIOD_IS_OUT); in sii902x_probe()
670 &sii902x->enable_gpio, GPIOD_IS_OUT); in sii902x_probe()
675 dm_gpio_set_value(&sii902x->enable_gpio, 1); in sii902x_probe()
681 sii902x->bus_format = MEDIA_BUS_FMT_RGB888_1X24; in sii902x_probe()
685 sii902x->bus_format = MEDIA_BUS_FMT_RGB888_1X24; in sii902x_probe()
688 sii902x->bus_format = MEDIA_BUS_FMT_YUYV8_1X16; in sii902x_probe()
691 sii902x->bus_format = MEDIA_BUS_FMT_YUV8_1X24; in sii902x_probe()
694 sii902x->bus_format = val; in sii902x_probe()
698 bridge->bus_format = sii902x->bus_format; in sii902x_probe()
700 ret = sii902x_init(sii902x); in sii902x_probe()
725 struct sii902x *sii902x = dev_get_priv(dev); in sii902x_get_timing() local
726 struct rockchip_bridge *bridge = sii902x->bridge; in sii902x_get_timing()
732 conn_state->edid = drm_do_get_edid(&sii902x->adap); in sii902x_get_timing()
734 ret = drm_add_edid_modes(&sii902x->edid_data, conn_state->edid); in sii902x_get_timing()
741 drm_mode_max_resolution_filter(&sii902x->edid_data, &state->crtc_state.max_output); in sii902x_get_timing()
742 if (!drm_mode_prune_invalid(&sii902x->edid_data)) { in sii902x_get_timing()
747 drm_mode_sort(&sii902x->edid_data); in sii902x_get_timing()
748 *mode = *sii902x->edid_data.preferred_mode; in sii902x_get_timing()
757 U_BOOT_DRIVER(sii902x) = {
762 .priv_auto_alloc_size = sizeof(struct sii902x),