root/drivers/dma/dw/acpi.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dw_dma_acpi_filter
  2. dw_dma_acpi_controller_register
  3. dw_dma_acpi_controller_free

   1 // SPDX-License-Identifier: GPL-2.0
   2 // Copyright (C) 2013,2019 Intel Corporation
   3 
   4 #include <linux/acpi.h>
   5 #include <linux/acpi_dma.h>
   6 
   7 #include "internal.h"
   8 
   9 static bool dw_dma_acpi_filter(struct dma_chan *chan, void *param)
  10 {
  11         struct acpi_dma_spec *dma_spec = param;
  12         struct dw_dma_slave slave = {
  13                 .dma_dev = dma_spec->dev,
  14                 .src_id = dma_spec->slave_id,
  15                 .dst_id = dma_spec->slave_id,
  16                 .m_master = 0,
  17                 .p_master = 1,
  18         };
  19 
  20         return dw_dma_filter(chan, &slave);
  21 }
  22 
  23 void dw_dma_acpi_controller_register(struct dw_dma *dw)
  24 {
  25         struct device *dev = dw->dma.dev;
  26         struct acpi_dma_filter_info *info;
  27         int ret;
  28 
  29         if (!has_acpi_companion(dev))
  30                 return;
  31 
  32         info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
  33         if (!info)
  34                 return;
  35 
  36         dma_cap_zero(info->dma_cap);
  37         dma_cap_set(DMA_SLAVE, info->dma_cap);
  38         info->filter_fn = dw_dma_acpi_filter;
  39 
  40         ret = acpi_dma_controller_register(dev, acpi_dma_simple_xlate, info);
  41         if (ret)
  42                 dev_err(dev, "could not register acpi_dma_controller\n");
  43 }
  44 
  45 void dw_dma_acpi_controller_free(struct dw_dma *dw)
  46 {
  47         struct device *dev = dw->dma.dev;
  48 
  49         if (!has_acpi_companion(dev))
  50                 return;
  51 
  52         acpi_dma_controller_free(dev);
  53 }

/* [<][>][^][v][top][bottom][index][help] */