[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>
Este commit está contenido en:
Heiner Kallweit
2015-12-30 14:43:29 -02:00
cometido por Mauro Carvalho Chehab
padre 80100fd9eb
commit 3f1321cbaa
Se han modificado 2 ficheros con 15 adiciones y 5 borrados

Ver fichero

@@ -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);