intel_mid_i2s: add cloverview probing support
authorLeonard Mai <leonard.mai@intel.com>
Tue, 25 Oct 2011 17:45:38 +0000 (10:45 -0700)
committerbuildbot <buildbot@intel.com>
Wed, 11 Jan 2012 22:29:56 +0000 (14:29 -0800)
BZ: 17484

Cloverview SOC use different PCI Device ID for I2S hence existing Medfield
HSI driver won't be loaded on Cloverview SOC.

This patch adds I2S probing support for Cloverview SOC.

Change-Id: Iae85eebe146059af40b9d15a94fc166a110915ca
Signed-off-by: Leonard D Mai <leonard.mai@intel.com>
Tested-by: Ojas Chauhan <ojas.chauhan@intel.com>
Reviewed-on: http://android.intel.com:8080/27472
Reviewed-by: Chauhan, Ojas <ojas.chauhan@intel.com>
Reviewed-by: Gross, Mark <mark.gross@intel.com>
Reviewed-by: Wagner, DavidX <davidx.wagner@intel.com>
Reviewed-by: De Chivre, RenaudX <renaudx.de.chivre@intel.com>
Tested-by: Barthes, FabienX <fabienx.barthes@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
sound/pci/intel_mid_i2s/intel_mid_i2s.c
sound/pci/intel_mid_i2s/intel_mid_i2s.h

index f541e74..803e1b7 100644 (file)
@@ -65,6 +65,8 @@ static const struct dev_pm_ops intel_mid_i2s_pm_ops = {
 static DEFINE_PCI_DEVICE_TABLE(pci_ids) = {
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, MFLD_SSP1_DEVICE_ID) },
        { PCI_DEVICE(PCI_VENDOR_ID_INTEL, MFLD_SSP0_DEVICE_ID) },
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, CLV_SSP1_DEVICE_ID) },
+       { PCI_DEVICE(PCI_VENDOR_ID_INTEL, CLV_SSP0_DEVICE_ID) },
        { 0, }, /* terminate list */
 };
 
@@ -2427,9 +2429,11 @@ intel_mid_i2s_find_usage(struct pci_dev *pdev,
                        "Vendor capability not present/invalid\n");
                switch (pdev->device) {
                case MFLD_SSP1_DEVICE_ID:
+               case CLV_SSP1_DEVICE_ID:
                        *usage  = SSP_USAGE_BLUETOOTH_FM;
                        break;
                case MFLD_SSP0_DEVICE_ID:
+               case CLV_SSP0_DEVICE_ID:
                        *usage  = SSP_USAGE_MODEM;
                        break;
                }
@@ -2453,9 +2457,11 @@ intel_mid_i2s_find_usage(struct pci_dev *pdev,
        /* Init the driver data structure fields*/
        switch (pdev->device) {
        case MFLD_SSP1_DEVICE_ID:
+       case CLV_SSP1_DEVICE_ID:
                drv_data->device_instance = DMA1C_DEVICE_INSTANCE_SSP1;
                break;
        case MFLD_SSP0_DEVICE_ID:
+       case CLV_SSP0_DEVICE_ID:
                drv_data->device_instance = DMA1C_DEVICE_INSTANCE_SSP0;
                break;
        default:
@@ -2510,7 +2516,9 @@ static int intel_mid_i2s_probe(struct pci_dev *pdev,
         * Get basic io resource and map it for SSP1 [BAR=0]
         */
        if ((pdev->device == MFLD_SSP1_DEVICE_ID) ||
-           (pdev->device == MFLD_SSP0_DEVICE_ID)) {
+           (pdev->device == MFLD_SSP0_DEVICE_ID) ||
+           (pdev->device == CLV_SSP1_DEVICE_ID) ||
+           (pdev->device == CLV_SSP0_DEVICE_ID)) {
                drv_data->paddr = pci_resource_start(pdev, MRST_SSP_BAR);
                drv_data->iolen = pci_resource_len(pdev, MRST_SSP_BAR);
                status = pci_request_region(pdev, MRST_SSP_BAR,
@@ -2538,19 +2546,27 @@ static int intel_mid_i2s_probe(struct pci_dev *pdev,
        dev_dbg(&(pdev->dev), "ioaddr = : %p\n", drv_data->ioaddr);
 
        /* Check the SSP, if SSP3, then another DMA is used (GPDMA..) */
-       if ((pdev->device != MFLD_SSP1_DEVICE_ID) &&
-           (pdev->device != MFLD_SSP0_DEVICE_ID)) {
+       if ((pdev->device == MFLD_SSP1_DEVICE_ID) ||
+               (pdev->device == MFLD_SSP0_DEVICE_ID)) {
+               /* prepare for DMA channel allocation */
+               /* get the pci_dev structure pointer */
+               drv_data->dmac1 = pci_get_device(PCI_VENDOR_ID_INTEL,
+                                               MFLD_LPE_DMA_DEVICE_ID,
+                                               NULL);
+       } else if ((pdev->device == CLV_SSP1_DEVICE_ID) ||
+               (pdev->device == CLV_SSP0_DEVICE_ID)) {
+               /* prepare for DMA channel allocation */
+               /* get the pci_dev structure pointer */
+               drv_data->dmac1 = pci_get_device(PCI_VENDOR_ID_INTEL,
+                                               CLV_LPE_DMA_DEVICE_ID,
+                                               NULL);
+       } else {
                dev_err(&pdev->dev,
                         "Don't know dma device ID for this SSP PCDID=%x\n",
                         pdev->device);
                goto err_i2s_probe3;
        }
 
-       /* prepare for DMA channel allocation */
-       /* get the pci_dev structure pointer */
-       drv_data->dmac1 = pci_get_device(PCI_VENDOR_ID_INTEL,
-                                        MFLD_LPE_DMA_DEVICE_ID,
-                                        NULL);
        /* in case the stop dma have to wait for end of callbacks   */
        /* This will be removed when TERMINATE_ALL available in DMA */
        if (!drv_data->dmac1) {
index b49d0a9..2914cca 100644 (file)
  */
 #define DRIVER_NAME "I2S SSP Driver"
 
-#define MFLD_SSP1_DEVICE_ID 0x0825     /* FOR MFLD */
-#define MRST_SSP0_DEVICE_ID 0x0815     /* FOR MRST */
-#define MFLD_SSP0_DEVICE_ID 0x0832     /* FOR MFLD */
-
-#define MRST_LPE_DMA_DEVICE_ID 0x0814
-#define MFLD_LPE_DMA_DEVICE_ID 0x0830
+#define MRST_SSP0_DEVICE_ID    0x0815  /* FOR MRST */
+#define MFLD_SSP0_DEVICE_ID    0x0832  /* FOR MFLD */
+#define MFLD_SSP1_DEVICE_ID    0x0825  /* FOR MFLD */
+#define CLV_SSP0_DEVICE_ID     0x08F1  /* For Cloverview support */
+#define CLV_SSP1_DEVICE_ID     0x08E8  /* For Cloverview support */
+
+#define MRST_LPE_DMA_DEVICE_ID 0x0814
+#define MFLD_LPE_DMA_DEVICE_ID 0x0830
+#define CLV_LPE_DMA_DEVICE_ID  0x08F0
 
 /* SSP1 PCI device Base Address Register */
 #define MRST_SSP_BAR   0