Hi Jeffrey, On Fri, Mar 25, 2016 at 01:21:09PM +0800, jeffrey.lin wrote: > +#define MAX_PACKET_SIZE 60 ... > +#define RAYDIUM_FW_PAGESIZE 128 ... > + > +static int raydium_i2c_send(struct i2c_client *client, > + u8 addr, u8 *data, size_t len) > +{ > + u8 buf[MAX_PACKET_SIZE + 1]; > + int tries = 0; > + > + if (len > MAX_PACKET_SIZE) > + return -EINVAL; ... > +static int raydium_i2c_fw_write_page(struct i2c_client *client, > + const void *page) > +{ > + static const u8 ack_ok[] = { 0x55, 0xAA }; > + u8 buf[2]; > + int retry; > + int error; > + > + for (retry = 0; retry < MAX_FW_UPDATE_RETRIES; retry++) { > + error = raydium_i2c_send(client, CMD_BOOT_WRT, > + (u8 *)page, RAYDIUM_FW_PAGESIZE); > + if (error) { > + dev_err(&client->dev, > + "BLDR Write Page failed: %d\n", error); > + continue; > + } Given the above definitions of MAX_PACKET_SIZE and RAYDIUM_FW_PAGESIZE I do not believe that firmware update is working. What is the biggest buffer that can be sent to the device? Maybe we should allocate it dynamically? I am also wondering about formatting command structure as byte sequence. Would it be better to define it as: struct raidium_cmd { u32 bank; int len; u8 cmd[RAIDIUM_MAX_CMD_LEN]; } What is the longest command that the controller supports? (Do not resubmit the driver yet, let's discuss first). Thanks. -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html