tda9950.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. /*
  2. * TDA9950 Consumer Electronics Control driver
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. *
  8. * The NXP TDA9950 implements the HDMI Consumer Electronics Control
  9. * interface. The host interface is similar to a mailbox: the data
  10. * registers starting at REG_CDR0 are written to send a command to the
  11. * internal CPU, and replies are read from these registers.
  12. *
  13. * As the data registers represent a mailbox, they must be accessed
  14. * as a single I2C transaction. See the TDA9950 data sheet for details.
  15. */
  16. #include <linux/delay.h>
  17. #include <linux/i2c.h>
  18. #include <linux/interrupt.h>
  19. #include <linux/module.h>
  20. #include <linux/platform_data/tda9950.h>
  21. #include <linux/slab.h>
  22. #include <drm/drm_edid.h>
  23. #include <media/cec.h>
  24. #include <media/cec-notifier.h>
  25. enum {
  26. REG_CSR = 0x00,
  27. CSR_BUSY = BIT(7),
  28. CSR_INT = BIT(6),
  29. CSR_ERR = BIT(5),
  30. REG_CER = 0x01,
  31. REG_CVR = 0x02,
  32. REG_CCR = 0x03,
  33. CCR_RESET = BIT(7),
  34. CCR_ON = BIT(6),
  35. REG_ACKH = 0x04,
  36. REG_ACKL = 0x05,
  37. REG_CCONR = 0x06,
  38. CCONR_ENABLE_ERROR = BIT(4),
  39. CCONR_RETRY_MASK = 7,
  40. REG_CDR0 = 0x07,
  41. CDR1_REQ = 0x00,
  42. CDR1_CNF = 0x01,
  43. CDR1_IND = 0x81,
  44. CDR1_ERR = 0x82,
  45. CDR1_IER = 0x83,
  46. CDR2_CNF_SUCCESS = 0x00,
  47. CDR2_CNF_OFF_STATE = 0x80,
  48. CDR2_CNF_BAD_REQ = 0x81,
  49. CDR2_CNF_CEC_ACCESS = 0x82,
  50. CDR2_CNF_ARB_ERROR = 0x83,
  51. CDR2_CNF_BAD_TIMING = 0x84,
  52. CDR2_CNF_NACK_ADDR = 0x85,
  53. CDR2_CNF_NACK_DATA = 0x86,
  54. };
  55. struct tda9950_priv {
  56. struct i2c_client *client;
  57. struct device *hdmi;
  58. struct cec_adapter *adap;
  59. struct tda9950_glue *glue;
  60. u16 addresses;
  61. struct cec_msg rx_msg;
  62. struct cec_notifier *notify;
  63. bool open;
  64. };
  65. static int tda9950_write_range(struct i2c_client *client, u8 addr, u8 *p, int cnt)
  66. {
  67. struct i2c_msg msg;
  68. u8 buf[CEC_MAX_MSG_SIZE + 3];
  69. int ret;
  70. if (WARN_ON(cnt > sizeof(buf) - 1))
  71. return -EINVAL;
  72. buf[0] = addr;
  73. memcpy(buf + 1, p, cnt);
  74. msg.addr = client->addr;
  75. msg.flags = 0;
  76. msg.len = cnt + 1;
  77. msg.buf = buf;
  78. dev_dbg(&client->dev, "wr 0x%02x: %*ph\n", addr, cnt, p);
  79. ret = i2c_transfer(client->adapter, &msg, 1);
  80. if (ret < 0)
  81. dev_err(&client->dev, "Error %d writing to cec:0x%x\n", ret, addr);
  82. return ret < 0 ? ret : 0;
  83. }
  84. static void tda9950_write(struct i2c_client *client, u8 addr, u8 val)
  85. {
  86. tda9950_write_range(client, addr, &val, 1);
  87. }
  88. static int tda9950_read_range(struct i2c_client *client, u8 addr, u8 *p, int cnt)
  89. {
  90. struct i2c_msg msg[2];
  91. int ret;
  92. msg[0].addr = client->addr;
  93. msg[0].flags = 0;
  94. msg[0].len = 1;
  95. msg[0].buf = &addr;
  96. msg[1].addr = client->addr;
  97. msg[1].flags = I2C_M_RD;
  98. msg[1].len = cnt;
  99. msg[1].buf = p;
  100. ret = i2c_transfer(client->adapter, msg, 2);
  101. if (ret < 0)
  102. dev_err(&client->dev, "Error %d reading from cec:0x%x\n", ret, addr);
  103. dev_dbg(&client->dev, "rd 0x%02x: %*ph\n", addr, cnt, p);
  104. return ret;
  105. }
  106. static u8 tda9950_read(struct i2c_client *client, u8 addr)
  107. {
  108. int ret;
  109. u8 val;
  110. ret = tda9950_read_range(client, addr, &val, 1);
  111. if (ret < 0)
  112. val = 0;
  113. return val;
  114. }
  115. static irqreturn_t tda9950_irq(int irq, void *data)
  116. {
  117. struct tda9950_priv *priv = data;
  118. unsigned int tx_status;
  119. u8 csr, cconr, buf[19];
  120. u8 arb_lost_cnt, nack_cnt, err_cnt;
  121. if (!priv->open)
  122. return IRQ_NONE;
  123. csr = tda9950_read(priv->client, REG_CSR);
  124. if (!(csr & CSR_INT))
  125. return IRQ_NONE;
  126. cconr = tda9950_read(priv->client, REG_CCONR) & CCONR_RETRY_MASK;
  127. tda9950_read_range(priv->client, REG_CDR0, buf, sizeof(buf));
  128. /*
  129. * This should never happen: the data sheet says that there will
  130. * always be a valid message if the interrupt line is asserted.
  131. */
  132. if (buf[0] == 0) {
  133. dev_warn(&priv->client->dev, "interrupt pending, but no message?\n");
  134. return IRQ_NONE;
  135. }
  136. switch (buf[1]) {
  137. case CDR1_CNF: /* transmit result */
  138. arb_lost_cnt = nack_cnt = err_cnt = 0;
  139. switch (buf[2]) {
  140. case CDR2_CNF_SUCCESS:
  141. tx_status = CEC_TX_STATUS_OK;
  142. break;
  143. case CDR2_CNF_ARB_ERROR:
  144. tx_status = CEC_TX_STATUS_ARB_LOST;
  145. arb_lost_cnt = cconr;
  146. break;
  147. case CDR2_CNF_NACK_ADDR:
  148. tx_status = CEC_TX_STATUS_NACK;
  149. nack_cnt = cconr;
  150. break;
  151. default: /* some other error, refer to TDA9950 docs */
  152. dev_err(&priv->client->dev, "CNF reply error 0x%02x\n",
  153. buf[2]);
  154. tx_status = CEC_TX_STATUS_ERROR;
  155. err_cnt = cconr;
  156. break;
  157. }
  158. /* TDA9950 executes all retries for us */
  159. if (tx_status != CEC_TX_STATUS_OK)
  160. tx_status |= CEC_TX_STATUS_MAX_RETRIES;
  161. cec_transmit_done(priv->adap, tx_status, arb_lost_cnt,
  162. nack_cnt, 0, err_cnt);
  163. break;
  164. case CDR1_IND:
  165. priv->rx_msg.len = buf[0] - 2;
  166. if (priv->rx_msg.len > CEC_MAX_MSG_SIZE)
  167. priv->rx_msg.len = CEC_MAX_MSG_SIZE;
  168. memcpy(priv->rx_msg.msg, buf + 2, priv->rx_msg.len);
  169. cec_received_msg(priv->adap, &priv->rx_msg);
  170. break;
  171. default: /* unknown */
  172. dev_err(&priv->client->dev, "unknown service id 0x%02x\n",
  173. buf[1]);
  174. break;
  175. }
  176. return IRQ_HANDLED;
  177. }
  178. static int tda9950_cec_transmit(struct cec_adapter *adap, u8 attempts,
  179. u32 signal_free_time, struct cec_msg *msg)
  180. {
  181. struct tda9950_priv *priv = adap->priv;
  182. u8 buf[CEC_MAX_MSG_SIZE + 2];
  183. buf[0] = 2 + msg->len;
  184. buf[1] = CDR1_REQ;
  185. memcpy(buf + 2, msg->msg, msg->len);
  186. if (attempts > 5)
  187. attempts = 5;
  188. tda9950_write(priv->client, REG_CCONR, attempts);
  189. return tda9950_write_range(priv->client, REG_CDR0, buf, 2 + msg->len);
  190. }
  191. static int tda9950_cec_adap_log_addr(struct cec_adapter *adap, u8 addr)
  192. {
  193. struct tda9950_priv *priv = adap->priv;
  194. u16 addresses;
  195. u8 buf[2];
  196. if (addr == CEC_LOG_ADDR_INVALID)
  197. addresses = priv->addresses = 0;
  198. else
  199. addresses = priv->addresses |= BIT(addr);
  200. /* TDA9950 doesn't want address 15 set */
  201. addresses &= 0x7fff;
  202. buf[0] = addresses >> 8;
  203. buf[1] = addresses;
  204. return tda9950_write_range(priv->client, REG_ACKH, buf, 2);
  205. }
  206. /*
  207. * When operating as part of the TDA998x, we need additional handling
  208. * to initialise and shut down the TDA9950 part of the device. These
  209. * two hooks are provided to allow the TDA998x code to perform those
  210. * activities.
  211. */
  212. static int tda9950_glue_open(struct tda9950_priv *priv)
  213. {
  214. int ret = 0;
  215. if (priv->glue && priv->glue->open)
  216. ret = priv->glue->open(priv->glue->data);
  217. priv->open = true;
  218. return ret;
  219. }
  220. static void tda9950_glue_release(struct tda9950_priv *priv)
  221. {
  222. priv->open = false;
  223. if (priv->glue && priv->glue->release)
  224. priv->glue->release(priv->glue->data);
  225. }
  226. static int tda9950_open(struct tda9950_priv *priv)
  227. {
  228. struct i2c_client *client = priv->client;
  229. int ret;
  230. ret = tda9950_glue_open(priv);
  231. if (ret)
  232. return ret;
  233. /* Reset the TDA9950, and wait 250ms for it to recover */
  234. tda9950_write(client, REG_CCR, CCR_RESET);
  235. msleep(250);
  236. tda9950_cec_adap_log_addr(priv->adap, CEC_LOG_ADDR_INVALID);
  237. /* Start the command processor */
  238. tda9950_write(client, REG_CCR, CCR_ON);
  239. return 0;
  240. }
  241. static void tda9950_release(struct tda9950_priv *priv)
  242. {
  243. struct i2c_client *client = priv->client;
  244. int timeout = 50;
  245. u8 csr;
  246. /* Stop the command processor */
  247. tda9950_write(client, REG_CCR, 0);
  248. /* Wait up to .5s for it to signal non-busy */
  249. do {
  250. csr = tda9950_read(client, REG_CSR);
  251. if (!(csr & CSR_BUSY) || !--timeout)
  252. break;
  253. msleep(10);
  254. } while (1);
  255. /* Warn the user that their IRQ may die if it's shared. */
  256. if (csr & CSR_BUSY)
  257. dev_warn(&client->dev, "command processor failed to stop, irq%d may die (csr=0x%02x)\n",
  258. client->irq, csr);
  259. tda9950_glue_release(priv);
  260. }
  261. static int tda9950_cec_adap_enable(struct cec_adapter *adap, bool enable)
  262. {
  263. struct tda9950_priv *priv = adap->priv;
  264. if (!enable) {
  265. tda9950_release(priv);
  266. return 0;
  267. } else {
  268. return tda9950_open(priv);
  269. }
  270. }
  271. static const struct cec_adap_ops tda9950_cec_ops = {
  272. .adap_enable = tda9950_cec_adap_enable,
  273. .adap_log_addr = tda9950_cec_adap_log_addr,
  274. .adap_transmit = tda9950_cec_transmit,
  275. };
  276. /*
  277. * When operating as part of the TDA998x, we need to claim additional
  278. * resources. These two hooks permit the management of those resources.
  279. */
  280. static void tda9950_devm_glue_exit(void *data)
  281. {
  282. struct tda9950_glue *glue = data;
  283. if (glue && glue->exit)
  284. glue->exit(glue->data);
  285. }
  286. static int tda9950_devm_glue_init(struct device *dev, struct tda9950_glue *glue)
  287. {
  288. int ret;
  289. if (glue && glue->init) {
  290. ret = glue->init(glue->data);
  291. if (ret)
  292. return ret;
  293. }
  294. ret = devm_add_action(dev, tda9950_devm_glue_exit, glue);
  295. if (ret)
  296. tda9950_devm_glue_exit(glue);
  297. return ret;
  298. }
  299. static void tda9950_cec_del(void *data)
  300. {
  301. struct tda9950_priv *priv = data;
  302. cec_delete_adapter(priv->adap);
  303. }
  304. static int tda9950_probe(struct i2c_client *client,
  305. const struct i2c_device_id *id)
  306. {
  307. struct tda9950_glue *glue = client->dev.platform_data;
  308. struct device *dev = &client->dev;
  309. struct tda9950_priv *priv;
  310. unsigned long irqflags;
  311. int ret;
  312. u8 cvr;
  313. /*
  314. * We must have I2C functionality: our multi-byte accesses
  315. * must be performed as a single contiguous transaction.
  316. */
  317. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  318. dev_err(&client->dev,
  319. "adapter does not support I2C functionality\n");
  320. return -ENXIO;
  321. }
  322. /* We must have an interrupt to be functional. */
  323. if (client->irq <= 0) {
  324. dev_err(&client->dev, "driver requires an interrupt\n");
  325. return -ENXIO;
  326. }
  327. priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
  328. if (!priv)
  329. return -ENOMEM;
  330. priv->client = client;
  331. priv->glue = glue;
  332. i2c_set_clientdata(client, priv);
  333. /*
  334. * If we're part of a TDA998x, we want the class devices to be
  335. * associated with the HDMI Tx so we have a tight relationship
  336. * between the HDMI interface and the CEC interface.
  337. */
  338. priv->hdmi = dev;
  339. if (glue && glue->parent)
  340. priv->hdmi = glue->parent;
  341. priv->adap = cec_allocate_adapter(&tda9950_cec_ops, priv, "tda9950",
  342. CEC_CAP_DEFAULTS,
  343. CEC_MAX_LOG_ADDRS);
  344. if (IS_ERR(priv->adap))
  345. return PTR_ERR(priv->adap);
  346. ret = devm_add_action(dev, tda9950_cec_del, priv);
  347. if (ret) {
  348. cec_delete_adapter(priv->adap);
  349. return ret;
  350. }
  351. ret = tda9950_devm_glue_init(dev, glue);
  352. if (ret)
  353. return ret;
  354. ret = tda9950_glue_open(priv);
  355. if (ret)
  356. return ret;
  357. cvr = tda9950_read(client, REG_CVR);
  358. dev_info(&client->dev,
  359. "TDA9950 CEC interface, hardware version %u.%u\n",
  360. cvr >> 4, cvr & 15);
  361. tda9950_glue_release(priv);
  362. irqflags = IRQF_TRIGGER_FALLING;
  363. if (glue)
  364. irqflags = glue->irq_flags;
  365. ret = devm_request_threaded_irq(dev, client->irq, NULL, tda9950_irq,
  366. irqflags | IRQF_SHARED | IRQF_ONESHOT,
  367. dev_name(&client->dev), priv);
  368. if (ret < 0)
  369. return ret;
  370. priv->notify = cec_notifier_get(priv->hdmi);
  371. if (!priv->notify)
  372. return -ENOMEM;
  373. ret = cec_register_adapter(priv->adap, priv->hdmi);
  374. if (ret < 0) {
  375. cec_notifier_put(priv->notify);
  376. return ret;
  377. }
  378. /*
  379. * CEC documentation says we must not call cec_delete_adapter
  380. * after a successful call to cec_register_adapter().
  381. */
  382. devm_remove_action(dev, tda9950_cec_del, priv);
  383. cec_register_cec_notifier(priv->adap, priv->notify);
  384. return 0;
  385. }
  386. static int tda9950_remove(struct i2c_client *client)
  387. {
  388. struct tda9950_priv *priv = i2c_get_clientdata(client);
  389. cec_unregister_adapter(priv->adap);
  390. cec_notifier_put(priv->notify);
  391. return 0;
  392. }
  393. static struct i2c_device_id tda9950_ids[] = {
  394. { "tda9950", 0 },
  395. { },
  396. };
  397. MODULE_DEVICE_TABLE(i2c, tda9950_ids);
  398. static struct i2c_driver tda9950_driver = {
  399. .probe = tda9950_probe,
  400. .remove = tda9950_remove,
  401. .driver = {
  402. .name = "tda9950",
  403. },
  404. .id_table = tda9950_ids,
  405. };
  406. module_i2c_driver(tda9950_driver);
  407. MODULE_AUTHOR("Russell King <rmk+kernel@armlinux.org.uk>");
  408. MODULE_DESCRIPTION("TDA9950/TDA998x Consumer Electronics Control Driver");
  409. MODULE_LICENSE("GPL v2");