0001
0002
0003
0004
0005
0006
0007 #include <linux/kernel.h>
0008 #include <linux/module.h>
0009 #include <linux/rmi.h>
0010 #include <linux/slab.h>
0011 #include <linux/spi/spi.h>
0012 #include <linux/of.h>
0013 #include "rmi_driver.h"
0014
0015 #define RMI_SPI_DEFAULT_XFER_BUF_SIZE 64
0016
0017 #define RMI_PAGE_SELECT_REGISTER 0x00FF
0018 #define RMI_SPI_PAGE(addr) (((addr) >> 8) & 0x80)
0019 #define RMI_SPI_XFER_SIZE_LIMIT 255
0020
0021 #define BUFFER_SIZE_INCREMENT 32
0022
0023 enum rmi_spi_op {
0024 RMI_SPI_WRITE = 0,
0025 RMI_SPI_READ,
0026 RMI_SPI_V2_READ_UNIFIED,
0027 RMI_SPI_V2_READ_SPLIT,
0028 RMI_SPI_V2_WRITE,
0029 };
0030
0031 struct rmi_spi_cmd {
0032 enum rmi_spi_op op;
0033 u16 addr;
0034 };
0035
0036 struct rmi_spi_xport {
0037 struct rmi_transport_dev xport;
0038 struct spi_device *spi;
0039
0040 struct mutex page_mutex;
0041 int page;
0042
0043 u8 *rx_buf;
0044 u8 *tx_buf;
0045 int xfer_buf_size;
0046
0047 struct spi_transfer *rx_xfers;
0048 struct spi_transfer *tx_xfers;
0049 int rx_xfer_count;
0050 int tx_xfer_count;
0051 };
0052
0053 static int rmi_spi_manage_pools(struct rmi_spi_xport *rmi_spi, int len)
0054 {
0055 struct spi_device *spi = rmi_spi->spi;
0056 int buf_size = rmi_spi->xfer_buf_size
0057 ? rmi_spi->xfer_buf_size : RMI_SPI_DEFAULT_XFER_BUF_SIZE;
0058 struct spi_transfer *xfer_buf;
0059 void *buf;
0060 void *tmp;
0061
0062 while (buf_size < len)
0063 buf_size *= 2;
0064
0065 if (buf_size > RMI_SPI_XFER_SIZE_LIMIT)
0066 buf_size = RMI_SPI_XFER_SIZE_LIMIT;
0067
0068 tmp = rmi_spi->rx_buf;
0069 buf = devm_kcalloc(&spi->dev, buf_size, 2,
0070 GFP_KERNEL | GFP_DMA);
0071 if (!buf)
0072 return -ENOMEM;
0073
0074 rmi_spi->rx_buf = buf;
0075 rmi_spi->tx_buf = &rmi_spi->rx_buf[buf_size];
0076 rmi_spi->xfer_buf_size = buf_size;
0077
0078 if (tmp)
0079 devm_kfree(&spi->dev, tmp);
0080
0081 if (rmi_spi->xport.pdata.spi_data.read_delay_us)
0082 rmi_spi->rx_xfer_count = buf_size;
0083 else
0084 rmi_spi->rx_xfer_count = 1;
0085
0086 if (rmi_spi->xport.pdata.spi_data.write_delay_us)
0087 rmi_spi->tx_xfer_count = buf_size;
0088 else
0089 rmi_spi->tx_xfer_count = 1;
0090
0091
0092
0093
0094
0095 tmp = rmi_spi->rx_xfers;
0096 xfer_buf = devm_kcalloc(&spi->dev,
0097 rmi_spi->rx_xfer_count + rmi_spi->tx_xfer_count,
0098 sizeof(struct spi_transfer),
0099 GFP_KERNEL);
0100 if (!xfer_buf)
0101 return -ENOMEM;
0102
0103 rmi_spi->rx_xfers = xfer_buf;
0104 rmi_spi->tx_xfers = &xfer_buf[rmi_spi->rx_xfer_count];
0105
0106 if (tmp)
0107 devm_kfree(&spi->dev, tmp);
0108
0109 return 0;
0110 }
0111
0112 static int rmi_spi_xfer(struct rmi_spi_xport *rmi_spi,
0113 const struct rmi_spi_cmd *cmd, const u8 *tx_buf,
0114 int tx_len, u8 *rx_buf, int rx_len)
0115 {
0116 struct spi_device *spi = rmi_spi->spi;
0117 struct rmi_device_platform_data_spi *spi_data =
0118 &rmi_spi->xport.pdata.spi_data;
0119 struct spi_message msg;
0120 struct spi_transfer *xfer;
0121 int ret = 0;
0122 int len;
0123 int cmd_len = 0;
0124 int total_tx_len;
0125 int i;
0126 u16 addr = cmd->addr;
0127
0128 spi_message_init(&msg);
0129
0130 switch (cmd->op) {
0131 case RMI_SPI_WRITE:
0132 case RMI_SPI_READ:
0133 cmd_len += 2;
0134 break;
0135 case RMI_SPI_V2_READ_UNIFIED:
0136 case RMI_SPI_V2_READ_SPLIT:
0137 case RMI_SPI_V2_WRITE:
0138 cmd_len += 4;
0139 break;
0140 }
0141
0142 total_tx_len = cmd_len + tx_len;
0143 len = max(total_tx_len, rx_len);
0144
0145 if (len > RMI_SPI_XFER_SIZE_LIMIT)
0146 return -EINVAL;
0147
0148 if (rmi_spi->xfer_buf_size < len) {
0149 ret = rmi_spi_manage_pools(rmi_spi, len);
0150 if (ret < 0)
0151 return ret;
0152 }
0153
0154 if (addr == 0)
0155
0156
0157
0158
0159 addr = 0x7FF;
0160
0161 switch (cmd->op) {
0162 case RMI_SPI_WRITE:
0163 rmi_spi->tx_buf[0] = (addr >> 8);
0164 rmi_spi->tx_buf[1] = addr & 0xFF;
0165 break;
0166 case RMI_SPI_READ:
0167 rmi_spi->tx_buf[0] = (addr >> 8) | 0x80;
0168 rmi_spi->tx_buf[1] = addr & 0xFF;
0169 break;
0170 case RMI_SPI_V2_READ_UNIFIED:
0171 break;
0172 case RMI_SPI_V2_READ_SPLIT:
0173 break;
0174 case RMI_SPI_V2_WRITE:
0175 rmi_spi->tx_buf[0] = 0x40;
0176 rmi_spi->tx_buf[1] = (addr >> 8) & 0xFF;
0177 rmi_spi->tx_buf[2] = addr & 0xFF;
0178 rmi_spi->tx_buf[3] = tx_len;
0179 break;
0180 }
0181
0182 if (tx_buf)
0183 memcpy(&rmi_spi->tx_buf[cmd_len], tx_buf, tx_len);
0184
0185 if (rmi_spi->tx_xfer_count > 1) {
0186 for (i = 0; i < total_tx_len; i++) {
0187 xfer = &rmi_spi->tx_xfers[i];
0188 memset(xfer, 0, sizeof(struct spi_transfer));
0189 xfer->tx_buf = &rmi_spi->tx_buf[i];
0190 xfer->len = 1;
0191 xfer->delay.value = spi_data->write_delay_us;
0192 xfer->delay.unit = SPI_DELAY_UNIT_USECS;
0193 spi_message_add_tail(xfer, &msg);
0194 }
0195 } else {
0196 xfer = rmi_spi->tx_xfers;
0197 memset(xfer, 0, sizeof(struct spi_transfer));
0198 xfer->tx_buf = rmi_spi->tx_buf;
0199 xfer->len = total_tx_len;
0200 spi_message_add_tail(xfer, &msg);
0201 }
0202
0203 rmi_dbg(RMI_DEBUG_XPORT, &spi->dev, "%s: cmd: %s tx_buf len: %d tx_buf: %*ph\n",
0204 __func__, cmd->op == RMI_SPI_WRITE ? "WRITE" : "READ",
0205 total_tx_len, total_tx_len, rmi_spi->tx_buf);
0206
0207 if (rx_buf) {
0208 if (rmi_spi->rx_xfer_count > 1) {
0209 for (i = 0; i < rx_len; i++) {
0210 xfer = &rmi_spi->rx_xfers[i];
0211 memset(xfer, 0, sizeof(struct spi_transfer));
0212 xfer->rx_buf = &rmi_spi->rx_buf[i];
0213 xfer->len = 1;
0214 xfer->delay.value = spi_data->read_delay_us;
0215 xfer->delay.unit = SPI_DELAY_UNIT_USECS;
0216 spi_message_add_tail(xfer, &msg);
0217 }
0218 } else {
0219 xfer = rmi_spi->rx_xfers;
0220 memset(xfer, 0, sizeof(struct spi_transfer));
0221 xfer->rx_buf = rmi_spi->rx_buf;
0222 xfer->len = rx_len;
0223 spi_message_add_tail(xfer, &msg);
0224 }
0225 }
0226
0227 ret = spi_sync(spi, &msg);
0228 if (ret < 0) {
0229 dev_err(&spi->dev, "spi xfer failed: %d\n", ret);
0230 return ret;
0231 }
0232
0233 if (rx_buf) {
0234 memcpy(rx_buf, rmi_spi->rx_buf, rx_len);
0235 rmi_dbg(RMI_DEBUG_XPORT, &spi->dev, "%s: (%d) %*ph\n",
0236 __func__, rx_len, rx_len, rx_buf);
0237 }
0238
0239 return 0;
0240 }
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256 static int rmi_set_page(struct rmi_spi_xport *rmi_spi, u8 page)
0257 {
0258 struct rmi_spi_cmd cmd;
0259 int ret;
0260
0261 cmd.op = RMI_SPI_WRITE;
0262 cmd.addr = RMI_PAGE_SELECT_REGISTER;
0263
0264 ret = rmi_spi_xfer(rmi_spi, &cmd, &page, 1, NULL, 0);
0265
0266 if (ret)
0267 rmi_spi->page = page;
0268
0269 return ret;
0270 }
0271
0272 static int rmi_spi_write_block(struct rmi_transport_dev *xport, u16 addr,
0273 const void *buf, size_t len)
0274 {
0275 struct rmi_spi_xport *rmi_spi =
0276 container_of(xport, struct rmi_spi_xport, xport);
0277 struct rmi_spi_cmd cmd;
0278 int ret;
0279
0280 mutex_lock(&rmi_spi->page_mutex);
0281
0282 if (RMI_SPI_PAGE(addr) != rmi_spi->page) {
0283 ret = rmi_set_page(rmi_spi, RMI_SPI_PAGE(addr));
0284 if (ret)
0285 goto exit;
0286 }
0287
0288 cmd.op = RMI_SPI_WRITE;
0289 cmd.addr = addr;
0290
0291 ret = rmi_spi_xfer(rmi_spi, &cmd, buf, len, NULL, 0);
0292
0293 exit:
0294 mutex_unlock(&rmi_spi->page_mutex);
0295 return ret;
0296 }
0297
0298 static int rmi_spi_read_block(struct rmi_transport_dev *xport, u16 addr,
0299 void *buf, size_t len)
0300 {
0301 struct rmi_spi_xport *rmi_spi =
0302 container_of(xport, struct rmi_spi_xport, xport);
0303 struct rmi_spi_cmd cmd;
0304 int ret;
0305
0306 mutex_lock(&rmi_spi->page_mutex);
0307
0308 if (RMI_SPI_PAGE(addr) != rmi_spi->page) {
0309 ret = rmi_set_page(rmi_spi, RMI_SPI_PAGE(addr));
0310 if (ret)
0311 goto exit;
0312 }
0313
0314 cmd.op = RMI_SPI_READ;
0315 cmd.addr = addr;
0316
0317 ret = rmi_spi_xfer(rmi_spi, &cmd, NULL, 0, buf, len);
0318
0319 exit:
0320 mutex_unlock(&rmi_spi->page_mutex);
0321 return ret;
0322 }
0323
0324 static const struct rmi_transport_ops rmi_spi_ops = {
0325 .write_block = rmi_spi_write_block,
0326 .read_block = rmi_spi_read_block,
0327 };
0328
0329 #ifdef CONFIG_OF
0330 static int rmi_spi_of_probe(struct spi_device *spi,
0331 struct rmi_device_platform_data *pdata)
0332 {
0333 struct device *dev = &spi->dev;
0334 int retval;
0335
0336 retval = rmi_of_property_read_u32(dev,
0337 &pdata->spi_data.read_delay_us,
0338 "spi-rx-delay-us", 1);
0339 if (retval)
0340 return retval;
0341
0342 retval = rmi_of_property_read_u32(dev,
0343 &pdata->spi_data.write_delay_us,
0344 "spi-tx-delay-us", 1);
0345 if (retval)
0346 return retval;
0347
0348 return 0;
0349 }
0350
0351 static const struct of_device_id rmi_spi_of_match[] = {
0352 { .compatible = "syna,rmi4-spi" },
0353 {},
0354 };
0355 MODULE_DEVICE_TABLE(of, rmi_spi_of_match);
0356 #else
0357 static inline int rmi_spi_of_probe(struct spi_device *spi,
0358 struct rmi_device_platform_data *pdata)
0359 {
0360 return -ENODEV;
0361 }
0362 #endif
0363
0364 static void rmi_spi_unregister_transport(void *data)
0365 {
0366 struct rmi_spi_xport *rmi_spi = data;
0367
0368 rmi_unregister_transport_device(&rmi_spi->xport);
0369 }
0370
0371 static int rmi_spi_probe(struct spi_device *spi)
0372 {
0373 struct rmi_spi_xport *rmi_spi;
0374 struct rmi_device_platform_data *pdata;
0375 struct rmi_device_platform_data *spi_pdata = spi->dev.platform_data;
0376 int error;
0377
0378 if (spi->master->flags & SPI_MASTER_HALF_DUPLEX)
0379 return -EINVAL;
0380
0381 rmi_spi = devm_kzalloc(&spi->dev, sizeof(struct rmi_spi_xport),
0382 GFP_KERNEL);
0383 if (!rmi_spi)
0384 return -ENOMEM;
0385
0386 pdata = &rmi_spi->xport.pdata;
0387
0388 if (spi->dev.of_node) {
0389 error = rmi_spi_of_probe(spi, pdata);
0390 if (error)
0391 return error;
0392 } else if (spi_pdata) {
0393 *pdata = *spi_pdata;
0394 }
0395
0396 if (pdata->spi_data.bits_per_word)
0397 spi->bits_per_word = pdata->spi_data.bits_per_word;
0398
0399 if (pdata->spi_data.mode)
0400 spi->mode = pdata->spi_data.mode;
0401
0402 error = spi_setup(spi);
0403 if (error < 0) {
0404 dev_err(&spi->dev, "spi_setup failed!\n");
0405 return error;
0406 }
0407
0408 pdata->irq = spi->irq;
0409
0410 rmi_spi->spi = spi;
0411 mutex_init(&rmi_spi->page_mutex);
0412
0413 rmi_spi->xport.dev = &spi->dev;
0414 rmi_spi->xport.proto_name = "spi";
0415 rmi_spi->xport.ops = &rmi_spi_ops;
0416
0417 spi_set_drvdata(spi, rmi_spi);
0418
0419 error = rmi_spi_manage_pools(rmi_spi, RMI_SPI_DEFAULT_XFER_BUF_SIZE);
0420 if (error)
0421 return error;
0422
0423
0424
0425
0426
0427 error = rmi_set_page(rmi_spi, 0);
0428 if (error) {
0429 dev_err(&spi->dev, "Failed to set page select to 0.\n");
0430 return error;
0431 }
0432
0433 dev_info(&spi->dev, "registering SPI-connected sensor\n");
0434
0435 error = rmi_register_transport_device(&rmi_spi->xport);
0436 if (error) {
0437 dev_err(&spi->dev, "failed to register sensor: %d\n", error);
0438 return error;
0439 }
0440
0441 error = devm_add_action_or_reset(&spi->dev,
0442 rmi_spi_unregister_transport,
0443 rmi_spi);
0444 if (error)
0445 return error;
0446
0447 return 0;
0448 }
0449
0450 #ifdef CONFIG_PM_SLEEP
0451 static int rmi_spi_suspend(struct device *dev)
0452 {
0453 struct spi_device *spi = to_spi_device(dev);
0454 struct rmi_spi_xport *rmi_spi = spi_get_drvdata(spi);
0455 int ret;
0456
0457 ret = rmi_driver_suspend(rmi_spi->xport.rmi_dev, true);
0458 if (ret)
0459 dev_warn(dev, "Failed to resume device: %d\n", ret);
0460
0461 return ret;
0462 }
0463
0464 static int rmi_spi_resume(struct device *dev)
0465 {
0466 struct spi_device *spi = to_spi_device(dev);
0467 struct rmi_spi_xport *rmi_spi = spi_get_drvdata(spi);
0468 int ret;
0469
0470 ret = rmi_driver_resume(rmi_spi->xport.rmi_dev, true);
0471 if (ret)
0472 dev_warn(dev, "Failed to resume device: %d\n", ret);
0473
0474 return ret;
0475 }
0476 #endif
0477
0478 #ifdef CONFIG_PM
0479 static int rmi_spi_runtime_suspend(struct device *dev)
0480 {
0481 struct spi_device *spi = to_spi_device(dev);
0482 struct rmi_spi_xport *rmi_spi = spi_get_drvdata(spi);
0483 int ret;
0484
0485 ret = rmi_driver_suspend(rmi_spi->xport.rmi_dev, false);
0486 if (ret)
0487 dev_warn(dev, "Failed to resume device: %d\n", ret);
0488
0489 return 0;
0490 }
0491
0492 static int rmi_spi_runtime_resume(struct device *dev)
0493 {
0494 struct spi_device *spi = to_spi_device(dev);
0495 struct rmi_spi_xport *rmi_spi = spi_get_drvdata(spi);
0496 int ret;
0497
0498 ret = rmi_driver_resume(rmi_spi->xport.rmi_dev, false);
0499 if (ret)
0500 dev_warn(dev, "Failed to resume device: %d\n", ret);
0501
0502 return 0;
0503 }
0504 #endif
0505
0506 static const struct dev_pm_ops rmi_spi_pm = {
0507 SET_SYSTEM_SLEEP_PM_OPS(rmi_spi_suspend, rmi_spi_resume)
0508 SET_RUNTIME_PM_OPS(rmi_spi_runtime_suspend, rmi_spi_runtime_resume,
0509 NULL)
0510 };
0511
0512 static const struct spi_device_id rmi_id[] = {
0513 { "rmi4_spi", 0 },
0514 { }
0515 };
0516 MODULE_DEVICE_TABLE(spi, rmi_id);
0517
0518 static struct spi_driver rmi_spi_driver = {
0519 .driver = {
0520 .name = "rmi4_spi",
0521 .pm = &rmi_spi_pm,
0522 .of_match_table = of_match_ptr(rmi_spi_of_match),
0523 },
0524 .id_table = rmi_id,
0525 .probe = rmi_spi_probe,
0526 };
0527
0528 module_spi_driver(rmi_spi_driver);
0529
0530 MODULE_AUTHOR("Christopher Heiny <cheiny@synaptics.com>");
0531 MODULE_AUTHOR("Andrew Duggan <aduggan@synaptics.com>");
0532 MODULE_DESCRIPTION("RMI SPI driver");
0533 MODULE_LICENSE("GPL");