mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-04 04:44:37 +08:00
media: atomisp: improve device detection code
- Remove useless check if !dev at the probe function: if such function is called, the device is defined. - Cleanup the PCI ID table using macros. - Use the same macros at the version-dependent part of the atomisp_v4l2.c file; - Add print messages to help understand what model the driver detect; - If device is not valid, better explain why. Signed-off-by: Mauro Carvalho Chehehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
9b7632e8fe
commit
ca133c395f
@ -1462,20 +1462,64 @@ atomisp_load_firmware(struct atomisp_device *isp)
|
||||
static bool is_valid_device(struct pci_dev *dev,
|
||||
const struct pci_device_id *id)
|
||||
{
|
||||
unsigned int a0_max_id;
|
||||
unsigned int a0_max_id = 0;
|
||||
const char *name;
|
||||
|
||||
switch (id->device & ATOMISP_PCI_DEVICE_SOC_MASK) {
|
||||
case ATOMISP_PCI_DEVICE_SOC_MRFLD:
|
||||
a0_max_id = ATOMISP_PCI_REV_MRFLD_A0_MAX;
|
||||
atomisp_hw_is_isp2401 = false;
|
||||
name = "Merrifield";
|
||||
break;
|
||||
case ATOMISP_PCI_DEVICE_SOC_BYT:
|
||||
a0_max_id = ATOMISP_PCI_REV_BYT_A0_MAX;
|
||||
atomisp_hw_is_isp2401 = false;
|
||||
name = "Baytrail";
|
||||
break;
|
||||
case ATOMISP_PCI_DEVICE_SOC_ANN:
|
||||
name = "Anniedale";
|
||||
atomisp_hw_is_isp2401 = true;
|
||||
break;
|
||||
case ATOMISP_PCI_DEVICE_SOC_CHT:
|
||||
name = "Cherrytrail";
|
||||
atomisp_hw_is_isp2401 = true;
|
||||
break;
|
||||
default:
|
||||
return true;
|
||||
dev_err(&dev->dev, "Unknown device ID %x04:%x04\n",
|
||||
id->vendor, id->device);
|
||||
return false;
|
||||
}
|
||||
|
||||
return dev->revision > a0_max_id;
|
||||
if (dev->revision <= ATOMISP_PCI_REV_BYT_A0_MAX) {
|
||||
dev_err(&dev->dev, "%s revision %d is not unsupported\n",
|
||||
name, dev->revision);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME:
|
||||
* remove the if once the driver become generic
|
||||
*/
|
||||
|
||||
#if defined(ISP2400)
|
||||
if (atomisp_hw_is_isp2401) {
|
||||
dev_err(&dev->dev, "Support for %s (ISP2401) was disabled at compile time\n",
|
||||
name);
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
if (!atomisp_hw_is_isp2401) {
|
||||
dev_err(&dev->dev, "Support for %s (ISP2400) was disabled at compile time\n",
|
||||
name);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
dev_info(&dev->dev, "Detected %s version %d (ISP240%c)\n",
|
||||
name, dev->revision,
|
||||
atomisp_hw_is_isp2401 ? '1' : '0');
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static int init_atomisp_wdts(struct atomisp_device *isp)
|
||||
@ -1522,21 +1566,12 @@ static int atomisp_pci_probe(struct pci_dev *dev,
|
||||
int err, val;
|
||||
u32 irq;
|
||||
|
||||
if (!dev) {
|
||||
dev_err(&dev->dev, "atomisp: error device ptr\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!is_valid_device(dev, id))
|
||||
return -ENODEV;
|
||||
|
||||
/* Pointer to struct device. */
|
||||
atomisp_dev = &dev->dev;
|
||||
|
||||
if (id->driver_data == HW_IS_ISP2401)
|
||||
atomisp_hw_is_isp2401 = true;
|
||||
else
|
||||
atomisp_hw_is_isp2401 = false;
|
||||
|
||||
pdata = atomisp_get_platform_data();
|
||||
if (!pdata)
|
||||
dev_warn(&dev->dev, "no platform data available\n");
|
||||
@ -1892,23 +1927,16 @@ static void atomisp_pci_remove(struct pci_dev *dev)
|
||||
}
|
||||
|
||||
static const struct pci_device_id atomisp_pci_tbl[] = {
|
||||
/*
|
||||
* FIXME:
|
||||
* remove the ifs once we get rid of the ifs on other parts of the driver
|
||||
*/
|
||||
#if defined(ISP2400)
|
||||
/* Merrifield */
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1178), .driver_data = HW_IS_ISP2400},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1179), .driver_data = HW_IS_ISP2400},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x117a), .driver_data = HW_IS_ISP2400},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ATOMISP_PCI_DEVICE_SOC_MRFLD)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ATOMISP_PCI_DEVICE_SOC_MRFLD_1179)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ATOMISP_PCI_DEVICE_SOC_MRFLD_117A)},
|
||||
/* Baytrail */
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0f38), .driver_data = HW_IS_ISP2400},
|
||||
#elif defined(ISP2401)
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ATOMISP_PCI_DEVICE_SOC_BYT)},
|
||||
/* Anniedale (Merrifield+ / Moorefield) */
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1478), .driver_data = HW_IS_ISP2401},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ATOMISP_PCI_DEVICE_SOC_ANN)},
|
||||
/* Cherrytrail */
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x22b8), .driver_data = HW_IS_ISP2401},
|
||||
#endif
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ATOMISP_PCI_DEVICE_SOC_CHT)},
|
||||
{0,}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user