Lines Matching refs:samsung
1272 static void samsung_mipi_dcphy_bias_block_enable(struct samsung_mipi_dcphy *samsung, in samsung_mipi_dcphy_bias_block_enable() argument
1282 dev_info(samsung->dev, in samsung_mipi_dcphy_bias_block_enable()
1286 regmap_write(samsung->regmap, BIAS_CON0, 0x0010); in samsung_mipi_dcphy_bias_block_enable()
1287 regmap_write(samsung->regmap, BIAS_CON1, 0x0110); in samsung_mipi_dcphy_bias_block_enable()
1288 regmap_write(samsung->regmap, BIAS_CON2, bias_con2); in samsung_mipi_dcphy_bias_block_enable()
1294 if (samsung->c_option) in samsung_mipi_dcphy_bias_block_enable()
1295 regmap_update_bits(samsung->regmap, BIAS_CON4, in samsung_mipi_dcphy_bias_block_enable()
1299 static void samsung_mipi_dcphy_bias_block_disable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dcphy_bias_block_disable() argument
1303 static void samsung_mipi_dphy_lane_enable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dphy_lane_enable() argument
1305 regmap_write(samsung->regmap, DPHY_MC_GNR_CON1, T_PHY_READY(0x2000)); in samsung_mipi_dphy_lane_enable()
1306 regmap_update_bits(samsung->regmap, DPHY_MC_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1309 switch (samsung->lanes) { in samsung_mipi_dphy_lane_enable()
1311 regmap_write(samsung->regmap, DPHY_MD3_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1313 regmap_update_bits(samsung->regmap, DPHY_MD3_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1317 regmap_write(samsung->regmap, COMBO_MD2_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1319 regmap_update_bits(samsung->regmap, COMBO_MD2_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1323 regmap_write(samsung->regmap, COMBO_MD1_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1325 regmap_update_bits(samsung->regmap, COMBO_MD1_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1330 regmap_write(samsung->regmap, COMBO_MD0_GNR_CON1, in samsung_mipi_dphy_lane_enable()
1332 regmap_update_bits(samsung->regmap, COMBO_MD0_GNR_CON0, in samsung_mipi_dphy_lane_enable()
1338 static void samsung_mipi_cphy_lane_enable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_cphy_lane_enable() argument
1340 regmap_write(samsung->regmap, COMBO_MD0_GNR_CON1, T_PHY_READY(0x2000)); in samsung_mipi_cphy_lane_enable()
1341 regmap_write(samsung->regmap, COMBO_MD1_GNR_CON1, T_PHY_READY(0x2000)); in samsung_mipi_cphy_lane_enable()
1342 regmap_write(samsung->regmap, COMBO_MD2_GNR_CON1, T_PHY_READY(0x2000)); in samsung_mipi_cphy_lane_enable()
1344 regmap_update_bits(samsung->regmap, COMBO_MD0_GNR_CON0, in samsung_mipi_cphy_lane_enable()
1346 regmap_update_bits(samsung->regmap, COMBO_MD1_GNR_CON0, in samsung_mipi_cphy_lane_enable()
1348 regmap_update_bits(samsung->regmap, COMBO_MD2_GNR_CON0, in samsung_mipi_cphy_lane_enable()
1352 static void samsung_mipi_dphy_lane_disable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dphy_lane_disable() argument
1354 regmap_update_bits(samsung->regmap, DPHY_MC_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_dphy_lane_disable()
1355 regmap_update_bits(samsung->regmap, COMBO_MD0_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_dphy_lane_disable()
1356 regmap_update_bits(samsung->regmap, COMBO_MD1_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_dphy_lane_disable()
1357 regmap_update_bits(samsung->regmap, COMBO_MD2_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_dphy_lane_disable()
1358 regmap_update_bits(samsung->regmap, DPHY_MD3_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_dphy_lane_disable()
1361 static void samsung_mipi_cphy_lane_disable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_cphy_lane_disable() argument
1363 regmap_update_bits(samsung->regmap, COMBO_MD0_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_cphy_lane_disable()
1364 regmap_update_bits(samsung->regmap, COMBO_MD1_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_cphy_lane_disable()
1365 regmap_update_bits(samsung->regmap, COMBO_MD2_GNR_CON0, PHY_ENABLE, 0); in samsung_mipi_cphy_lane_disable()
1368 static void samsung_mipi_dcphy_pll_configure(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dcphy_pll_configure() argument
1370 regmap_update_bits(samsung->regmap, PLL_CON0, S_MASK | P_MASK, in samsung_mipi_dcphy_pll_configure()
1371 S(samsung->pll.scaler) | P(samsung->pll.prediv)); in samsung_mipi_dcphy_pll_configure()
1373 if (samsung->pll.dsm < 0) { in samsung_mipi_dcphy_pll_configure()
1377 dsm_tmp = abs(samsung->pll.dsm); in samsung_mipi_dcphy_pll_configure()
1380 regmap_write(samsung->regmap, PLL_CON1, dsm_tmp); in samsung_mipi_dcphy_pll_configure()
1382 regmap_write(samsung->regmap, PLL_CON1, samsung->pll.dsm); in samsung_mipi_dcphy_pll_configure()
1385 regmap_update_bits(samsung->regmap, PLL_CON2, in samsung_mipi_dcphy_pll_configure()
1386 M_MASK, M(samsung->pll.fbdiv)); in samsung_mipi_dcphy_pll_configure()
1388 if (samsung->pll.ssc_en) { in samsung_mipi_dcphy_pll_configure()
1389 regmap_write(samsung->regmap, PLL_CON3, in samsung_mipi_dcphy_pll_configure()
1390 MRR(samsung->pll.mrr) | MFR(samsung->pll.mfr)); in samsung_mipi_dcphy_pll_configure()
1391 regmap_update_bits(samsung->regmap, PLL_CON4, SSCG_EN, SSCG_EN); in samsung_mipi_dcphy_pll_configure()
1394 regmap_write(samsung->regmap, PLL_CON5, RESET_N_SEL | PLL_ENABLE_SEL); in samsung_mipi_dcphy_pll_configure()
1395 regmap_write(samsung->regmap, PLL_CON7, PLL_LOCK_CNT(0xf000)); in samsung_mipi_dcphy_pll_configure()
1396 regmap_write(samsung->regmap, PLL_CON8, PLL_STB_CNT(0xf000)); in samsung_mipi_dcphy_pll_configure()
1399 static void samsung_mipi_dcphy_pll_enable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dcphy_pll_enable() argument
1404 regmap_update_bits(samsung->regmap, PLL_CON0, PLL_EN, PLL_EN); in samsung_mipi_dcphy_pll_enable()
1406 ret = regmap_read_poll_timeout(samsung->regmap, PLL_STAT0, in samsung_mipi_dcphy_pll_enable()
1409 dev_err(samsung->dev, "DC-PHY pll is not locked\n"); in samsung_mipi_dcphy_pll_enable()
1412 static void samsung_mipi_dcphy_pll_disable(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dcphy_pll_disable() argument
1414 regmap_update_bits(samsung->regmap, PLL_CON0, PLL_EN, 0); in samsung_mipi_dcphy_pll_disable()
1418 samsung_mipi_dphy_get_timing(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dphy_get_timing() argument
1422 unsigned int lane_mbps = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_dphy_get_timing()
1439 samsung_mipi_cphy_get_timing(struct samsung_mipi_dcphy *samsung) in samsung_mipi_cphy_get_timing() argument
1443 unsigned int lane_msps = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_cphy_get_timing()
1459 static void samsung_mipi_cphy_timing_init(struct samsung_mipi_dcphy *samsung) in samsung_mipi_cphy_timing_init() argument
1462 unsigned int lane_hs_rate = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_cphy_timing_init()
1465 timing = samsung_mipi_cphy_get_timing(samsung); in samsung_mipi_cphy_timing_init()
1476 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON0, val); in samsung_mipi_cphy_timing_init()
1477 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON0, val); in samsung_mipi_cphy_timing_init()
1478 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON0, val); in samsung_mipi_cphy_timing_init()
1481 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON1, val); in samsung_mipi_cphy_timing_init()
1482 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON1, val); in samsung_mipi_cphy_timing_init()
1483 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON1, val); in samsung_mipi_cphy_timing_init()
1486 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON2, val); in samsung_mipi_cphy_timing_init()
1487 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON2, val); in samsung_mipi_cphy_timing_init()
1488 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON2, val); in samsung_mipi_cphy_timing_init()
1492 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON3, val); in samsung_mipi_cphy_timing_init()
1493 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON3, val); in samsung_mipi_cphy_timing_init()
1494 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON3, val); in samsung_mipi_cphy_timing_init()
1497 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON4, 0x1f4); in samsung_mipi_cphy_timing_init()
1498 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON4, 0x1f4); in samsung_mipi_cphy_timing_init()
1499 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON4, 0x1f4); in samsung_mipi_cphy_timing_init()
1505 samsung_mipi_dcphy_pll_round_rate(struct samsung_mipi_dcphy *samsung, in samsung_mipi_dcphy_pll_round_rate() argument
1509 u64 max_fout = samsung->c_option ? MAX_CPHY_BW : MAX_DPHY_BW; in samsung_mipi_dcphy_pll_round_rate()
1582 dev_dbg(samsung->dev, "p: %d, m: %d, dsm:%ld, scaler: %d\n", in samsung_mipi_dcphy_pll_round_rate()
1589 samsung_mipi_dphy_clk_lane_timing_init(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dphy_clk_lane_timing_init() argument
1592 unsigned int lane_hs_rate = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_dphy_clk_lane_timing_init()
1595 timing = samsung_mipi_dphy_get_timing(samsung); in samsung_mipi_dphy_clk_lane_timing_init()
1596 regmap_write(samsung->regmap, DPHY_MC_GNR_CON0, 0xf000); in samsung_mipi_dphy_clk_lane_timing_init()
1597 regmap_write(samsung->regmap, DPHY_MC_ANA_CON0, 0x7133); in samsung_mipi_dphy_clk_lane_timing_init()
1600 regmap_write(samsung->regmap, DPHY_MC_ANA_CON1, 0x0001); in samsung_mipi_dphy_clk_lane_timing_init()
1611 regmap_write(samsung->regmap, DPHY_MC_TIME_CON0, val); in samsung_mipi_dphy_clk_lane_timing_init()
1614 regmap_write(samsung->regmap, DPHY_MC_TIME_CON1, val); in samsung_mipi_dphy_clk_lane_timing_init()
1617 regmap_write(samsung->regmap, DPHY_MC_TIME_CON2, val); in samsung_mipi_dphy_clk_lane_timing_init()
1620 regmap_write(samsung->regmap, DPHY_MC_TIME_CON3, val); in samsung_mipi_dphy_clk_lane_timing_init()
1623 regmap_write(samsung->regmap, DPHY_MC_TIME_CON4, 0x1f4); in samsung_mipi_dphy_clk_lane_timing_init()
1630 regmap_write(samsung->regmap, DPHY_MC_DESKEW_CON0, 0x9cb1); in samsung_mipi_dphy_clk_lane_timing_init()
1634 samsung_mipi_dphy_data_lane_timing_init(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dphy_data_lane_timing_init() argument
1637 unsigned int lane_hs_rate = div64_ul(samsung->pll.rate, USEC_PER_SEC); in samsung_mipi_dphy_data_lane_timing_init()
1640 timing = samsung_mipi_dphy_get_timing(samsung); in samsung_mipi_dphy_data_lane_timing_init()
1642 regmap_write(samsung->regmap, COMBO_MD0_ANA_CON0, 0x7133); in samsung_mipi_dphy_data_lane_timing_init()
1643 regmap_write(samsung->regmap, COMBO_MD1_ANA_CON0, 0x7133); in samsung_mipi_dphy_data_lane_timing_init()
1644 regmap_write(samsung->regmap, COMBO_MD2_ANA_CON0, 0x7133); in samsung_mipi_dphy_data_lane_timing_init()
1645 regmap_write(samsung->regmap, DPHY_MD3_ANA_CON0, 0x7133); in samsung_mipi_dphy_data_lane_timing_init()
1648 regmap_write(samsung->regmap, COMBO_MD0_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1649 regmap_write(samsung->regmap, COMBO_MD1_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1650 regmap_write(samsung->regmap, COMBO_MD2_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1651 regmap_write(samsung->regmap, DPHY_MD3_ANA_CON1, 0x0001); in samsung_mipi_dphy_data_lane_timing_init()
1663 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1664 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1665 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1666 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON0, val); in samsung_mipi_dphy_data_lane_timing_init()
1669 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1670 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1671 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1672 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON1, val); in samsung_mipi_dphy_data_lane_timing_init()
1675 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1676 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1677 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1678 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON2, val); in samsung_mipi_dphy_data_lane_timing_init()
1682 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1683 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1684 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1685 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON3, val); in samsung_mipi_dphy_data_lane_timing_init()
1688 regmap_write(samsung->regmap, COMBO_MD0_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1689 regmap_write(samsung->regmap, COMBO_MD1_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1690 regmap_write(samsung->regmap, COMBO_MD2_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1691 regmap_write(samsung->regmap, DPHY_MD3_TIME_CON4, 0x1f4); in samsung_mipi_dphy_data_lane_timing_init()
1695 samsung_mipi_dcphy_hs_vreg_amp_configure(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dcphy_hs_vreg_amp_configure() argument
1697 regmap_write(samsung->regmap, DPHY_MC_ANA_CON2, HS_VREG_AMP_ICON(2)); in samsung_mipi_dcphy_hs_vreg_amp_configure()
1700 static void samsung_mipi_dphy_power_on(struct samsung_mipi_dcphy *samsung) in samsung_mipi_dphy_power_on() argument
1702 reset_control_assert(samsung->m_phy_rst); in samsung_mipi_dphy_power_on()
1704 samsung_mipi_dcphy_bias_block_enable(samsung, NULL); in samsung_mipi_dphy_power_on()
1705 samsung_mipi_dcphy_pll_configure(samsung); in samsung_mipi_dphy_power_on()
1706 samsung_mipi_dphy_clk_lane_timing_init(samsung); in samsung_mipi_dphy_power_on()
1707 samsung_mipi_dphy_data_lane_timing_init(samsung); in samsung_mipi_dphy_power_on()
1708 samsung_mipi_dcphy_pll_enable(samsung); in samsung_mipi_dphy_power_on()
1709 samsung_mipi_dphy_lane_enable(samsung); in samsung_mipi_dphy_power_on()
1711 reset_control_deassert(samsung->m_phy_rst); in samsung_mipi_dphy_power_on()
1719 static void samsung_mipi_cphy_power_on(struct samsung_mipi_dcphy *samsung) in samsung_mipi_cphy_power_on() argument
1721 regmap_write(samsung->grf_regmap, MIPI_DCPHY_GRF_CON0, M_CPHY_MODE); in samsung_mipi_cphy_power_on()
1722 reset_control_assert(samsung->m_phy_rst); in samsung_mipi_cphy_power_on()
1724 samsung_mipi_dcphy_bias_block_enable(samsung, NULL); in samsung_mipi_cphy_power_on()
1725 samsung_mipi_dcphy_hs_vreg_amp_configure(samsung); in samsung_mipi_cphy_power_on()
1726 samsung_mipi_dcphy_pll_configure(samsung); in samsung_mipi_cphy_power_on()
1727 samsung_mipi_cphy_timing_init(samsung); in samsung_mipi_cphy_power_on()
1728 samsung_mipi_dcphy_pll_enable(samsung); in samsung_mipi_cphy_power_on()
1729 samsung_mipi_cphy_lane_enable(samsung); in samsung_mipi_cphy_power_on()
1731 reset_control_deassert(samsung->m_phy_rst); in samsung_mipi_cphy_power_on()
1738 struct samsung_mipi_dcphy *samsung = phy_get_drvdata(phy); in samsung_mipi_dcphy_power_on() local
1743 pm_runtime_get_sync(samsung->dev); in samsung_mipi_dcphy_power_on()
1744 reset_control_assert(samsung->apb_rst); in samsung_mipi_dcphy_power_on()
1746 reset_control_deassert(samsung->apb_rst); in samsung_mipi_dcphy_power_on()
1747 if (atomic_read(&samsung->stream_cnt)) { in samsung_mipi_dcphy_power_on()
1748 sensor_sd = get_remote_sensor(&samsung->dphy_dev[0]->sd); in samsung_mipi_dcphy_power_on()
1749 samsung->stream_off(samsung->dphy_dev[0], &samsung->dphy_dev[0]->sd); in samsung_mipi_dcphy_power_on()
1753 samsung->stream_on(samsung->dphy_dev[0], &samsung->dphy_dev[0]->sd); in samsung_mipi_dcphy_power_on()
1762 samsung_mipi_dphy_power_on(samsung); in samsung_mipi_dcphy_power_on()
1765 samsung_mipi_cphy_power_on(samsung); in samsung_mipi_dcphy_power_on()
1773 struct samsung_mipi_dcphy *samsung = phy_get_drvdata(phy); in samsung_mipi_dcphy_power_off() local
1778 samsung_mipi_dphy_lane_disable(samsung); in samsung_mipi_dcphy_power_off()
1781 samsung_mipi_cphy_lane_disable(samsung); in samsung_mipi_dcphy_power_off()
1784 samsung_mipi_dcphy_pll_disable(samsung); in samsung_mipi_dcphy_power_off()
1785 samsung_mipi_dcphy_bias_block_disable(samsung); in samsung_mipi_dcphy_power_off()
1787 pm_runtime_put(samsung->dev); in samsung_mipi_dcphy_power_off()
1799 samsung_mipi_dcphy_pll_ssc_modulation_calc(struct samsung_mipi_dcphy *samsung, in samsung_mipi_dcphy_pll_ssc_modulation_calc() argument
1802 unsigned long fin = div64_ul(clk_get_rate(samsung->ref_clk), MSEC_PER_SEC); in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1803 u16 prediv = samsung->pll.prediv; in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1804 u16 fbdiv = samsung->pll.fbdiv; in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1836 dev_err(samsung->dev, "failed to calc ssc parameter mfr and mrr\n"); in samsung_mipi_dcphy_pll_ssc_modulation_calc()
1844 samsung_mipi_dcphy_pll_calc_rate(struct samsung_mipi_dcphy *samsung, in samsung_mipi_dcphy_pll_calc_rate() argument
1847 unsigned long prate = clk_get_rate(samsung->ref_clk); in samsung_mipi_dcphy_pll_calc_rate()
1855 fout = samsung_mipi_dcphy_pll_round_rate(samsung, prate, rate, in samsung_mipi_dcphy_pll_calc_rate()
1859 dev_dbg(samsung->dev, "%s: fin=%lu, req_rate=%llu\n", in samsung_mipi_dcphy_pll_calc_rate()
1861 dev_dbg(samsung->dev, "%s: fout=%lu, prediv=%u, fbdiv=%u\n", in samsung_mipi_dcphy_pll_calc_rate()
1864 samsung->pll.prediv = prediv; in samsung_mipi_dcphy_pll_calc_rate()
1865 samsung->pll.fbdiv = fbdiv; in samsung_mipi_dcphy_pll_calc_rate()
1866 samsung->pll.dsm = dsm; in samsung_mipi_dcphy_pll_calc_rate()
1867 samsung->pll.scaler = scaler; in samsung_mipi_dcphy_pll_calc_rate()
1868 samsung->pll.rate = fout; in samsung_mipi_dcphy_pll_calc_rate()
1875 ret = samsung_mipi_dcphy_pll_ssc_modulation_calc(samsung, in samsung_mipi_dcphy_pll_calc_rate()
1878 samsung->pll.ssc_en = true; in samsung_mipi_dcphy_pll_calc_rate()
1879 samsung->pll.mfr = mfr; in samsung_mipi_dcphy_pll_calc_rate()
1880 samsung->pll.mrr = mrr; in samsung_mipi_dcphy_pll_calc_rate()
1888 struct samsung_mipi_dcphy *samsung = phy_get_drvdata(phy); in samsung_mipi_dcphy_configure() local
1892 samsung->c_option = (mode == PHY_MODE_MIPI_DPHY) ? false : true; in samsung_mipi_dcphy_configure()
1894 samsung->lanes = opts->mipi_dphy.lanes > 4 ? 4 : opts->mipi_dphy.lanes; in samsung_mipi_dcphy_configure()
1896 samsung_mipi_dcphy_pll_calc_rate(samsung, target_rate); in samsung_mipi_dcphy_configure()
1897 opts->mipi_dphy.hs_clk_rate = samsung->pll.rate; in samsung_mipi_dcphy_configure()
1933 struct samsung_mipi_dcphy *samsung = dphy->samsung_phy; in samsung_dcphy_rx_config_settle() local
1968 regmap_write(samsung->regmap, RX_CLK_THS_SETTLE, 0x301); in samsung_dcphy_rx_config_settle()
1971 regmap_update_bits(samsung->regmap, RX_LANE0_THS_SETTLE, 0x1ff, hsfreq); in samsung_dcphy_rx_config_settle()
1972 regmap_update_bits(samsung->regmap, RX_LANE0_ERR_SOT_SYNC, 0xff, sot_sync); in samsung_dcphy_rx_config_settle()
1975 regmap_update_bits(samsung->regmap, RX_LANE1_THS_SETTLE, 0x1ff, hsfreq); in samsung_dcphy_rx_config_settle()
1976 regmap_update_bits(samsung->regmap, RX_LANE1_ERR_SOT_SYNC, 0xff, sot_sync); in samsung_dcphy_rx_config_settle()
1979 regmap_update_bits(samsung->regmap, RX_LANE2_THS_SETTLE, 0x1ff, hsfreq); in samsung_dcphy_rx_config_settle()
1980 regmap_update_bits(samsung->regmap, RX_LANE2_ERR_SOT_SYNC, 0xff, sot_sync); in samsung_dcphy_rx_config_settle()
1983 regmap_update_bits(samsung->regmap, RX_LANE3_THS_SETTLE, 0x1ff, hsfreq); in samsung_dcphy_rx_config_settle()
1984 regmap_update_bits(samsung->regmap, RX_LANE3_ERR_SOT_SYNC, 0xff, sot_sync); in samsung_dcphy_rx_config_settle()
1991 struct samsung_mipi_dcphy *samsung = dphy->samsung_phy; in samsung_dcphy_rx_config_common() local
2037 regmap_write(samsung->regmap, RX_S0C_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2038 regmap_write(samsung->regmap, RX_S0C_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2039 regmap_write(samsung->regmap, RX_S0C_ANA_CON2, dphy->dphy_param.clk_hs_term_sel); in samsung_dcphy_rx_config_common()
2040 regmap_write(samsung->regmap, RX_S0C_ANA_CON3, 0x0600); in samsung_dcphy_rx_config_common()
2042 regmap_write(samsung->regmap, RX_COMBO_S0D0_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2043 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2044 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON2, dlysel | in samsung_dcphy_rx_config_common()
2046 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON3, 0x0600 | in samsung_dcphy_rx_config_common()
2049 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON7, 0x40); in samsung_dcphy_rx_config_common()
2050 regmap_write(samsung->regmap, RX_COMBO_S0D0_DESKEW_CON2, in samsung_dcphy_rx_config_common()
2054 regmap_write(samsung->regmap, RX_COMBO_S0D1_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2055 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2056 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON2, dlysel | in samsung_dcphy_rx_config_common()
2058 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON3, 0x0600 | in samsung_dcphy_rx_config_common()
2061 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON7, 0x40); in samsung_dcphy_rx_config_common()
2062 regmap_write(samsung->regmap, RX_COMBO_S0D1_DESKEW_CON2, in samsung_dcphy_rx_config_common()
2066 regmap_write(samsung->regmap, RX_COMBO_S0D2_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2067 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2068 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON2, dlysel | in samsung_dcphy_rx_config_common()
2070 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON3, 0x0600 | in samsung_dcphy_rx_config_common()
2073 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON7, 0x40); in samsung_dcphy_rx_config_common()
2074 regmap_write(samsung->regmap, RX_COMBO_S0D2_DESKEW_CON2, in samsung_dcphy_rx_config_common()
2078 regmap_write(samsung->regmap, RX_S0D3_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2079 regmap_write(samsung->regmap, RX_S0D3_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2080 regmap_write(samsung->regmap, RX_S0D3_ANA_CON2, dlysel | in samsung_dcphy_rx_config_common()
2082 regmap_write(samsung->regmap, RX_S0D3_ANA_CON3, 0x0600 | in samsung_dcphy_rx_config_common()
2085 regmap_write(samsung->regmap, RX_S0D3_DESKEW_CON2, in samsung_dcphy_rx_config_common()
2090 regmap_write(samsung->regmap, RX_COMBO_S0D0_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2091 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2092 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON2, 0x5); in samsung_dcphy_rx_config_common()
2093 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON3, 0x600); in samsung_dcphy_rx_config_common()
2094 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON6, 0x608); in samsung_dcphy_rx_config_common()
2095 regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON7, 0x40); in samsung_dcphy_rx_config_common()
2096 regmap_write(samsung->regmap, RX_COMBO_S0D0_CRC_CON1, 0x1500); in samsung_dcphy_rx_config_common()
2097 regmap_write(samsung->regmap, RX_COMBO_S0D0_CRC_CON2, 0x30); in samsung_dcphy_rx_config_common()
2100 regmap_write(samsung->regmap, RX_COMBO_S0D1_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2101 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2102 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON2, 0x5); in samsung_dcphy_rx_config_common()
2103 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON3, 0x600); in samsung_dcphy_rx_config_common()
2104 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON6, 0x608); in samsung_dcphy_rx_config_common()
2105 regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON7, 0x40); in samsung_dcphy_rx_config_common()
2106 regmap_write(samsung->regmap, RX_COMBO_S0D1_CRC_CON1, 0x1500); in samsung_dcphy_rx_config_common()
2107 regmap_write(samsung->regmap, RX_COMBO_S0D1_CRC_CON2, 0x30); in samsung_dcphy_rx_config_common()
2110 regmap_write(samsung->regmap, RX_COMBO_S0D2_GNR_CON1, 0x1450); in samsung_dcphy_rx_config_common()
2111 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON1, 0x8000); in samsung_dcphy_rx_config_common()
2112 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON2, 0x5); in samsung_dcphy_rx_config_common()
2113 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON3, 0x600); in samsung_dcphy_rx_config_common()
2114 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON6, 0x608); in samsung_dcphy_rx_config_common()
2115 regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON7, 0x40); in samsung_dcphy_rx_config_common()
2116 regmap_write(samsung->regmap, RX_COMBO_S0D2_CRC_CON1, 0x1500); in samsung_dcphy_rx_config_common()
2117 regmap_write(samsung->regmap, RX_COMBO_S0D2_CRC_CON2, 0x30); in samsung_dcphy_rx_config_common()
2126 struct samsung_mipi_dcphy *samsung = dphy->samsung_phy; in samsung_dcphy_rx_lane_enable() local
2131 regmap_update_bits(samsung->regmap, RX_CLK_LANE_ENABLE, PHY_ENABLE, PHY_ENABLE); in samsung_dcphy_rx_lane_enable()
2134 regmap_update_bits(samsung->regmap, RX_DATA_LANE0_ENABLE, PHY_ENABLE, PHY_ENABLE); in samsung_dcphy_rx_lane_enable()
2136 regmap_update_bits(samsung->regmap, RX_DATA_LANE1_ENABLE, PHY_ENABLE, PHY_ENABLE); in samsung_dcphy_rx_lane_enable()
2138 regmap_update_bits(samsung->regmap, RX_DATA_LANE2_ENABLE, PHY_ENABLE, PHY_ENABLE); in samsung_dcphy_rx_lane_enable()
2140 regmap_update_bits(samsung->regmap, RX_DATA_LANE3_ENABLE, PHY_ENABLE, PHY_ENABLE); in samsung_dcphy_rx_lane_enable()
2144 ret = regmap_read_poll_timeout(samsung->regmap, RX_CLK_LANE_ENABLE, in samsung_dcphy_rx_lane_enable()
2147 dev_err(samsung->dev, "phy rx clk lane is not locked\n"); in samsung_dcphy_rx_lane_enable()
2154 ret = regmap_read_poll_timeout(samsung->regmap, RX_DATA_LANE0_ENABLE, in samsung_dcphy_rx_lane_enable()
2157 dev_err(samsung->dev, "phy rx data lane 0 is not locked\n"); in samsung_dcphy_rx_lane_enable()
2162 ret = regmap_read_poll_timeout(samsung->regmap, RX_DATA_LANE1_ENABLE, in samsung_dcphy_rx_lane_enable()
2165 dev_err(samsung->dev, "phy rx data lane 1 is not locked\n"); in samsung_dcphy_rx_lane_enable()
2170 ret = regmap_read_poll_timeout(samsung->regmap, RX_DATA_LANE2_ENABLE, in samsung_dcphy_rx_lane_enable()
2173 dev_err(samsung->dev, "phy rx data lane 2 is not locked\n"); in samsung_dcphy_rx_lane_enable()
2179 ret = regmap_read_poll_timeout(samsung->regmap, RX_DATA_LANE3_ENABLE, in samsung_dcphy_rx_lane_enable()
2182 dev_err(samsung->dev, "phy rx data lane 3 is not locked\n"); in samsung_dcphy_rx_lane_enable()
2194 struct samsung_mipi_dcphy *samsung = dphy->samsung_phy; in samsung_dcphy_rx_stream_on() local
2203 mutex_lock(&samsung->mutex); in samsung_dcphy_rx_stream_on()
2205 regmap_write(samsung->grf_regmap, MIPI_DCPHY_GRF_CON0, S_CPHY_MODE); in samsung_dcphy_rx_stream_on()
2207 if (samsung->s_phy_rst) in samsung_dcphy_rx_stream_on()
2208 reset_control_assert(samsung->s_phy_rst); in samsung_dcphy_rx_stream_on()
2210 samsung_mipi_dcphy_bias_block_enable(samsung, dphy); in samsung_dcphy_rx_stream_on()
2220 if (samsung->s_phy_rst) in samsung_dcphy_rx_stream_on()
2221 reset_control_deassert(samsung->s_phy_rst); in samsung_dcphy_rx_stream_on()
2223 atomic_inc(&samsung->stream_cnt); in samsung_dcphy_rx_stream_on()
2224 mutex_unlock(&samsung->mutex); in samsung_dcphy_rx_stream_on()
2228 if (samsung->s_phy_rst) in samsung_dcphy_rx_stream_on()
2229 reset_control_deassert(samsung->s_phy_rst); in samsung_dcphy_rx_stream_on()
2230 mutex_unlock(&samsung->mutex); in samsung_dcphy_rx_stream_on()
2239 struct samsung_mipi_dcphy *samsung = dphy->samsung_phy; in samsung_dcphy_rx_stream_off() local
2249 if (atomic_dec_return(&samsung->stream_cnt)) in samsung_dcphy_rx_stream_off()
2252 mutex_lock(&samsung->mutex); in samsung_dcphy_rx_stream_off()
2253 if (samsung->s_phy_rst) in samsung_dcphy_rx_stream_off()
2254 reset_control_assert(samsung->s_phy_rst); in samsung_dcphy_rx_stream_off()
2257 regmap_update_bits(samsung->regmap, RX_CLK_LANE_ENABLE, PHY_ENABLE, 0); in samsung_dcphy_rx_stream_off()
2260 regmap_update_bits(samsung->regmap, RX_DATA_LANE0_ENABLE, PHY_ENABLE, 0); in samsung_dcphy_rx_stream_off()
2262 regmap_update_bits(samsung->regmap, RX_DATA_LANE1_ENABLE, PHY_ENABLE, 0); in samsung_dcphy_rx_stream_off()
2264 regmap_update_bits(samsung->regmap, RX_DATA_LANE2_ENABLE, PHY_ENABLE, 0); in samsung_dcphy_rx_stream_off()
2266 regmap_update_bits(samsung->regmap, RX_DATA_LANE3_ENABLE, PHY_ENABLE, 0); in samsung_dcphy_rx_stream_off()
2268 if (samsung->s_phy_rst) in samsung_dcphy_rx_stream_off()
2269 reset_control_deassert(samsung->s_phy_rst); in samsung_dcphy_rx_stream_off()
2272 mutex_unlock(&samsung->mutex); in samsung_dcphy_rx_stream_off()
2279 struct samsung_mipi_dcphy *samsung = phy_get_drvdata(phy); in samsung_mipi_dcphy_init() local
2281 pm_runtime_get_sync(samsung->dev); in samsung_mipi_dcphy_init()
2288 struct samsung_mipi_dcphy *samsung = phy_get_drvdata(phy); in samsung_mipi_dcphy_exit() local
2290 pm_runtime_put(samsung->dev); in samsung_mipi_dcphy_exit()
2316 struct samsung_mipi_dcphy *samsung; in samsung_mipi_dcphy_probe() local
2323 samsung = devm_kzalloc(dev, sizeof(*samsung), GFP_KERNEL); in samsung_mipi_dcphy_probe()
2324 if (!samsung) in samsung_mipi_dcphy_probe()
2327 samsung->dev = dev; in samsung_mipi_dcphy_probe()
2328 platform_set_drvdata(pdev, samsung); in samsung_mipi_dcphy_probe()
2335 samsung->regmap = devm_regmap_init_mmio(dev, regs, in samsung_mipi_dcphy_probe()
2337 if (IS_ERR(samsung->regmap)) { in samsung_mipi_dcphy_probe()
2338 ret = PTR_ERR(samsung->regmap); in samsung_mipi_dcphy_probe()
2343 samsung->grf_regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); in samsung_mipi_dcphy_probe()
2344 if (IS_ERR(samsung->grf_regmap)) { in samsung_mipi_dcphy_probe()
2346 return PTR_ERR(samsung->grf_regmap); in samsung_mipi_dcphy_probe()
2349 samsung->ref_clk = devm_clk_get(dev, "ref"); in samsung_mipi_dcphy_probe()
2350 if (IS_ERR(samsung->ref_clk)) { in samsung_mipi_dcphy_probe()
2352 return PTR_ERR(samsung->ref_clk); in samsung_mipi_dcphy_probe()
2355 samsung->pclk = devm_clk_get(dev, "pclk"); in samsung_mipi_dcphy_probe()
2356 if (IS_ERR(samsung->pclk)) { in samsung_mipi_dcphy_probe()
2358 return PTR_ERR(samsung->pclk); in samsung_mipi_dcphy_probe()
2361 samsung->m_phy_rst = devm_reset_control_get(dev, "m_phy"); in samsung_mipi_dcphy_probe()
2362 if (IS_ERR(samsung->m_phy_rst)) { in samsung_mipi_dcphy_probe()
2364 return PTR_ERR(samsung->m_phy_rst); in samsung_mipi_dcphy_probe()
2367 samsung->s_phy_rst = devm_reset_control_get(dev, "s_phy"); in samsung_mipi_dcphy_probe()
2368 if (IS_ERR(samsung->s_phy_rst)) { in samsung_mipi_dcphy_probe()
2370 return PTR_ERR(samsung->s_phy_rst); in samsung_mipi_dcphy_probe()
2373 samsung->apb_rst = devm_reset_control_get(dev, "apb"); in samsung_mipi_dcphy_probe()
2374 if (IS_ERR(samsung->apb_rst)) { in samsung_mipi_dcphy_probe()
2376 return PTR_ERR(samsung->apb_rst); in samsung_mipi_dcphy_probe()
2379 samsung->grf_apb_rst = devm_reset_control_get(dev, "grf"); in samsung_mipi_dcphy_probe()
2380 if (IS_ERR(samsung->grf_apb_rst)) { in samsung_mipi_dcphy_probe()
2382 return PTR_ERR(samsung->grf_apb_rst); in samsung_mipi_dcphy_probe()
2391 phy_set_drvdata(phy, samsung); in samsung_mipi_dcphy_probe()
2399 samsung->stream_on = samsung_dcphy_rx_stream_on; in samsung_mipi_dcphy_probe()
2400 samsung->stream_off = samsung_dcphy_rx_stream_off; in samsung_mipi_dcphy_probe()
2401 mutex_init(&samsung->mutex); in samsung_mipi_dcphy_probe()
2409 struct samsung_mipi_dcphy *samsung = platform_get_drvdata(pdev); in samsung_mipi_dcphy_remove() local
2411 pm_runtime_disable(samsung->dev); in samsung_mipi_dcphy_remove()
2412 mutex_destroy(&samsung->mutex); in samsung_mipi_dcphy_remove()
2419 struct samsung_mipi_dcphy *samsung = dev_get_drvdata(dev); in samsung_mipi_dcphy_runtime_suspend() local
2421 clk_disable_unprepare(samsung->pclk); in samsung_mipi_dcphy_runtime_suspend()
2422 clk_disable_unprepare(samsung->ref_clk); in samsung_mipi_dcphy_runtime_suspend()
2429 struct samsung_mipi_dcphy *samsung = dev_get_drvdata(dev); in samsung_mipi_dcphy_runtime_resume() local
2431 clk_prepare_enable(samsung->pclk); in samsung_mipi_dcphy_runtime_resume()
2432 clk_prepare_enable(samsung->ref_clk); in samsung_mipi_dcphy_runtime_resume()