media: rc: nuvoton-cir: improve nvt_hw_detect
Subsystems (2)
PATCH 10/16 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 <[email protected]>
--- drivers/media/rc/nuvoton-cir.c | 17 +++++++++++++---- drivers/media/rc/nuvoton-cir.h | 3 ++- 2 files changed, 15 insertions(+), 5 deletions(-)
drivers/media/rc/nuvoton-cir.c +13 -4
@@ -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)
@@ -1053,7 +1060,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);
drivers/media/rc/nuvoton-cir.h +2 -1
@@ -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 {
Signature · 1 line
2.6.4