static int cyttsp5_spi_read_default_nosize_(struct cyttsp5_adapter *adap, u8 *buf, int max) { struct cyttsp5_spi *ts = dev_get_drvdata(adap->dev); int size; int rc; if (!buf) return 0; rc = cyttsp5_spi_xfer(CY_SPI_RD_OP, ts, buf, 2); if (rc < 0) return rc; size = get_unaligned_le16(&buf[0]); if (!size) return rc; if (size > max) return -EINVAL; rc = cyttsp5_spi_read_default_(adap, buf, size); return rc; }
static int cyttsp5_spi_read_default(struct device *dev, void *buf, int size) { if (!buf || !size) return 0; return cyttsp5_spi_xfer(dev, CY_SPI_RD_OP, buf, size); }
static int cyttsp5_spi_read_default_(struct cyttsp5_adapter *adap, void *buf, int size) { struct cyttsp5_spi *ts = dev_get_drvdata(adap->dev); int rc; if (!buf || !size) return 0; rc = cyttsp5_spi_xfer(CY_SPI_RD_OP, ts, buf, size); return rc; }
static int cyttsp5_spi_write_read_specific_(struct cyttsp5_adapter *adap, u8 write_len, u8 *write_buf, u8 *read_buf) { struct cyttsp5_spi *ts = dev_get_drvdata(adap->dev); int rc; rc = cyttsp5_spi_xfer(CY_SPI_WR_OP, ts, write_buf, write_len); if (rc < 0) return rc; if (read_buf) rc = cyttsp5_spi_read_default_nosize_(adap, read_buf, 512); return rc; }
static int cyttsp5_spi_write_read_specific(struct device *dev, u8 write_len, u8 *write_buf, u8 *read_buf) { int rc; rc = cyttsp5_spi_xfer(dev, CY_SPI_WR_OP, write_buf, write_len); if (rc < 0) return rc; if (read_buf) rc = cyttsp5_spi_read_default_nosize(dev, read_buf, CY_SPI_DATA_SIZE); return rc; }
static int cyttsp5_spi_read_default_nosize(struct device *dev, u8 *buf, u32 max) { u32 size; int rc; if (!buf) return 0; rc = cyttsp5_spi_xfer(dev, CY_SPI_RD_OP, buf, 2); if (rc < 0) return rc; size = get_unaligned_le16(&buf[0]); if (!size) return rc; if (size > max) return -EINVAL; return cyttsp5_spi_read_default(dev, buf, size); }