On 6/4/24 6:33 PM, Sebastian Reichel wrote:

[...]

+static int fusb302_i2c_block_write(struct udevice *dev, u8 address,
+                                  u8 length, const u8 *data)
+{
+       int ret = 0;

This initialization of ret = 0 is probably unnecessary, see right below.

+       if (length <= 0)
+               return ret;

Should this return -EINVAL if length < 0 ?

+       ret = dm_i2c_write(dev, address, data, length);
+       if (ret)
+               dev_err(dev, "cannot block write 0x%02x, len=%d, ret=%d\n",
+                       address, length, ret);
+
+       return ret;
+}
+
+static int fusb302_i2c_read(struct udevice *dev, u8 address, u8 *data)
+{
+       int ret = 0, retries;

Plain 'int ret;' is enough here , ret is always assigned in the loop below.

+       for (retries = 0; retries < 3; retries++) {
+               ret = dm_i2c_read(dev, address, data, 1);
+               if (ret == 0)
+                       return ret;
+               dev_err(dev, "cannot read %02x, ret=%d\n", address, ret);
+       }
+
+       return ret;
+}
+
+static int fusb302_i2c_block_read(struct udevice *dev, u8 address,
+                                 u8 length, u8 *data)
+{
+       int ret = 0;

int ret;

+       if (length <= 0)
+               return ret;

return -EINVAL;

+       ret = dm_i2c_read(dev, address, data, length);
+       if (ret)
+               dev_err(dev, "cannot block read 0x%02x, len=%d, ret=%d\n",
+                       address, length, ret);
+       return ret;
+}
+
+static int fusb302_i2c_mask_write(struct udevice *dev, u8 address,
+                                 u8 mask, u8 value)
+{
+       int ret = 0;

int ret;

+       u8 data;
+
+       ret = fusb302_i2c_read(dev, address, &data);
+       if (ret)
+               return ret;
+       data &= ~mask;
+       data |= value;
+       ret = fusb302_i2c_write(dev, address, data);
+       if (ret)
+               return ret;
+
+       return ret;
+}
+
+static int fusb302_i2c_set_bits(struct udevice *dev, u8 address, u8 set_bits)
+{
+       return fusb302_i2c_mask_write(dev, address, 0x00, set_bits);
+}
+
+static int fusb302_i2c_clear_bits(struct udevice *dev, u8 address, u8 
clear_bits)
+{
+       return fusb302_i2c_mask_write(dev, address, clear_bits, 0x00);
+}
+
+static int fusb302_sw_reset(struct udevice *dev)
+{
+       int ret = fusb302_i2c_write(dev, FUSB_REG_RESET, 
FUSB_REG_RESET_SW_RESET);
+
+       if (ret)
+               dev_err(dev, "cannot sw reset the fusb302: %d\n", ret);
+
+       return ret;
+}
+
+static int fusb302_enable_tx_auto_retries(struct udevice *dev, u8 retry_count)
+{
+       int ret = 0;

int ret; , please fix globally

+       ret = fusb302_i2c_set_bits(dev, FUSB_REG_CONTROL3, retry_count |
+                                  FUSB_REG_CONTROL3_AUTO_RETRY);
+
+       return ret;
+}

[...]

+static int fusb302_set_cc(struct udevice *dev, enum typec_cc_status cc)
+{
+       struct fusb302_chip *chip = dev_get_priv(dev);
+       u8 switches0_mask = FUSB_REG_SWITCHES0_CC1_PU_EN |
+                           FUSB_REG_SWITCHES0_CC2_PU_EN |
+                           FUSB_REG_SWITCHES0_CC1_PD_EN |
+                           FUSB_REG_SWITCHES0_CC2_PD_EN;
+       u8 rd_mda, switches0_data = 0x00;

The masks can be const u8 .

+       int ret = 0;

[...]

+static int fusb302_set_polarity(struct udevice *dev,
+                               enum typec_cc_polarity polarity)
+{
+       return 0;

The uclass should check if callback is available and not call it if it is not.

+}

[...]

+static int fusb302_pd_send_message(struct udevice *dev,
+                                  const struct pd_message *msg)
+{
+       int ret = 0;
+       u8 buf[40];
+       u8 pos = 0;
+       int len;
+
+       /* SOP tokens */
+       buf[pos++] = FUSB302_TKN_SYNC1;
+       buf[pos++] = FUSB302_TKN_SYNC1;
+       buf[pos++] = FUSB302_TKN_SYNC1;
+       buf[pos++] = FUSB302_TKN_SYNC2;

Why not do this ?

u8 buf[40] = { FUSB302_TKN_SYNC1, FUSB302_TKN_SYNC1, FUSB302_TKN_SYNC1, FUSB302_TKN_SYNC2 };
u8 pos = 4;

+       len = pd_header_cnt_le(msg->header) * 4;
+       /* plug 2 for header */
+       len += 2;
+       if (len > 0x1F) {

Magic value should be defined in some macro.

+               dev_err(dev, "PD message too long %d (incl. header)", len);
+               return -EINVAL;
+       }

[...]

Reply via email to