mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge branch 'acpi-soc'
* acpi-soc: PM / clk: don't leave clocks enabled when driver not bound i2c: dw: Add APM X-Gene ACPI I2C device support ACPI / APD: Add APM X-Gene ACPI I2C device support ACPI / LPSS: change 'does not have' to 'has' in comment Revert "dmaengine: dw: platform: provide platform data for Intel" dmaengine: dw: return immediately from IRQ when DMA isn't in use dmaengine: dw: platform: power on device on shutdown ACPI / LPSS: override power state for LPSS DMA device ACPI / LPSS: power on when probe() and otherwise when remove() ACPI / LPSS: do delay for all LPSS devices when D3->D0 ACPI / LPSS: allow to use specific PM domain during ->probe() Revert "ACPI / LPSS: allow to use specific PM domain during ->probe()" device core: add BUS_NOTIFY_DRIVER_NOT_BOUND notification x86/platform/iosf_mbi: Remove duplicate definitions Conflicts: drivers/i2c/busses/i2c-designware-platdrv.c
This commit is contained in:
commit
1e3f28a552
16 changed files with 333 additions and 167 deletions
|
|
@ -622,12 +622,17 @@ static void dw_dma_tasklet(unsigned long data)
|
|||
static irqreturn_t dw_dma_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct dw_dma *dw = dev_id;
|
||||
u32 status = dma_readl(dw, STATUS_INT);
|
||||
u32 status;
|
||||
|
||||
/* Check if we have any interrupt from the DMAC which is not in use */
|
||||
if (!dw->in_use)
|
||||
return IRQ_NONE;
|
||||
|
||||
status = dma_readl(dw, STATUS_INT);
|
||||
dev_vdbg(dw->dma.dev, "%s: status=0x%x\n", __func__, status);
|
||||
|
||||
/* Check if we have any interrupt from the DMAC */
|
||||
if (!status || !dw->in_use)
|
||||
if (!status)
|
||||
return IRQ_NONE;
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -155,7 +155,6 @@ static int dw_probe(struct platform_device *pdev)
|
|||
struct dw_dma_chip *chip;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct resource *mem;
|
||||
const struct acpi_device_id *id;
|
||||
struct dw_dma_platform_data *pdata;
|
||||
int err;
|
||||
|
||||
|
|
@ -179,11 +178,6 @@ static int dw_probe(struct platform_device *pdev)
|
|||
pdata = dev_get_platdata(dev);
|
||||
if (!pdata)
|
||||
pdata = dw_dma_parse_dt(pdev);
|
||||
if (!pdata && has_acpi_companion(dev)) {
|
||||
id = acpi_match_device(dev->driver->acpi_match_table, dev);
|
||||
if (id)
|
||||
pdata = (struct dw_dma_platform_data *)id->driver_data;
|
||||
}
|
||||
|
||||
chip->dev = dev;
|
||||
|
||||
|
|
@ -239,7 +233,19 @@ static void dw_shutdown(struct platform_device *pdev)
|
|||
{
|
||||
struct dw_dma_chip *chip = platform_get_drvdata(pdev);
|
||||
|
||||
/*
|
||||
* We have to call dw_dma_disable() to stop any ongoing transfer. On
|
||||
* some platforms we can't do that since DMA device is powered off.
|
||||
* Moreover we have no possibility to check if the platform is affected
|
||||
* or not. That's why we call pm_runtime_get_sync() / pm_runtime_put()
|
||||
* unconditionally. On the other hand we can't use
|
||||
* pm_runtime_suspended() because runtime PM framework is not fully
|
||||
* used by the driver.
|
||||
*/
|
||||
pm_runtime_get_sync(chip->dev);
|
||||
dw_dma_disable(chip);
|
||||
pm_runtime_put_sync_suspend(chip->dev);
|
||||
|
||||
clk_disable_unprepare(chip->clk);
|
||||
}
|
||||
|
||||
|
|
@ -252,17 +258,8 @@ MODULE_DEVICE_TABLE(of, dw_dma_of_id_table);
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_ACPI
|
||||
static struct dw_dma_platform_data dw_dma_acpi_pdata = {
|
||||
.nr_channels = 8,
|
||||
.is_private = true,
|
||||
.chan_allocation_order = CHAN_ALLOCATION_ASCENDING,
|
||||
.chan_priority = CHAN_PRIORITY_ASCENDING,
|
||||
.block_size = 4095,
|
||||
.nr_masters = 2,
|
||||
};
|
||||
|
||||
static const struct acpi_device_id dw_dma_acpi_id_table[] = {
|
||||
{ "INTL9C60", (kernel_ulong_t)&dw_dma_acpi_pdata },
|
||||
{ "INTL9C60", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, dw_dma_acpi_id_table);
|
||||
|
|
|
|||
Loading…
Reference in a new issue