Lines Matching full:i2c

29 #include <linux/i2c.h>
61 struct i2c_client *i2c; member
81 static int wm2000_write(struct i2c_client *i2c, unsigned int reg, in wm2000_write() argument
84 struct wm2000_priv *wm2000 = i2c_get_clientdata(i2c); in wm2000_write()
90 struct i2c_client *i2c = wm2000->i2c; in wm2000_reset() local
92 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_ENG_CLR); in wm2000_reset()
93 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_RAM_CLR); in wm2000_reset()
94 wm2000_write(i2c, WM2000_REG_ID1, 0); in wm2000_reset()
99 static int wm2000_poll_bit(struct i2c_client *i2c, in wm2000_poll_bit() argument
102 struct wm2000_priv *wm2000 = i2c_get_clientdata(i2c); in wm2000_poll_bit()
119 static int wm2000_power_up(struct i2c_client *i2c, int analogue) in wm2000_power_up() argument
121 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_power_up()
129 dev_dbg(&i2c->dev, "Beginning power up\n"); in wm2000_power_up()
133 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret); in wm2000_power_up()
139 dev_dbg(&i2c->dev, "Disabling MCLK divider\n"); in wm2000_power_up()
140 wm2000_write(i2c, WM2000_REG_SYS_CTL2, in wm2000_power_up()
143 dev_dbg(&i2c->dev, "Enabling MCLK divider\n"); in wm2000_power_up()
144 wm2000_write(i2c, WM2000_REG_SYS_CTL2, in wm2000_power_up()
148 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_ENG_CLR); in wm2000_power_up()
149 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_ENG_SET); in wm2000_power_up()
152 if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT, in wm2000_power_up()
154 dev_err(&i2c->dev, "ANC engine failed to reset\n"); in wm2000_power_up()
159 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_power_up()
161 dev_err(&i2c->dev, "ANC engine failed to initialise\n"); in wm2000_power_up()
166 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_RAM_SET); in wm2000_power_up()
170 dev_dbg(&i2c->dev, "Downloading %d bytes\n", in wm2000_power_up()
173 ret = i2c_master_send(i2c, wm2000->anc_download, in wm2000_power_up()
176 dev_err(&i2c->dev, "i2c_transfer() failed: %d\n", ret); in wm2000_power_up()
181 dev_err(&i2c->dev, "i2c_transfer() failed, %d != %d\n", in wm2000_power_up()
187 dev_dbg(&i2c->dev, "Download complete\n"); in wm2000_power_up()
190 wm2000_write(i2c, WM2000_REG_ANA_VMID_PU_TIME, 248 / 4); in wm2000_power_up()
192 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_power_up()
197 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_power_up()
204 dev_err(&i2c->dev, "Unable to read Speech Clarity: %d\n", ret); in wm2000_power_up()
212 wm2000_write(i2c, WM2000_REG_SPEECH_CLARITY, val); in wm2000_power_up()
214 wm2000_write(i2c, WM2000_REG_SYS_START0, 0x33); in wm2000_power_up()
215 wm2000_write(i2c, WM2000_REG_SYS_START1, 0x02); in wm2000_power_up()
217 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_INT_N_CLR); in wm2000_power_up()
219 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_power_up()
221 dev_err(&i2c->dev, "Timed out waiting for device\n"); in wm2000_power_up()
226 dev_dbg(&i2c->dev, "ANC active\n"); in wm2000_power_up()
228 dev_dbg(&i2c->dev, "Analogue active\n"); in wm2000_power_up()
234 static int wm2000_power_down(struct i2c_client *i2c, int analogue) in wm2000_power_down() argument
236 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_power_down()
239 wm2000_write(i2c, WM2000_REG_ANA_VMID_PD_TIME, 248 / 4); in wm2000_power_down()
240 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_power_down()
244 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_power_down()
248 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_power_down()
250 dev_err(&i2c->dev, "Timeout waiting for ANC power down\n"); in wm2000_power_down()
254 if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT, in wm2000_power_down()
256 dev_err(&i2c->dev, "Timeout waiting for ANC engine idle\n"); in wm2000_power_down()
262 dev_dbg(&i2c->dev, "powered off\n"); in wm2000_power_down()
268 static int wm2000_enter_bypass(struct i2c_client *i2c, int analogue) in wm2000_enter_bypass() argument
270 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_enter_bypass()
276 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_enter_bypass()
281 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_enter_bypass()
286 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_enter_bypass()
288 dev_err(&i2c->dev, "Timeout waiting for ANC disable\n"); in wm2000_enter_bypass()
292 if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT, in wm2000_enter_bypass()
294 dev_err(&i2c->dev, "Timeout waiting for ANC engine idle\n"); in wm2000_enter_bypass()
298 wm2000_write(i2c, WM2000_REG_SYS_CTL1, WM2000_SYS_STBY); in wm2000_enter_bypass()
299 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_RAM_CLR); in wm2000_enter_bypass()
302 dev_dbg(&i2c->dev, "bypass enabled\n"); in wm2000_enter_bypass()
307 static int wm2000_exit_bypass(struct i2c_client *i2c, int analogue) in wm2000_exit_bypass() argument
309 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_exit_bypass()
314 wm2000_write(i2c, WM2000_REG_SYS_CTL1, 0); in wm2000_exit_bypass()
317 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_exit_bypass()
322 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_exit_bypass()
327 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_RAM_SET); in wm2000_exit_bypass()
328 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_INT_N_CLR); in wm2000_exit_bypass()
330 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_exit_bypass()
332 dev_err(&i2c->dev, "Timed out waiting for MOUSE\n"); in wm2000_exit_bypass()
337 dev_dbg(&i2c->dev, "MOUSE active\n"); in wm2000_exit_bypass()
342 static int wm2000_enter_standby(struct i2c_client *i2c, int analogue) in wm2000_enter_standby() argument
344 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_enter_standby()
350 wm2000_write(i2c, WM2000_REG_ANA_VMID_PD_TIME, 248 / 4); in wm2000_enter_standby()
352 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_enter_standby()
357 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_enter_standby()
362 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_enter_standby()
364 dev_err(&i2c->dev, in wm2000_enter_standby()
369 if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT, WM2000_ANC_ENG_IDLE)) { in wm2000_enter_standby()
370 dev_err(&i2c->dev, in wm2000_enter_standby()
375 wm2000_write(i2c, WM2000_REG_SYS_CTL1, WM2000_SYS_STBY); in wm2000_enter_standby()
376 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_RAM_CLR); in wm2000_enter_standby()
379 dev_dbg(&i2c->dev, "standby\n"); in wm2000_enter_standby()
381 dev_dbg(&i2c->dev, "Analogue disabled\n"); in wm2000_enter_standby()
386 static int wm2000_exit_standby(struct i2c_client *i2c, int analogue) in wm2000_exit_standby() argument
388 struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev); in wm2000_exit_standby()
393 wm2000_write(i2c, WM2000_REG_SYS_CTL1, 0); in wm2000_exit_standby()
396 wm2000_write(i2c, WM2000_REG_ANA_VMID_PU_TIME, 248 / 4); in wm2000_exit_standby()
398 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_exit_standby()
403 wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL, in wm2000_exit_standby()
408 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_RAM_SET); in wm2000_exit_standby()
409 wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_INT_N_CLR); in wm2000_exit_standby()
411 if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS, in wm2000_exit_standby()
413 dev_err(&i2c->dev, "Timed out waiting for MOUSE\n"); in wm2000_exit_standby()
418 dev_dbg(&i2c->dev, "MOUSE active\n"); in wm2000_exit_standby()
420 dev_dbg(&i2c->dev, "Analogue enabled\n"); in wm2000_exit_standby()
425 typedef int (*wm2000_mode_fn)(struct i2c_client *i2c, int analogue);
537 struct i2c_client *i2c = wm2000->i2c; in wm2000_anc_transition() local
549 dev_err(&i2c->dev, "No transition for %d->%d\n", in wm2000_anc_transition()
558 dev_err(&i2c->dev, "Failed to enable MCLK: %d\n", ret); in wm2000_anc_transition()
566 ret = anc_transitions[i].step[j](i2c, in wm2000_anc_transition()
580 struct i2c_client *i2c = wm2000->i2c; in wm2000_anc_set_mode() local
591 dev_dbg(&i2c->dev, "Set mode %d (enabled %d, mute %d, active %d)\n", in wm2000_anc_set_mode()
808 static int wm2000_i2c_probe(struct i2c_client *i2c) in wm2000_i2c_probe() argument
818 wm2000 = devm_kzalloc(&i2c->dev, sizeof(*wm2000), GFP_KERNEL); in wm2000_i2c_probe()
824 dev_set_drvdata(&i2c->dev, wm2000); in wm2000_i2c_probe()
826 wm2000->regmap = devm_regmap_init_i2c(i2c, &wm2000_regmap); in wm2000_i2c_probe()
829 dev_err(&i2c->dev, "Failed to allocate register map: %d\n", in wm2000_i2c_probe()
837 ret = devm_regulator_bulk_get(&i2c->dev, WM2000_NUM_SUPPLIES, in wm2000_i2c_probe()
840 dev_err(&i2c->dev, "Failed to get supplies: %d\n", ret); in wm2000_i2c_probe()
846 dev_err(&i2c->dev, "Failed to enable supplies: %d\n", ret); in wm2000_i2c_probe()
853 dev_err(&i2c->dev, "Unable to read ID1: %d\n", ret); in wm2000_i2c_probe()
859 dev_err(&i2c->dev, "Unable to read ID2: %d\n", ret); in wm2000_i2c_probe()
865 dev_err(&i2c->dev, "Device is not a WM2000 - ID %x\n", id); in wm2000_i2c_probe()
872 dev_err(&i2c->dev, "Unable to read Revision: %d\n", ret); in wm2000_i2c_probe()
875 dev_info(&i2c->dev, "revision %c\n", reg + 'A'); in wm2000_i2c_probe()
877 wm2000->mclk = devm_clk_get(&i2c->dev, "MCLK"); in wm2000_i2c_probe()
880 dev_err(&i2c->dev, "Failed to get MCLK: %d\n", ret); in wm2000_i2c_probe()
885 pdata = dev_get_platdata(&i2c->dev); in wm2000_i2c_probe()
893 ret = request_firmware(&fw, filename, &i2c->dev); in wm2000_i2c_probe()
895 dev_err(&i2c->dev, "Failed to acquire ANC data: %d\n", ret); in wm2000_i2c_probe()
901 wm2000->anc_download = devm_kzalloc(&i2c->dev, in wm2000_i2c_probe()
916 wm2000->i2c = i2c; in wm2000_i2c_probe()
920 ret = devm_snd_soc_register_component(&i2c->dev, in wm2000_i2c_probe()
935 MODULE_DEVICE_TABLE(i2c, wm2000_i2c_id);