コード例 #1
0
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;
}
コード例 #2
0
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);
}
コード例 #3
0
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;
}
コード例 #4
0
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;
}
コード例 #5
0
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;
}
コード例 #6
0
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);
}