Hi Stefano, > On 14/09/2012 17:40, Lukasz Majewski wrote: > > Since the pmic_reg_read is the u32 value, the order in which bytes > > are placed to form u32 value is important. > > > > This commit adds the reverse (which is default) and normal byte > > order. > > > > Signed-off-by: Lukasz Majewski <l.majew...@samsung.com> > > Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com> > > --- > > Hi, > > > drivers/misc/pmic_i2c.c | 31 ++++++++++++++++++++++++------- > > include/pmic.h | 3 +++ > > 2 files changed, 27 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/misc/pmic_i2c.c b/drivers/misc/pmic_i2c.c > > index e74c372..1aa5b7b 100644 > > --- a/drivers/misc/pmic_i2c.c > > +++ b/drivers/misc/pmic_i2c.c > > @@ -40,13 +40,24 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 > > val) > > switch (pmic_i2c_tx_num) { > > case 3: > > - buf[0] = (val >> 16) & 0xff; > > - buf[1] = (val >> 8) & 0xff; > > - buf[2] = val & 0xff; > > + if (pmic_i2c_byte_order == PMIC_BYTE_ORDER_NORMAL) > > { > > + buf[2] = (val >> 16) & 0xff; > > + buf[1] = (val >> 8) & 0xff; > > + buf[0] = val & 0xff; > > + } else { > > + buf[0] = (val >> 16) & 0xff; > > + buf[1] = (val >> 8) & 0xff; > > + buf[2] = val & 0xff; > > + } > > break; > > case 2: > > - buf[0] = (val >> 8) & 0xff; > > - buf[1] = val & 0xff; > > + if (pmic_i2c_byte_order == PMIC_BYTE_ORDER_NORMAL) > > { > > + buf[1] = (val >> 8) & 0xff; > > + buf[0] = val & 0xff; > > + } else { > > + buf[0] = (val >> 8) & 0xff; > > + buf[1] = val & 0xff; > > + } > > break; > > case 1: > > buf[0] = val & 0xff; > > @@ -75,10 +86,16 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 > > *val) > > switch (pmic_i2c_tx_num) { > > case 3: > > - ret_val = buf[0] << 16 | buf[1] << 8 | buf[2]; > > + if (pmic_i2c_byte_order == PMIC_BYTE_ORDER_NORMAL) > > + ret_val = buf[2] << 16 | buf[1] << 8 | > > buf[0]; > > + else > > + ret_val = buf[0] << 16 | buf[1] << 8 | > > buf[2]; break; > > case 2: > > - ret_val = buf[0] << 8 | buf[1]; > > + if (pmic_i2c_byte_order == PMIC_BYTE_ORDER_NORMAL) > > + ret_val = buf[1] << 8 | buf[0]; > > + else > > + ret_val = buf[0] << 8 | buf[1]; > > break; > > case 1: > > ret_val = buf[0]; > > diff --git a/include/pmic.h b/include/pmic.h > > index 6a05b40..2166f73 100644 > > --- a/include/pmic.h > > +++ b/include/pmic.h > > @@ -27,11 +27,13 @@ > > enum { PMIC_I2C, PMIC_SPI, }; > > enum { I2C_PMIC, I2C_NUM, }; > > enum { PMIC_READ, PMIC_WRITE, }; > > +enum { PMIC_BYTE_ORDER_REVERSED, PMIC_BYTE_ORDER_NORMAL, }; > > > > struct p_i2c { > > unsigned char addr; > > unsigned char *buf; > > unsigned char tx_num; > > + unsigned char byte_order; > > I can imagine we could have the same issue with SPI and not only with > I2C. The byte order is not strictly related to the interface type, > and I think this should add to the "struct pmic" instead of the > "struct p_i2c". >
Thanks for reply. Good point. I will move this to struct pmic. Best regards, Lukasz Majewski _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot