tda9950.c 11 KB

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