[media] media: rc: nuvoton-cir: improve nvt_hw_detect

Check for the case that no Nuvoton chip is found on either EFM port.
Also move the position of nvt_efm_disable to reduce the time the
EFM ports are locked.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
Heiner Kallweit 2015-12-30 14:43:29 -02:00 committed by Mauro Carvalho Chehab
parent 80100fd9eb
commit 3f1321cbaa
2 changed files with 15 additions and 5 deletions

View file

@ -291,7 +291,7 @@ static inline const char *nvt_find_chip(struct nvt_dev *nvt, int id)
/* detect hardware features */
static void nvt_hw_detect(struct nvt_dev *nvt)
static int nvt_hw_detect(struct nvt_dev *nvt)
{
const char *chip_name;
int chip_id;
@ -306,10 +306,17 @@ static void nvt_hw_detect(struct nvt_dev *nvt)
nvt_efm_enable(nvt);
nvt->chip_major = nvt_cr_read(nvt, CR_CHIP_ID_HI);
}
nvt->chip_minor = nvt_cr_read(nvt, CR_CHIP_ID_LO);
nvt_efm_disable(nvt);
chip_id = nvt->chip_major << 8 | nvt->chip_minor;
if (chip_id == NVT_INVALID) {
dev_err(&nvt->pdev->dev,
"No device found on either EFM port\n");
return -ENODEV;
}
chip_name = nvt_find_chip(nvt, chip_id);
/* warn, but still let the driver load, if we don't know this chip */
@ -322,7 +329,7 @@ static void nvt_hw_detect(struct nvt_dev *nvt)
"found %s or compatible: chip id: 0x%02x 0x%02x",
chip_name, nvt->chip_major, nvt->chip_minor);
nvt_efm_disable(nvt);
return 0;
}
static void nvt_cir_ldev_init(struct nvt_dev *nvt)
@ -1057,7 +1064,9 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
init_waitqueue_head(&nvt->tx.queue);
nvt_hw_detect(nvt);
ret = nvt_hw_detect(nvt);
if (ret)
goto exit_free_dev_rdev;
/* Initialize CIR & CIR Wake Logical Devices */
nvt_efm_enable(nvt);

View file

@ -68,7 +68,8 @@ enum nvt_chip_ver {
NVT_W83667HG = 0xa510,
NVT_6775F = 0xb470,
NVT_6776F = 0xc330,
NVT_6779D = 0xc560
NVT_6779D = 0xc560,
NVT_INVALID = 0xffff,
};
struct nvt_chip {