Lines Matching full:it

343 static int it6263_parse_dt(struct it6263 *it)  in it6263_parse_dt()  argument
345 struct device *dev = it->dev; in it6263_parse_dt()
349 it->lvds_data_mapping = drm_of_lvds_get_data_mapping(dev->of_node); in it6263_parse_dt()
350 if (it->lvds_data_mapping < 0) { in it6263_parse_dt()
352 dev->of_node, "data-mapping", it->lvds_data_mapping); in it6263_parse_dt()
353 return it->lvds_data_mapping; in it6263_parse_dt()
356 it->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 2, 0); in it6263_parse_dt()
357 if (IS_ERR(it->next_bridge)) in it6263_parse_dt()
358 return dev_err_probe(dev, PTR_ERR(it->next_bridge), in it6263_parse_dt()
366 it->lvds_dual_link = true; in it6263_parse_dt()
374 it->lvds_link12_swap = true; in it6263_parse_dt()
405 static inline int it6263_lvds_set_i2c_addr(struct it6263 *it) in it6263_lvds_set_i2c_addr() argument
409 ret = regmap_write(it->hdmi_regmap, HDMI_REG_LVDS_PORT, in it6263_lvds_set_i2c_addr()
414 return regmap_write(it->hdmi_regmap, HDMI_REG_LVDS_PORT_EN, BIT(0)); in it6263_lvds_set_i2c_addr()
417 static inline void it6263_lvds_reset(struct it6263 *it) in it6263_lvds_reset() argument
420 regmap_write_bits(it->lvds_regmap, LVDS_REG_3C, BIT(0), 0x0); in it6263_lvds_reset()
422 regmap_write_bits(it->lvds_regmap, LVDS_REG_3C, BIT(0), BIT(0)); in it6263_lvds_reset()
425 regmap_write_bits(it->lvds_regmap, LVDS_REG_05, REG_SOFT_P_RST, in it6263_lvds_reset()
428 regmap_write_bits(it->lvds_regmap, LVDS_REG_05, REG_SOFT_P_RST, 0x0); in it6263_lvds_reset()
442 static inline void it6263_lvds_set_interface(struct it6263 *it) in it6263_lvds_set_interface() argument
447 regmap_write_bits(it->lvds_regmap, LVDS_REG_2C, REG_COL_DEP, BIT8); in it6263_lvds_set_interface()
449 if (it->lvds_data_mapping == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG) in it6263_lvds_set_interface()
455 regmap_write_bits(it->lvds_regmap, LVDS_REG_2C, OUT_MAP, fmt); in it6263_lvds_set_interface()
457 if (it->lvds_dual_link) { in it6263_lvds_set_interface()
458 regmap_write_bits(it->lvds_regmap, LVDS_REG_2C, DMODE, DISO); in it6263_lvds_set_interface()
459 regmap_write_bits(it->lvds_regmap, LVDS_REG_52, BIT(1), BIT(1)); in it6263_lvds_set_interface()
461 regmap_write_bits(it->lvds_regmap, LVDS_REG_2C, DMODE, SISO); in it6263_lvds_set_interface()
462 regmap_write_bits(it->lvds_regmap, LVDS_REG_52, BIT(1), 0); in it6263_lvds_set_interface()
466 static inline void it6263_lvds_set_afe(struct it6263 *it) in it6263_lvds_set_afe() argument
468 regmap_write(it->lvds_regmap, LVDS_REG_3C, 0xaa); in it6263_lvds_set_afe()
469 regmap_write(it->lvds_regmap, LVDS_REG_3F, 0x02); in it6263_lvds_set_afe()
470 regmap_write(it->lvds_regmap, LVDS_REG_47, 0xaa); in it6263_lvds_set_afe()
471 regmap_write(it->lvds_regmap, LVDS_REG_48, 0x02); in it6263_lvds_set_afe()
472 regmap_write(it->lvds_regmap, LVDS_REG_4F, 0x11); in it6263_lvds_set_afe()
474 regmap_write_bits(it->lvds_regmap, LVDS_REG_0B, REG_SSC_PCLK_RF, in it6263_lvds_set_afe()
476 regmap_write_bits(it->lvds_regmap, LVDS_REG_3C, 0x07, 0); in it6263_lvds_set_afe()
477 regmap_write_bits(it->lvds_regmap, LVDS_REG_2C, REG_DESSC_ENB, in it6263_lvds_set_afe()
481 static inline void it6263_lvds_sys_cfg(struct it6263 *it) in it6263_lvds_sys_cfg() argument
483 regmap_write_bits(it->lvds_regmap, LVDS_REG_0B, REG_LVDS_IN_SWAP, in it6263_lvds_sys_cfg()
484 it->lvds_link12_swap ? REG_LVDS_IN_SWAP : 0); in it6263_lvds_sys_cfg()
487 static inline void it6263_lvds_config(struct it6263 *it) in it6263_lvds_config() argument
489 it6263_lvds_reset(it); in it6263_lvds_config()
490 it6263_lvds_set_interface(it); in it6263_lvds_config()
491 it6263_lvds_set_afe(it); in it6263_lvds_config()
492 it6263_lvds_sys_cfg(it); in it6263_lvds_config()
495 static inline void it6263_hdmi_config(struct it6263 *it) in it6263_hdmi_config() argument
497 regmap_write(it->hdmi_regmap, HDMI_REG_SW_RST, HDMI_RST_ALL); in it6263_hdmi_config()
498 regmap_write(it->hdmi_regmap, HDMI_REG_INPUT_MODE, IN_RGB); in it6263_hdmi_config()
499 regmap_write_bits(it->hdmi_regmap, HDMI_REG_GCP, HDMI_COLOR_DEPTH, in it6263_hdmi_config()
503 static enum drm_connector_status it6263_detect(struct it6263 *it) in it6263_detect() argument
507 regmap_read(it->hdmi_regmap, HDMI_REG_SYS_STATUS, &val); in it6263_detect()
516 struct it6263 *it = data; in it6263_read_edid() local
517 struct regmap *regmap = it->hdmi_regmap; in it6263_read_edid()
535 dev_err(it->dev, "failed to clear DDC FIFO:%d\n", ret); in it6263_read_edid()
553 dev_err(it->dev, "failed to read EDID:%d\n", ret); in it6263_read_edid()
558 dev_err(it->dev, "DDC error\n"); in it6263_read_edid()
576 struct it6263 *it = bridge_to_it6263(bridge); in it6263_bridge_atomic_disable() local
578 regmap_write_bits(it->hdmi_regmap, HDMI_REG_GCP, AVMUTE, AVMUTE); in it6263_bridge_atomic_disable()
579 regmap_write(it->hdmi_regmap, HDMI_REG_PKT_GENERAL_CTRL, 0); in it6263_bridge_atomic_disable()
580 regmap_write(it->hdmi_regmap, HDMI_REG_AFE_DRV_CTRL, in it6263_bridge_atomic_disable()
589 struct it6263 *it = bridge_to_it6263(bridge); in it6263_bridge_atomic_enable() local
591 struct regmap *regmap = it->hdmi_regmap; in it6263_bridge_atomic_enable()
642 it6263_lvds_config(it); in it6263_bridge_atomic_enable()
646 dev_warn(it->dev, "failed to wait for video stable\n"); in it6263_bridge_atomic_enable()
673 struct it6263 *it = bridge_to_it6263(bridge); in it6263_bridge_attach() local
677 ret = drm_bridge_attach(bridge->encoder, it->next_bridge, bridge, in it6263_bridge_attach()
688 dev_err(it->dev, "failed to initialize bridge connector: %d\n", in it6263_bridge_attach()
700 struct it6263 *it = bridge_to_it6263(bridge); in it6263_bridge_detect() local
702 return it6263_detect(it); in it6263_bridge_detect()
709 struct it6263 *it = bridge_to_it6263(bridge); in it6263_bridge_edid_read() local
711 return drm_edid_read_custom(connector, it6263_read_edid, it); in it6263_bridge_edid_read()
722 struct it6263 *it = bridge_to_it6263(bridge); in it6263_bridge_atomic_get_input_bus_fmts() local
727 if (!it6263_is_input_bus_fmt_valid(it->lvds_data_mapping)) in it6263_bridge_atomic_get_input_bus_fmts()
734 input_fmts[0] = it->lvds_data_mapping; in it6263_bridge_atomic_get_input_bus_fmts()
757 struct it6263 *it = bridge_to_it6263(bridge); in it6263_hdmi_clear_infoframe() local
760 regmap_write(it->hdmi_regmap, HDMI_REG_AVI_INFOFRM_CTRL, 0); in it6263_hdmi_clear_infoframe()
762 dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type); in it6263_hdmi_clear_infoframe()
771 struct it6263 *it = bridge_to_it6263(bridge); in it6263_hdmi_write_infoframe() local
772 struct regmap *regmap = it->hdmi_regmap; in it6263_hdmi_write_infoframe()
775 dev_dbg(it->dev, "unsupported HDMI infoframe 0x%x\n", type); in it6263_hdmi_write_infoframe()
818 struct it6263 *it; in it6263_probe() local
821 it = devm_kzalloc(dev, sizeof(*it), GFP_KERNEL); in it6263_probe()
822 if (!it) in it6263_probe()
825 it->dev = dev; in it6263_probe()
826 it->hdmi_i2c = client; in it6263_probe()
828 it->hdmi_regmap = devm_regmap_init_i2c(client, in it6263_probe()
830 if (IS_ERR(it->hdmi_regmap)) in it6263_probe()
831 return dev_err_probe(dev, PTR_ERR(it->hdmi_regmap), in it6263_probe()
844 ret = it6263_parse_dt(it); in it6263_probe()
850 ret = it6263_lvds_set_i2c_addr(it); in it6263_probe()
854 it->lvds_i2c = devm_i2c_new_dummy_device(dev, client->adapter, in it6263_probe()
856 if (IS_ERR(it->lvds_i2c)) in it6263_probe()
857 return dev_err_probe(it->dev, PTR_ERR(it->lvds_i2c), in it6263_probe()
860 it->lvds_regmap = devm_regmap_init_i2c(it->lvds_i2c, in it6263_probe()
862 if (IS_ERR(it->lvds_regmap)) in it6263_probe()
863 return dev_err_probe(dev, PTR_ERR(it->lvds_regmap), in it6263_probe()
866 it6263_lvds_config(it); in it6263_probe()
867 it6263_hdmi_config(it); in it6263_probe()
869 i2c_set_clientdata(client, it); in it6263_probe()
871 it->bridge.funcs = &it6263_bridge_funcs; in it6263_probe()
872 it->bridge.of_node = dev->of_node; in it6263_probe()
874 it->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | in it6263_probe()
876 it->bridge.type = DRM_MODE_CONNECTOR_HDMIA; in it6263_probe()
877 it->bridge.vendor = "ITE"; in it6263_probe()
878 it->bridge.product = "IT6263"; in it6263_probe()
880 return devm_drm_bridge_add(dev, &it->bridge); in it6263_probe()