Commit 362d3a3a authored by Jarod Wilson's avatar Jarod Wilson Committed by Mauro Carvalho Chehab

[media] rc/nuvoton-cir: only warn about unknown chips

There are additional chip IDs that report a PNP ID of NTN0530, which we
were refusing to load on. Instead, lets just warn if we encounter an
unknown chip, as there's a chance it will work just fine.

Also, expand the list of known hardware to include both an earlier and a
later generation chip that this driver should function with. Douglas has
an older w83667hg variant, that with a touch more work, will be
supported by this driver, and Lutz has a newer w83677hg variant that
works without any further modifications to the driver.
Reported-by: default avatarDouglas Clowes <dclowes1@optusnet.com.au>
Reported-by: default avatarLutz Sammer <johns98@gmx.net>
Signed-off-by: default avatarJarod Wilson <jarod@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 56c0893c
...@@ -37,8 +37,6 @@ ...@@ -37,8 +37,6 @@
#include "nuvoton-cir.h" #include "nuvoton-cir.h"
static char *chip_id = "w836x7hg";
/* write val to config reg */ /* write val to config reg */
static inline void nvt_cr_write(struct nvt_dev *nvt, u8 val, u8 reg) static inline void nvt_cr_write(struct nvt_dev *nvt, u8 val, u8 reg)
{ {
...@@ -233,6 +231,8 @@ static int nvt_hw_detect(struct nvt_dev *nvt) ...@@ -233,6 +231,8 @@ static int nvt_hw_detect(struct nvt_dev *nvt)
unsigned long flags; unsigned long flags;
u8 chip_major, chip_minor; u8 chip_major, chip_minor;
int ret = 0; int ret = 0;
char chip_id[12];
bool chip_unknown = false;
nvt_efm_enable(nvt); nvt_efm_enable(nvt);
...@@ -246,15 +246,39 @@ static int nvt_hw_detect(struct nvt_dev *nvt) ...@@ -246,15 +246,39 @@ static int nvt_hw_detect(struct nvt_dev *nvt)
} }
chip_minor = nvt_cr_read(nvt, CR_CHIP_ID_LO); chip_minor = nvt_cr_read(nvt, CR_CHIP_ID_LO);
nvt_dbg("%s: chip id: 0x%02x 0x%02x", chip_id, chip_major, chip_minor);
if (chip_major != CHIP_ID_HIGH || /* these are the known working chip revisions... */
(chip_minor != CHIP_ID_LOW && chip_minor != CHIP_ID_LOW2)) { switch (chip_major) {
nvt_pr(KERN_ERR, "%s: unsupported chip, id: 0x%02x 0x%02x", case CHIP_ID_HIGH_667:
chip_id, chip_major, chip_minor); strcpy(chip_id, "w83667hg\0");
ret = -ENODEV; if (chip_minor != CHIP_ID_LOW_667)
chip_unknown = true;
break;
case CHIP_ID_HIGH_677B:
strcpy(chip_id, "w83677hg\0");
if (chip_minor != CHIP_ID_LOW_677B2 &&
chip_minor != CHIP_ID_LOW_677B3)
chip_unknown = true;
break;
case CHIP_ID_HIGH_677C:
strcpy(chip_id, "w83677hg-c\0");
if (chip_minor != CHIP_ID_LOW_677C)
chip_unknown = true;
break;
default:
strcpy(chip_id, "w836x7hg\0");
chip_unknown = true;
break;
} }
/* warn, but still let the driver load, if we don't know this chip */
if (chip_unknown)
nvt_pr(KERN_WARNING, "%s: unknown chip, id: 0x%02x 0x%02x, "
"it may not work...", chip_id, chip_major, chip_minor);
else
nvt_dbg("%s: chip id: 0x%02x 0x%02x",
chip_id, chip_major, chip_minor);
nvt_efm_disable(nvt); nvt_efm_disable(nvt);
spin_lock_irqsave(&nvt->nvt_lock, flags); spin_lock_irqsave(&nvt->nvt_lock, flags);
......
...@@ -330,9 +330,13 @@ struct nvt_dev { ...@@ -330,9 +330,13 @@ struct nvt_dev {
#define EFER_EFM_DISABLE 0xaa #define EFER_EFM_DISABLE 0xaa
/* Chip IDs found in CR_CHIP_ID_{HI,LO} */ /* Chip IDs found in CR_CHIP_ID_{HI,LO} */
#define CHIP_ID_HIGH 0xb4 #define CHIP_ID_HIGH_667 0xa5
#define CHIP_ID_LOW 0x72 #define CHIP_ID_HIGH_677B 0xb4
#define CHIP_ID_LOW2 0x73 #define CHIP_ID_HIGH_677C 0xc3
#define CHIP_ID_LOW_667 0x13
#define CHIP_ID_LOW_677B2 0x72
#define CHIP_ID_LOW_677B3 0x73
#define CHIP_ID_LOW_677C 0x33
/* Config regs we need to care about */ /* Config regs we need to care about */
#define CR_SOFTWARE_RESET 0x02 #define CR_SOFTWARE_RESET 0x02
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment