aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/intel_scu_ipc.c41
1 files changed, 18 insertions, 23 deletions
diff --git a/drivers/platform/x86/intel_scu_ipc.c b/drivers/platform/x86/intel_scu_ipc.c
index 6c9367fe569c..5087485a1fa7 100644
--- a/drivers/platform/x86/intel_scu_ipc.c
+++ b/drivers/platform/x86/intel_scu_ipc.c
@@ -92,11 +92,8 @@ static struct intel_scu_ipc_pdata_t intel_scu_ipc_tangier_pdata = {
92 .irq_mode = 0, 92 .irq_mode = 0,
93}; 93};
94 94
95static int ipc_probe(struct pci_dev *dev, const struct pci_device_id *id);
96static void ipc_remove(struct pci_dev *pdev);
97
98struct intel_scu_ipc_dev { 95struct intel_scu_ipc_dev {
99 struct pci_dev *pdev; 96 struct device *dev;
100 void __iomem *ipc_base; 97 void __iomem *ipc_base;
101 void __iomem *i2c_base; 98 void __iomem *i2c_base;
102 struct completion cmd_complete; 99 struct completion cmd_complete;
@@ -181,7 +178,7 @@ static inline int busy_loop(struct intel_scu_ipc_dev *scu)
181 } 178 }
182 179
183 if (status & BIT(0)) { 180 if (status & BIT(0)) {
184 dev_err(&scu->pdev->dev, "IPC timed out"); 181 dev_err(scu->dev, "IPC timed out");
185 return -ETIMEDOUT; 182 return -ETIMEDOUT;
186 } 183 }
187 184
@@ -197,8 +194,7 @@ static inline int ipc_wait_for_interrupt(struct intel_scu_ipc_dev *scu)
197 int status; 194 int status;
198 195
199 if (!wait_for_completion_timeout(&scu->cmd_complete, 3 * HZ)) { 196 if (!wait_for_completion_timeout(&scu->cmd_complete, 3 * HZ)) {
200 struct device *dev = &scu->pdev->dev; 197 dev_err(scu->dev, "IPC timed out\n");
201 dev_err(dev, "IPC timed out\n");
202 return -ETIMEDOUT; 198 return -ETIMEDOUT;
203 } 199 }
204 200
@@ -228,7 +224,7 @@ static int pwr_reg_rdwr(u16 *addr, u8 *data, u32 count, u32 op, u32 id)
228 224
229 mutex_lock(&ipclock); 225 mutex_lock(&ipclock);
230 226
231 if (scu->pdev == NULL) { 227 if (scu->dev == NULL) {
232 mutex_unlock(&ipclock); 228 mutex_unlock(&ipclock);
233 return -ENODEV; 229 return -ENODEV;
234 } 230 }
@@ -445,7 +441,7 @@ int intel_scu_ipc_simple_command(int cmd, int sub)
445 int err; 441 int err;
446 442
447 mutex_lock(&ipclock); 443 mutex_lock(&ipclock);
448 if (scu->pdev == NULL) { 444 if (scu->dev == NULL) {
449 mutex_unlock(&ipclock); 445 mutex_unlock(&ipclock);
450 return -ENODEV; 446 return -ENODEV;
451 } 447 }
@@ -475,7 +471,7 @@ int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen,
475 int i, err; 471 int i, err;
476 472
477 mutex_lock(&ipclock); 473 mutex_lock(&ipclock);
478 if (scu->pdev == NULL) { 474 if (scu->dev == NULL) {
479 mutex_unlock(&ipclock); 475 mutex_unlock(&ipclock);
480 return -ENODEV; 476 return -ENODEV;
481 } 477 }
@@ -518,7 +514,7 @@ int intel_scu_ipc_i2c_cntrl(u32 addr, u32 *data)
518 u32 cmd = 0; 514 u32 cmd = 0;
519 515
520 mutex_lock(&ipclock); 516 mutex_lock(&ipclock);
521 if (scu->pdev == NULL) { 517 if (scu->dev == NULL) {
522 mutex_unlock(&ipclock); 518 mutex_unlock(&ipclock);
523 return -ENODEV; 519 return -ENODEV;
524 } 520 }
@@ -533,7 +529,7 @@ int intel_scu_ipc_i2c_cntrl(u32 addr, u32 *data)
533 mdelay(1); 529 mdelay(1);
534 writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR); 530 writel(addr, scu->i2c_base + IPC_I2C_CNTRL_ADDR);
535 } else { 531 } else {
536 dev_err(&scu->pdev->dev, 532 dev_err(scu->dev,
537 "intel_scu_ipc: I2C INVALID_CMD = 0x%x\n", cmd); 533 "intel_scu_ipc: I2C INVALID_CMD = 0x%x\n", cmd);
538 534
539 mutex_unlock(&ipclock); 535 mutex_unlock(&ipclock);
@@ -563,42 +559,42 @@ static irqreturn_t ioc(int irq, void *dev_id)
563 559
564/** 560/**
565 * ipc_probe - probe an Intel SCU IPC 561 * ipc_probe - probe an Intel SCU IPC
566 * @dev: the PCI device matching 562 * @pdev: the PCI device matching
567 * @id: entry in the match table 563 * @id: entry in the match table
568 * 564 *
569 * Enable and install an intel SCU IPC. This appears in the PCI space 565 * Enable and install an intel SCU IPC. This appears in the PCI space
570 * but uses some hard coded addresses as well. 566 * but uses some hard coded addresses as well.
571 */ 567 */
572static int ipc_probe(struct pci_dev *dev, const struct pci_device_id *id) 568static int ipc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
573{ 569{
574 int err; 570 int err;
575 struct intel_scu_ipc_dev *scu = &ipcdev; 571 struct intel_scu_ipc_dev *scu = &ipcdev;
576 struct intel_scu_ipc_pdata_t *pdata; 572 struct intel_scu_ipc_pdata_t *pdata;
577 573
578 if (scu->pdev) /* We support only one SCU */ 574 if (scu->dev) /* We support only one SCU */
579 return -EBUSY; 575 return -EBUSY;
580 576
581 pdata = (struct intel_scu_ipc_pdata_t *)id->driver_data; 577 pdata = (struct intel_scu_ipc_pdata_t *)id->driver_data;
582 578
583 scu->pdev = pci_dev_get(dev); 579 scu->dev = &pdev->dev;
584 scu->irq_mode = pdata->irq_mode; 580 scu->irq_mode = pdata->irq_mode;
585 581
586 err = pcim_enable_device(dev); 582 err = pcim_enable_device(pdev);
587 if (err) 583 if (err)
588 return err; 584 return err;
589 585
590 err = pcim_iomap_regions(dev, 1 << 0, pci_name(dev)); 586 err = pcim_iomap_regions(pdev, 1 << 0, pci_name(pdev));
591 if (err) 587 if (err)
592 return err; 588 return err;
593 589
594 init_completion(&scu->cmd_complete); 590 init_completion(&scu->cmd_complete);
595 591
596 err = devm_request_irq(&dev->dev, dev->irq, ioc, 0, "intel_scu_ipc", 592 err = devm_request_irq(&pdev->dev, pdev->irq, ioc, 0, "intel_scu_ipc",
597 scu); 593 scu);
598 if (err) 594 if (err)
599 return err; 595 return err;
600 596
601 scu->ipc_base = pcim_iomap_table(dev)[0]; 597 scu->ipc_base = pcim_iomap_table(pdev)[0];
602 598
603 scu->i2c_base = ioremap_nocache(pdata->i2c_base, pdata->i2c_len); 599 scu->i2c_base = ioremap_nocache(pdata->i2c_base, pdata->i2c_len);
604 if (!scu->i2c_base) 600 if (!scu->i2c_base)
@@ -606,7 +602,7 @@ static int ipc_probe(struct pci_dev *dev, const struct pci_device_id *id)
606 602
607 intel_scu_devices_create(); 603 intel_scu_devices_create();
608 604
609 pci_set_drvdata(dev, scu); 605 pci_set_drvdata(pdev, scu);
610 return 0; 606 return 0;
611} 607}
612 608
@@ -624,8 +620,7 @@ static void ipc_remove(struct pci_dev *pdev)
624{ 620{
625 struct intel_scu_ipc_dev *scu = pci_get_drvdata(pdev); 621 struct intel_scu_ipc_dev *scu = pci_get_drvdata(pdev);
626 622
627 pci_dev_put(scu->pdev); 623 scu->dev = NULL;
628 scu->pdev = NULL;
629 iounmap(scu->i2c_base); 624 iounmap(scu->i2c_base);
630 intel_scu_devices_destroy(); 625 intel_scu_devices_destroy();
631} 626}