Lines Matching refs:ep9461e

67 static struct ep9461e_dev *ep9461e;  variable
69 static void ep9461e_rx_select(struct ep9461e_dev *ep9461e);
70 static void ep9461e_rx_manual_select(struct ep9461e_dev *ep9461e);
72 static void i2c_wr(struct ep9461e_dev *ep9461e, u16 reg, u8 *val, u32 n) in i2c_wr() argument
75 struct i2c_client *client = ep9461e->client; in i2c_wr()
88 dev_err(ep9461e->dev, "writing register 0x%x from 0x%x failed\n", in i2c_wr()
93 dev_dbg(ep9461e->dev, "I2C write 0x%02x = 0x%02x\n", in i2c_wr()
97 dev_dbg(ep9461e->dev, in i2c_wr()
102 dev_dbg(ep9461e->dev, in i2c_wr()
107 dev_dbg(ep9461e->dev, in i2c_wr()
114 static void i2c_rd(struct ep9461e_dev *ep9461e, u16 reg, u8 *val, u32 n) in i2c_rd() argument
117 struct i2c_client *client = ep9461e->client; in i2c_rd()
135 dev_err(ep9461e->dev, "reading register 0x%x from 0x%x failed\n", in i2c_rd()
140 static void i2c_rd8(struct ep9461e_dev *ep9461e, u16 reg, u8 *val) in i2c_rd8() argument
142 i2c_rd(ep9461e, reg, val, 1); in i2c_rd8()
145 static void i2c_wr8(struct ep9461e_dev *ep9461e, u16 reg, u8 buf) in i2c_wr8() argument
147 i2c_wr(ep9461e, reg, &buf, 1); in i2c_wr8()
150 static void i2c_wr8_and_or(struct ep9461e_dev *ep9461e, u16 reg, u32 mask, in i2c_wr8_and_or() argument
155 i2c_rd8(ep9461e, reg, &val_p); in i2c_wr8_and_or()
156 i2c_wr8(ep9461e, reg, (val_p & mask) | val); in i2c_wr8_and_or()
179 struct ep9461e_dev *ep9461e = g_ep9461e; in hdmirxsel_show() local
181 dev_info(ep9461e->dev, "%s: hdmi rx select state: %d\n", in hdmirxsel_show()
182 __func__, ep9461e->hdmi_rx_sel); in hdmirxsel_show()
184 return sprintf(buf, "%d\n", ep9461e->hdmi_rx_sel); in hdmirxsel_show()
191 struct ep9461e_dev *ep9461e = g_ep9461e; in hdmirxsel_store() local
197 dev_dbg(ep9461e->dev, "state: %d\n", hdmirxstate); in hdmirxsel_store()
198 ep9461e->hdmi_rx_sel = hdmirxstate; in hdmirxsel_store()
199 if (ep9461e->auto_switch_en | ep9461e->cec_switch_en) in hdmirxsel_store()
200 ep9461e->auto_switch_en = ep9461e->cec_switch_en = 0; in hdmirxsel_store()
201 ep9461e_rx_select(ep9461e); in hdmirxsel_store()
203 dev_err(ep9461e->dev, "write hdmi_rx_sel failed!!!\n"); in hdmirxsel_store()
212 struct ep9461e_dev *ep9461e = g_ep9461e; in hdmiautoswitch_show() local
214 dev_info(ep9461e->dev, "hdmi rx select auto_switch state: %d\n", in hdmiautoswitch_show()
215 ep9461e->auto_switch_en); in hdmiautoswitch_show()
217 return sprintf(buf, "%d\n", ep9461e->auto_switch_en); in hdmiautoswitch_show()
224 struct ep9461e_dev *ep9461e = g_ep9461e; in hdmiautoswitch_store() local
230 dev_dbg(ep9461e->dev, "state: %d\n", hdmiautoswitch); in hdmiautoswitch_store()
231 ep9461e->auto_switch_en = hdmiautoswitch; in hdmiautoswitch_store()
232 ep9461e_rx_select(ep9461e); in hdmiautoswitch_store()
234 dev_err(ep9461e->dev, "write hdmi auto switch failed!!!\n"); in hdmiautoswitch_store()
243 static inline bool detect_rx_signal(struct ep9461e_dev *ep9461e) in detect_rx_signal() argument
247 i2c_rd8(ep9461e, RX_SIGNAL_DETECT, &val); in detect_rx_signal()
254 static void ep9461e_init(struct ep9461e_dev *ep9461e) in ep9461e_init() argument
256 ep9461e->power_up_chip_en = false; in ep9461e_init()
257 ep9461e->auto_switch_en = false; in ep9461e_init()
258 ep9461e->hdmi_rx_sel = 0; in ep9461e_init()
259 ep9461e->err_cnt = 0; in ep9461e_init()
261 if (ep9461e->power_up_chip_en) { in ep9461e_init()
262 i2c_wr8_and_or(ep9461e, GENERAL_CONTROL, ~MASK_POWER, in ep9461e_init()
265 ep9461e_rx_select(ep9461e); in ep9461e_init()
266 schedule_delayed_work(&ep9461e->work_i2c_poll, msecs_to_jiffies(1000)); in ep9461e_init()
269 static void ep9461e_rx_manual_select(struct ep9461e_dev *ep9461e) in ep9461e_rx_manual_select() argument
271 i2c_wr8(ep9461e, RX_SEL_CONTROL, ep9461e->hdmi_rx_sel); in ep9461e_rx_manual_select()
274 static void ep9461e_rx_select(struct ep9461e_dev *ep9461e) in ep9461e_rx_select() argument
278 if (ep9461e->auto_switch_en) { in ep9461e_rx_select()
279 i2c_wr8_and_or(ep9461e, GENERAL_CONTROL, ~MASK_AUTO_SWITCH, in ep9461e_rx_select()
282 ep9461e_rx_manual_select(ep9461e); in ep9461e_rx_select()
285 ret = detect_rx_signal(ep9461e); in ep9461e_rx_select()
287 dev_info(ep9461e->dev, "Detect HDMI RX valid signal!\n"); in ep9461e_rx_select()
289 dev_err(ep9461e->dev, "HDMI RX has no valid signal!\n"); in ep9461e_rx_select()
297 struct ep9461e_dev *ep9461e = in ep9461e_work_i2c_poll() local
300 ret = detect_rx_signal(ep9461e); in ep9461e_work_i2c_poll()
301 if (!ret && (ep9461e->err_cnt < 10)) { in ep9461e_work_i2c_poll()
302 ep9461e->err_cnt++; in ep9461e_work_i2c_poll()
303 dev_err(ep9461e->dev, in ep9461e_work_i2c_poll()
305 ep9461e->err_cnt); in ep9461e_work_i2c_poll()
306 if (ep9461e->err_cnt >= 10) in ep9461e_work_i2c_poll()
307 dev_err(ep9461e->dev, in ep9461e_work_i2c_poll()
310 ep9461e->err_cnt = 0; in ep9461e_work_i2c_poll()
312 schedule_delayed_work(&ep9461e->work_i2c_poll, msecs_to_jiffies(1000)); in ep9461e_work_i2c_poll()
331 struct ep9461e_dev *ep9461e; in ep9461e_probe() local
345 ep9461e = devm_kzalloc(dev, sizeof(struct ep9461e_dev), GFP_KERNEL); in ep9461e_probe()
346 if (!ep9461e) in ep9461e_probe()
349 ep9461e->client = client; in ep9461e_probe()
350 ep9461e->dev = dev; in ep9461e_probe()
355 dev_err(ep9461e->dev, in ep9461e_probe()
360 mutex_init(&ep9461e->confctl_mutex); in ep9461e_probe()
364 dev_err(ep9461e->dev, "failed to create attr hdmirxsel!\n"); in ep9461e_probe()
371 dev_err(ep9461e->dev, in ep9461e_probe()
376 INIT_DELAYED_WORK(&ep9461e->work_i2c_poll, ep9461e_work_i2c_poll); in ep9461e_probe()
378 ep9461e_init(ep9461e); in ep9461e_probe()
379 g_ep9461e = ep9461e; in ep9461e_probe()
381 dev_info(ep9461e->dev, "%s found @ 0x%x (%s)\n", in ep9461e_probe()
397 cancel_delayed_work_sync(&ep9461e->work_i2c_poll); in ep9461e_remove()
402 mutex_destroy(&ep9461e->confctl_mutex); in ep9461e_remove()