Ejemplo n.º 1
0
int s5c73m3_spi_write(const u8 *addr, const int len, const int txSize)
{
	int i, j = 0;
	int ret = 0;
	u8 paddingData[32];
	u32 count = len/txSize;
	u32 extra = len%txSize;

	memset(paddingData, 0, sizeof(paddingData));

	for (i = 0 ; i < count ; i++) {
		ret = spi_xmit(&addr[j], txSize);
		j += txSize;
		if (ret < 0)
			goto exit_err;
	}

	if (extra) {
		ret = spi_xmit(&addr[j], extra);
		if (ret < 0)
			goto exit_err;
	}

	ret = spi_xmit(paddingData, 32);
	if (ret < 0)
		goto exit_err;

exit_err:
	return ret;
}
static
int bootloader_write(struct lte_modem_bootloader *loader,
		const char *addr, const int len)
{
	int i;
	int ret = 0;
	unsigned char lenbuf[4];

	if (loader->xmit_status == XMIT_LOADER_READY) {
		memcpy(lenbuf, &len, ARRAY_SIZE(lenbuf));
		ret = spi_xmit(loader, lenbuf,
				ARRAY_SIZE(lenbuf));
		if (ret < 0)
			return ret;
		msleep(LEN_XMIT_DELEY);
	}

	for (i = 0 ; i < len / MAX_XMIT_SIZE ; i++) {
		ret = spi_xmit(loader,
				addr + i * MAX_XMIT_SIZE,
				MAX_XMIT_SIZE);
		if (ret < 0)
			return ret;
	}
	ret = spi_xmit(loader, addr + i * MAX_XMIT_SIZE , len % MAX_XMIT_SIZE);

	return 0;
}
Ejemplo n.º 3
0
int s5c73m3_spi_write(struct s5c73m3 *state, const void *addr,
		      const unsigned int len, const unsigned int tx_size)
{
	struct spi_device *spi_dev = state->spi_dev;
	u32 count = len / tx_size;
	u32 extra = len % tx_size;
	unsigned int i, j = 0;
	u8 padding[32];
	int r = 0;

	memset(padding, 0, sizeof(padding));

	for (i = 0; i < count; i++) {
		r = spi_xmit(spi_dev, (void *)addr + j, tx_size, SPI_DIR_TX);
		if (r < 0)
			return r;
		j += tx_size;
	}

	if (extra > 0) {
		r = spi_xmit(spi_dev, (void *)addr + j, extra, SPI_DIR_TX);
		if (r < 0)
			return r;
	}

	return spi_xmit(spi_dev, padding, sizeof(padding), SPI_DIR_TX);
}
Ejemplo n.º 4
0
void read_multi (
	BYTE src,		/* Read from.. FLASH/EEPROM/SIGNATURE */
	DWORD adr,		/* Address */
	DWORD cnt,		/* Number of bytes to read */
	BYTE *buff		/* Read buffer */
) {
	BYTE cmd, spicmd[5];
	DWORD n, devadr=0;

	if (src == FLASH
		&& Device->FlashSize > (128*1024)
		&& (adr & 0x1FFFF) == 0) {		/* Load extended address if needed */
#if AVRSPX
		spi_transmit(
			C_LD_ADRX,					/* Extended address command */
			0,							/* 0 */
			(BYTE)(devadr >> 17),		/* address extended */
			0);							/* 0 */
#else
		spi_xmit(C_LD_ADRX);			/* Extended address command */
		spi_xmit(0);					/* 0 */
		spi_xmit((BYTE)(adr >> 17));	/* address extended */
		spi_xmit(0);					/* 0 */
#endif
	}
Ejemplo n.º 5
0
int s5c73m3_spi_write(const u8 *addr, const int len, const int txSize)
{
	int i, j = 0;
	int ret = 0;
	u8 paddingData[8];
	u32 count = len/txSize;
	u32 extra = len%txSize;
	cam_err("Entered\n");
	cam_err("count = %d extra = %d\n", count, extra);

	memset(paddingData, 0, sizeof(paddingData));

	for (i = 0 ; i < count ; i++) {
		ret = spi_xmit(&addr[j], txSize);
		j += txSize;
		if (ret < 0) {
			cam_err("failed to write spi_xmit\n");
			goto exit_err;
		}
	}

	if (extra) {
		ret = spi_xmit(&addr[j], extra);
		if (ret < 0) {
			cam_err("failed to write spi_xmit\n");
			goto exit_err;
		}
	}

	for (i = 0; i < 4; i++) {
		memset(paddingData, 0, sizeof(paddingData));
		ret = spi_xmit(paddingData, 8);
		if (ret < 0) {
			cam_err("failed to write spi_xmit\n");
			goto exit_err;
		}
	}
	cam_err("Finish!!\n");
exit_err:
	return ret;
}
Ejemplo n.º 6
0
int s5c73m3_spi_read(struct s5c73m3 *state, void *addr,
		     const unsigned int len, const unsigned int tx_size)
{
	struct spi_device *spi_dev = state->spi_dev;
	u32 count = len / tx_size;
	u32 extra = len % tx_size;
	unsigned int i, j = 0;
	int r = 0;

	for (i = 0; i < count; i++) {
		r = spi_xmit(spi_dev, addr + j, tx_size, SPI_DIR_RX);
		if (r < 0)
			return r;
		j += tx_size;
	}

	if (extra > 0)
		return spi_xmit(spi_dev, addr + j, extra, SPI_DIR_RX);

	return 0;
}
Ejemplo n.º 7
0
int m10mo_spi_write(struct spi_device *spi, const u8 *addr,
		    const int len, const int txSize)
{
	int i, j = 0;
	int ret = 0;
	u8 paddingData[8];
	u32 count = len / txSize;
	u32 extra = len % txSize;
	dev_dbg(&spi->dev, "Entered to spi write with count = %d extra = %d\n",
	       count, extra);

	for (i = 0 ; i < count ; i++) {
		ret = spi_xmit(spi, &addr[j], txSize);
		j += txSize;
		if (ret < 0) {
			dev_err(&spi->dev, "failed to write spi_xmit\n");
			goto exit_err;
		}
	}

	if (extra) {
		ret = spi_xmit(spi, &addr[j], extra);
		if (ret < 0) {
			dev_err(&spi->dev, "failed to write spi_xmit\n");
			goto exit_err;
		}
	}

	for (i = 0; i < 4; i++) {
		memset(paddingData, 0, sizeof(paddingData));
		ret = spi_xmit(spi, paddingData, 8);
		if (ret < 0) {
			dev_err(&spi->dev, "failed to write spi_xmit\n");
			goto exit_err;
		}
	}
	dev_dbg(&spi->dev, "FW upload done!!\n");
exit_err:
	return ret;
}
Ejemplo n.º 8
0
int drime4_spi_write(const u8 *addr, const int len, const int txSize)
{
	int i, j = 0;
	int ret = 0;
#if 0
	u8 paddingData[32];
#endif
	u32 count = len/txSize;
	u32 extra = len%txSize;

#if 0
	memset(paddingData, 0, sizeof(paddingData));
#endif

	for (i = 0 ; i < count ; i++) {
		ret = spi_xmit(&addr[j], txSize);
		j += txSize;
		if (ret < 0)
			goto exit_err;
	}

	if (extra) {
		ret = spi_xmit(&addr[j], extra);
		if (ret < 0)
			goto exit_err;
	}

#if 0
	ret = spi_xmit(paddingData, 32);
	if (ret < 0)
		goto exit_err;
#endif

exit_err:
	return ret;
}