Lines Matching full:dphy
12 #include "dphy.h"
14 #define dphy_dbg(dphy, fmt, arg...) dev_dbg((dphy)->dev, fmt, ##arg) argument
15 #define dphy_err(dphy, fmt, arg...) dev_err((dphy)->dev, fmt, ##arg) argument
17 /* DW dphy Host registers */
30 /* DW dphy Host Transactions */
36 static u32 dw_csi2_host_read(struct dphy_data *dphy, u32 offset) in dw_csi2_host_read() argument
38 return readl(dphy->base + offset); in dw_csi2_host_read()
41 static void dw_csi2_host_write(struct dphy_data *dphy, u32 offset, u32 data) in dw_csi2_host_write() argument
43 writel(data, dphy->base + offset); in dw_csi2_host_write()
46 static void set_tstclr(struct dphy_data *dphy, u32 val) in set_tstclr() argument
48 u32 ctrl0 = dw_csi2_host_read(dphy, DPHY_PHY_TST_CTRL0); in set_tstclr()
50 dw_csi2_host_write(dphy, DPHY_PHY_TST_CTRL0, (ctrl0 & ~1) | val); in set_tstclr()
53 static void set_tstclk(struct dphy_data *dphy, u32 val) in set_tstclk() argument
55 u32 ctrl0 = dw_csi2_host_read(dphy, DPHY_PHY_TST_CTRL0); in set_tstclk()
57 dw_csi2_host_write(dphy, DPHY_PHY_TST_CTRL0, (ctrl0 & ~2) | (val << 1)); in set_tstclk()
60 static uint8_t get_tstdout(struct dphy_data *dphy) in get_tstdout() argument
62 u32 ctrl1 = dw_csi2_host_read(dphy, DPHY_PHY_TST_CTRL1); in get_tstdout()
67 static void set_testen(struct dphy_data *dphy, u32 val) in set_testen() argument
69 u32 ctrl1 = dw_csi2_host_read(dphy, DPHY_PHY_TST_CTRL1); in set_testen()
71 dw_csi2_host_write(dphy, DPHY_PHY_TST_CTRL1, in set_testen()
75 static void set_testdin(struct dphy_data *dphy, u32 val) in set_testdin() argument
77 u32 ctrl1 = dw_csi2_host_read(dphy, DPHY_PHY_TST_CTRL1); in set_testdin()
79 dw_csi2_host_write(dphy, DPHY_PHY_TST_CTRL1, (ctrl1 & ~0xff) | val); in set_testdin()
82 static uint8_t dphy_transaction(struct dphy_data *dphy, u8 test_code, in dphy_transaction() argument
85 /* See page 101 of the MIPI DPHY databook. */ in dphy_transaction()
86 set_tstclk(dphy, 1); in dphy_transaction()
87 set_testen(dphy, 0); in dphy_transaction()
88 set_testdin(dphy, test_code); in dphy_transaction()
89 set_testen(dphy, 1); in dphy_transaction()
90 set_tstclk(dphy, 0); in dphy_transaction()
91 set_testen(dphy, 0); in dphy_transaction()
92 set_testdin(dphy, test_data); in dphy_transaction()
93 set_tstclk(dphy, 1); in dphy_transaction()
94 return get_tstdout(dphy); in dphy_transaction()
97 static void dphy_set_hsfreqrange(struct dphy_data *dphy, uint32_t mbps) in dphy_set_hsfreqrange() argument
99 /* See Table 5-1 on page 65 of dphy databook */ in dphy_set_hsfreqrange()
118 dphy_err(dphy, "DPHY: Datarate %u Mbps out of range\n", mbps); in dphy_set_hsfreqrange()
125 dphy_transaction(dphy, DPHY_HS_RX_CTRL_LANE0_OFFSET, in dphy_set_hsfreqrange()
129 static void dphy_init(struct dphy_data *dphy) in dphy_init() argument
131 dw_csi2_host_write(dphy, DPHY_PHY_RSTZ, 0); in dphy_init()
132 dw_csi2_host_write(dphy, DPHY_PHY_SHUTDOWNZ, 0); in dphy_init()
133 set_tstclk(dphy, 1); in dphy_init()
134 set_testen(dphy, 0); in dphy_init()
135 set_tstclr(dphy, 1); in dphy_init()
137 set_tstclr(dphy, 0); in dphy_init()
140 dphy_set_hsfreqrange(dphy, dphy->dphy_rate); in dphy_init()
143 dw_csi2_host_write(dphy, DPHY_PHY_SHUTDOWNZ, 1); in dphy_init()
145 dw_csi2_host_write(dphy, DPHY_PHY_RSTZ, 1); in dphy_init()
148 void dphy_start(struct dphy_data *dphy) in dphy_start() argument
150 dphy_dbg(dphy, "%s: Link rate %u Mbps, %u data lanes\n", __func__, in dphy_start()
151 dphy->dphy_rate, dphy->active_lanes); in dphy_start()
153 dw_csi2_host_write(dphy, DPHY_N_LANES, (dphy->active_lanes - 1)); in dphy_start()
154 dphy_init(dphy); in dphy_start()
155 dw_csi2_host_write(dphy, DPHY_RESETN, 0xffffffff); in dphy_start()
159 void dphy_stop(struct dphy_data *dphy) in dphy_stop() argument
161 dphy_dbg(dphy, "%s\n", __func__); in dphy_stop()
164 dw_csi2_host_write(dphy, DPHY_N_LANES, 0); in dphy_stop()
165 dw_csi2_host_write(dphy, DPHY_RESETN, 0); in dphy_stop()
168 void dphy_probe(struct dphy_data *dphy) in dphy_probe() argument
173 host_ver = dw_csi2_host_read(dphy, DPHY_VERSION); in dphy_probe()
179 dphy_dbg(dphy, "DW dphy Host HW v%u.%u\n", host_ver_major, in dphy_probe()