Re: [PATCH v1 1/2] hwmon: (lm90): Add support for NCT7716, NCT7717 and NCT7718

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear Guenter,

Thank you for your comments,

Guenter Roeck <linux@xxxxxxxxxxxx> 於 2025年1月10日 週五 下午11:56寫道:
>
> On 1/10/25 00:26, Ming Yu wrote:
> ...
> > @@ -2288,7 +2329,19 @@ static const char *lm90_detect_nuvoton(struct i2c_client *client, int chip_id,
> >       if (config2 < 0)
> >               return NULL;
> >
> > -     if (address == 0x4c && !(config1 & 0x2a) && !(config2 & 0xf8)) {
> > +     if (address == 0x48 && !(config1 & 0x30) && !(config2 & 0xfe) &&
>
> Why config1 & 0x30 (instead of 0x3e) ?
>

Fix it in the next patch.

> > +         convrate <= 0x08) {
> > +             if (chip_id == 0x90)
> > +                     name = "nct7717";
> > +             else if (chip_id == 0x91)
> > +                     name = "nct7716";
> > +     } else if (address == 0x49 && !(config1 & 0x30) && !(config2 & 0xfe) &&
> > +                convrate <= 0x08) {
> > +             name = "nct7716";
>
> Please also check the chip ID, and the other unused configuration register bits.
>

Fix it in the next patch.

> > +     } else if (address == 0x4c && !(config1 & 0x18) && !(config2 & 0xf8) &&
> > +                convrate <= 0x08) {
> > +             name = "nct7718";
>
> Please also check the chip ID (0x90 according to the datasheet). Why not check bit 5
> of config1 ?
>
> If there is a reason for not checking the reserved configuration register bits,
> please add a comment to the code explaining the reason.
>

Fix it in the next patch.

> > +     } else if (address == 0x4c && !(config1 & 0x2a) && !(config2 & 0xf8)) {
> >               if (chip_id == 0x01 && convrate <= 0x09) {
> >                       /* W83L771W/G */
> >                       name = "w83l771";
> > @@ -2297,6 +2350,7 @@ static const char *lm90_detect_nuvoton(struct i2c_client *client, int chip_id,
> >                       name = "w83l771";
> >               }
> >       }
> > +
> >       return name;
> >   }
> >
> > @@ -2484,6 +2538,10 @@ static int lm90_detect(struct i2c_client *client, struct i2c_board_info *info)
> >               name = lm90_detect_maxim(client, common_address, chip_id,
> >                                        config1, convrate);
> >               break;
> > +     case 0x50:      /* Nuvoton */
> > +     case 0x5c:      /* Winbond/Nuvoton */
>
> The new detection code should be implemented as separate function to avoid
> weakening the detection mechanism. I would suggest to rename the current
> lm90_detect_nuvoton() to lm90_detect_winbond() and introduce a new
> lm90_detect_nuvoton(). Alternatively, add something like lm90_detect_nuvoton_50().
>
> Given that all new chips have a chip ID register (called device ID), I would suggest
> to arrange the new code around the chip IDs. Since all chips have another chip ID
> register at address 0xfd, it would make sense to check that register as well.
> That would only require a single check since it looks like the value is the same
> for all chips. Something like
>
>         int chid = i2c_smbus_read_byte_data(client, 0xfd);
>         ...
>
>         if (chid < 0 || config2 < 0)
>                 return NULL;
>
>         if (chid != 0x50 || convrate > 0x08)
>                 return NULL;
>
>         switch (chip_id) {
>         case 0x90:
>                 ...
>         case 0x91:
>                 ...
>         default:
>                 ...
>         }
>
Okay, I will make these modifications in the next patch.


Best regards,
Ming





[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux