[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: Douglas Clowes <dclowes1@optusnet.com.au> Reported-by: Lutz Sammer <johns98@gmx.net> Signed-off-by: Jarod Wilson <jarod@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
56c0893c4f
commit
362d3a3a95
|
@ -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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
#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
|
||||||
|
|
Loading…
Reference in a new issue