diff options
Diffstat (limited to 'recipes-kernel/linux/linux-yocto-3.14/h1940/0017-ASoC-samsung-drop-support-for-legacy-S3C24XX-DMA-API.patch')
-rw-r--r-- | recipes-kernel/linux/linux-yocto-3.14/h1940/0017-ASoC-samsung-drop-support-for-legacy-S3C24XX-DMA-API.patch | 515 |
1 files changed, 0 insertions, 515 deletions
diff --git a/recipes-kernel/linux/linux-yocto-3.14/h1940/0017-ASoC-samsung-drop-support-for-legacy-S3C24XX-DMA-API.patch b/recipes-kernel/linux/linux-yocto-3.14/h1940/0017-ASoC-samsung-drop-support-for-legacy-S3C24XX-DMA-API.patch deleted file mode 100644 index 8de8c21..0000000 --- a/recipes-kernel/linux/linux-yocto-3.14/h1940/0017-ASoC-samsung-drop-support-for-legacy-S3C24XX-DMA-API.patch +++ /dev/null @@ -1,515 +0,0 @@ -From b63f4747fb0f17d970b643bd648794d60fc15838 Mon Sep 17 00:00:00 2001 -From: Vasily Khoruzhick <anarsoul@gmail.com> -Date: Mon, 19 May 2014 14:40:57 +0300 -Subject: [PATCH 17/17] ASoC: samsung: drop support for legacy S3C24XX DMA API - -Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> ---- - sound/soc/samsung/Kconfig | 3 - - sound/soc/samsung/Makefile | 2 - - sound/soc/samsung/dma.c | 460 --------------------------------------------- - 3 files changed, 465 deletions(-) - delete mode 100644 sound/soc/samsung/dma.c - -diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig -index 022c7a4..bf4bb7b 100644 ---- a/sound/soc/samsung/Kconfig -+++ b/sound/soc/samsung/Kconfig -@@ -13,9 +13,6 @@ config SND_SOC_SAMSUNG - config SND_S3C_DMA - tristate - --config SND_S3C_DMA_LEGACY -- tristate -- - config SND_S3C24XX_I2S - tristate - -diff --git a/sound/soc/samsung/Makefile b/sound/soc/samsung/Makefile -index 86715d8..bc02da0 100644 ---- a/sound/soc/samsung/Makefile -+++ b/sound/soc/samsung/Makefile -@@ -1,6 +1,5 @@ - # S3c24XX Platform Support - snd-soc-s3c-dma-objs := dmaengine.o --snd-soc-s3c-dma-legacy-objs := dma.o - snd-soc-idma-objs := idma.o - snd-soc-s3c24xx-i2s-objs := s3c24xx-i2s.o - snd-soc-s3c2412-i2s-objs := s3c2412-i2s.o -@@ -11,7 +10,6 @@ snd-soc-pcm-objs := pcm.o - snd-soc-i2s-objs := i2s.o - - obj-$(CONFIG_SND_S3C_DMA) += snd-soc-s3c-dma.o --obj-$(CONFIG_SND_S3C_DMA_LEGACY) += snd-soc-s3c-dma-legacy.o - obj-$(CONFIG_SND_S3C24XX_I2S) += snd-soc-s3c24xx-i2s.o - obj-$(CONFIG_SND_SAMSUNG_AC97) += snd-soc-ac97.o - obj-$(CONFIG_SND_S3C2412_SOC_I2S) += snd-soc-s3c2412-i2s.o -diff --git a/sound/soc/samsung/dma.c b/sound/soc/samsung/dma.c -deleted file mode 100644 -index dc09b71..0000000 ---- a/sound/soc/samsung/dma.c -+++ /dev/null -@@ -1,460 +0,0 @@ --/* -- * dma.c -- ALSA Soc Audio Layer -- * -- * (c) 2006 Wolfson Microelectronics PLC. -- * Graeme Gregory graeme.gregory@wolfsonmicro.com or linux@wolfsonmicro.com -- * -- * Copyright 2004-2005 Simtec Electronics -- * http://armlinux.simtec.co.uk/ -- * Ben Dooks <ben@simtec.co.uk> -- * -- * This program is free software; you can redistribute it and/or modify it -- * under the terms of the GNU General Public License as published by the -- * Free Software Foundation; either version 2 of the License, or (at your -- * option) any later version. -- */ -- --#include <linux/slab.h> --#include <linux/dma-mapping.h> --#include <linux/module.h> -- --#include <sound/soc.h> --#include <sound/pcm_params.h> -- --#include <asm/dma.h> --#include <mach/hardware.h> --#include <mach/dma.h> -- --#include "dma.h" -- --#define ST_RUNNING (1<<0) --#define ST_OPENED (1<<1) -- --static const struct snd_pcm_hardware dma_hardware = { -- .info = SNDRV_PCM_INFO_INTERLEAVED | -- SNDRV_PCM_INFO_BLOCK_TRANSFER | -- SNDRV_PCM_INFO_MMAP | -- SNDRV_PCM_INFO_MMAP_VALID, -- .buffer_bytes_max = 128*1024, -- .period_bytes_min = PAGE_SIZE, -- .period_bytes_max = PAGE_SIZE*2, -- .periods_min = 2, -- .periods_max = 128, -- .fifo_size = 32, --}; -- --struct runtime_data { -- spinlock_t lock; -- int state; -- unsigned int dma_loaded; -- unsigned int dma_period; -- dma_addr_t dma_start; -- dma_addr_t dma_pos; -- dma_addr_t dma_end; -- struct s3c_dma_params *params; --}; -- --static void audio_buffdone(void *data); -- --/* dma_enqueue -- * -- * place a dma buffer onto the queue for the dma system -- * to handle. -- */ --static void dma_enqueue(struct snd_pcm_substream *substream) --{ -- struct runtime_data *prtd = substream->runtime->private_data; -- dma_addr_t pos = prtd->dma_pos; -- unsigned int limit; -- struct samsung_dma_prep dma_info; -- -- pr_debug("Entered %s\n", __func__); -- -- limit = (prtd->dma_end - prtd->dma_start) / prtd->dma_period; -- -- pr_debug("%s: loaded %d, limit %d\n", -- __func__, prtd->dma_loaded, limit); -- -- dma_info.cap = (samsung_dma_has_circular() ? DMA_CYCLIC : DMA_SLAVE); -- dma_info.direction = -- (substream->stream == SNDRV_PCM_STREAM_PLAYBACK -- ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM); -- dma_info.fp = audio_buffdone; -- dma_info.fp_param = substream; -- dma_info.period = prtd->dma_period; -- dma_info.len = prtd->dma_period*limit; -- -- if (dma_info.cap == DMA_CYCLIC) { -- dma_info.buf = pos; -- prtd->params->ops->prepare(prtd->params->ch, &dma_info); -- prtd->dma_loaded += limit; -- return; -- } -- -- while (prtd->dma_loaded < limit) { -- pr_debug("dma_loaded: %d\n", prtd->dma_loaded); -- -- if ((pos + dma_info.period) > prtd->dma_end) { -- dma_info.period = prtd->dma_end - pos; -- pr_debug("%s: corrected dma len %ld\n", -- __func__, dma_info.period); -- } -- -- dma_info.buf = pos; -- prtd->params->ops->prepare(prtd->params->ch, &dma_info); -- -- prtd->dma_loaded++; -- pos += prtd->dma_period; -- if (pos >= prtd->dma_end) -- pos = prtd->dma_start; -- } -- -- prtd->dma_pos = pos; --} -- --static void audio_buffdone(void *data) --{ -- struct snd_pcm_substream *substream = data; -- struct runtime_data *prtd = substream->runtime->private_data; -- -- pr_debug("Entered %s\n", __func__); -- -- if (prtd->state & ST_RUNNING) { -- prtd->dma_pos += prtd->dma_period; -- if (prtd->dma_pos >= prtd->dma_end) -- prtd->dma_pos = prtd->dma_start; -- -- if (substream) -- snd_pcm_period_elapsed(substream); -- -- spin_lock(&prtd->lock); -- if (!samsung_dma_has_circular()) { -- prtd->dma_loaded--; -- dma_enqueue(substream); -- } -- spin_unlock(&prtd->lock); -- } --} -- --static int dma_hw_params(struct snd_pcm_substream *substream, -- struct snd_pcm_hw_params *params) --{ -- struct snd_pcm_runtime *runtime = substream->runtime; -- struct runtime_data *prtd = runtime->private_data; -- struct snd_soc_pcm_runtime *rtd = substream->private_data; -- unsigned long totbytes = params_buffer_bytes(params); -- struct s3c_dma_params *dma = -- snd_soc_dai_get_dma_data(rtd->cpu_dai, substream); -- struct samsung_dma_req req; -- struct samsung_dma_config config; -- -- pr_debug("Entered %s\n", __func__); -- -- /* return if this is a bufferless transfer e.g. -- * codec <--> BT codec or GSM modem -- lg FIXME */ -- if (!dma) -- return 0; -- -- /* this may get called several times by oss emulation -- * with different params -HW */ -- if (prtd->params == NULL) { -- /* prepare DMA */ -- prtd->params = dma; -- -- pr_debug("params %p, client %p, channel %d\n", prtd->params, -- prtd->params->client, prtd->params->channel); -- -- prtd->params->ops = samsung_dma_get_ops(); -- -- req.cap = (samsung_dma_has_circular() ? -- DMA_CYCLIC : DMA_SLAVE); -- req.client = prtd->params->client; -- config.direction = -- (substream->stream == SNDRV_PCM_STREAM_PLAYBACK -- ? DMA_MEM_TO_DEV : DMA_DEV_TO_MEM); -- config.width = prtd->params->dma_size; -- config.fifo = prtd->params->dma_addr; -- prtd->params->ch = prtd->params->ops->request( -- prtd->params->channel, &req, rtd->cpu_dai->dev, -- prtd->params->ch_name); -- if (!prtd->params->ch) { -- pr_err("Failed to allocate DMA channel\n"); -- return -ENXIO; -- } -- prtd->params->ops->config(prtd->params->ch, &config); -- } -- -- snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer); -- -- runtime->dma_bytes = totbytes; -- -- spin_lock_irq(&prtd->lock); -- prtd->dma_loaded = 0; -- prtd->dma_period = params_period_bytes(params); -- prtd->dma_start = runtime->dma_addr; -- prtd->dma_pos = prtd->dma_start; -- prtd->dma_end = prtd->dma_start + totbytes; -- spin_unlock_irq(&prtd->lock); -- -- return 0; --} -- --static int dma_hw_free(struct snd_pcm_substream *substream) --{ -- struct runtime_data *prtd = substream->runtime->private_data; -- -- pr_debug("Entered %s\n", __func__); -- -- snd_pcm_set_runtime_buffer(substream, NULL); -- -- if (prtd->params) { -- prtd->params->ops->flush(prtd->params->ch); -- prtd->params->ops->release(prtd->params->ch, -- prtd->params->client); -- prtd->params = NULL; -- } -- -- return 0; --} -- --static int dma_prepare(struct snd_pcm_substream *substream) --{ -- struct runtime_data *prtd = substream->runtime->private_data; -- int ret = 0; -- -- pr_debug("Entered %s\n", __func__); -- -- /* return if this is a bufferless transfer e.g. -- * codec <--> BT codec or GSM modem -- lg FIXME */ -- if (!prtd->params) -- return 0; -- -- /* flush the DMA channel */ -- prtd->params->ops->flush(prtd->params->ch); -- -- prtd->dma_loaded = 0; -- prtd->dma_pos = prtd->dma_start; -- -- /* enqueue dma buffers */ -- dma_enqueue(substream); -- -- return ret; --} -- --static int dma_trigger(struct snd_pcm_substream *substream, int cmd) --{ -- struct runtime_data *prtd = substream->runtime->private_data; -- int ret = 0; -- -- pr_debug("Entered %s\n", __func__); -- -- spin_lock(&prtd->lock); -- -- switch (cmd) { -- case SNDRV_PCM_TRIGGER_START: -- prtd->state |= ST_RUNNING; -- prtd->params->ops->trigger(prtd->params->ch); -- break; -- -- case SNDRV_PCM_TRIGGER_STOP: -- prtd->state &= ~ST_RUNNING; -- prtd->params->ops->stop(prtd->params->ch); -- break; -- -- default: -- ret = -EINVAL; -- break; -- } -- -- spin_unlock(&prtd->lock); -- -- return ret; --} -- --static snd_pcm_uframes_t --dma_pointer(struct snd_pcm_substream *substream) --{ -- struct snd_pcm_runtime *runtime = substream->runtime; -- struct runtime_data *prtd = runtime->private_data; -- unsigned long res; -- -- pr_debug("Entered %s\n", __func__); -- -- res = prtd->dma_pos - prtd->dma_start; -- -- pr_debug("Pointer offset: %lu\n", res); -- -- /* we seem to be getting the odd error from the pcm library due -- * to out-of-bounds pointers. this is maybe due to the dma engine -- * not having loaded the new values for the channel before being -- * called... (todo - fix ) -- */ -- -- if (res >= snd_pcm_lib_buffer_bytes(substream)) { -- if (res == snd_pcm_lib_buffer_bytes(substream)) -- res = 0; -- } -- -- return bytes_to_frames(substream->runtime, res); --} -- --static int dma_open(struct snd_pcm_substream *substream) --{ -- struct snd_pcm_runtime *runtime = substream->runtime; -- struct runtime_data *prtd; -- -- pr_debug("Entered %s\n", __func__); -- -- snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); -- snd_soc_set_runtime_hwparams(substream, &dma_hardware); -- -- prtd = kzalloc(sizeof(struct runtime_data), GFP_KERNEL); -- if (prtd == NULL) -- return -ENOMEM; -- -- spin_lock_init(&prtd->lock); -- -- runtime->private_data = prtd; -- return 0; --} -- --static int dma_close(struct snd_pcm_substream *substream) --{ -- struct snd_pcm_runtime *runtime = substream->runtime; -- struct runtime_data *prtd = runtime->private_data; -- -- pr_debug("Entered %s\n", __func__); -- -- if (!prtd) -- pr_debug("dma_close called with prtd == NULL\n"); -- -- kfree(prtd); -- -- return 0; --} -- --static int dma_mmap(struct snd_pcm_substream *substream, -- struct vm_area_struct *vma) --{ -- struct snd_pcm_runtime *runtime = substream->runtime; -- -- pr_debug("Entered %s\n", __func__); -- -- return dma_mmap_writecombine(substream->pcm->card->dev, vma, -- runtime->dma_area, -- runtime->dma_addr, -- runtime->dma_bytes); --} -- --static struct snd_pcm_ops dma_ops = { -- .open = dma_open, -- .close = dma_close, -- .ioctl = snd_pcm_lib_ioctl, -- .hw_params = dma_hw_params, -- .hw_free = dma_hw_free, -- .prepare = dma_prepare, -- .trigger = dma_trigger, -- .pointer = dma_pointer, -- .mmap = dma_mmap, --}; -- --static int preallocate_dma_buffer(struct snd_pcm *pcm, int stream) --{ -- struct snd_pcm_substream *substream = pcm->streams[stream].substream; -- struct snd_dma_buffer *buf = &substream->dma_buffer; -- size_t size = dma_hardware.buffer_bytes_max; -- -- pr_debug("Entered %s\n", __func__); -- -- buf->dev.type = SNDRV_DMA_TYPE_DEV; -- buf->dev.dev = pcm->card->dev; -- buf->private_data = NULL; -- buf->area = dma_alloc_writecombine(pcm->card->dev, size, -- &buf->addr, GFP_KERNEL); -- if (!buf->area) -- return -ENOMEM; -- buf->bytes = size; -- return 0; --} -- --static void dma_free_dma_buffers(struct snd_pcm *pcm) --{ -- struct snd_pcm_substream *substream; -- struct snd_dma_buffer *buf; -- int stream; -- -- pr_debug("Entered %s\n", __func__); -- -- for (stream = 0; stream < 2; stream++) { -- substream = pcm->streams[stream].substream; -- if (!substream) -- continue; -- -- buf = &substream->dma_buffer; -- if (!buf->area) -- continue; -- -- dma_free_writecombine(pcm->card->dev, buf->bytes, -- buf->area, buf->addr); -- buf->area = NULL; -- } --} -- --static int dma_new(struct snd_soc_pcm_runtime *rtd) --{ -- struct snd_card *card = rtd->card->snd_card; -- struct snd_pcm *pcm = rtd->pcm; -- int ret; -- -- pr_debug("Entered %s\n", __func__); -- -- ret = dma_coerce_mask_and_coherent(card->dev, DMA_BIT_MASK(32)); -- if (ret) -- return ret; -- -- if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) { -- ret = preallocate_dma_buffer(pcm, -- SNDRV_PCM_STREAM_PLAYBACK); -- if (ret) -- goto out; -- } -- -- if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) { -- ret = preallocate_dma_buffer(pcm, -- SNDRV_PCM_STREAM_CAPTURE); -- if (ret) -- goto out; -- } --out: -- return ret; --} -- --static struct snd_soc_platform_driver samsung_asoc_platform = { -- .ops = &dma_ops, -- .pcm_new = dma_new, -- .pcm_free = dma_free_dma_buffers, --}; -- --void samsung_asoc_init_dma_data(struct snd_soc_dai *dai, -- struct s3c_dma_params *playback, -- struct s3c_dma_params *capture) --{ -- snd_soc_dai_init_dma_data(dai, playback, capture); --} --EXPORT_SYMBOL_GPL(samsung_asoc_init_dma_data); -- --int samsung_asoc_dma_platform_register(struct device *dev) --{ -- return snd_soc_register_platform(dev, &samsung_asoc_platform); --} --EXPORT_SYMBOL_GPL(samsung_asoc_dma_platform_register); -- --void samsung_asoc_dma_platform_unregister(struct device *dev) --{ -- snd_soc_unregister_platform(dev); --} --EXPORT_SYMBOL_GPL(samsung_asoc_dma_platform_unregister); -- --MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>"); --MODULE_DESCRIPTION("Samsung ASoC DMA Driver"); --MODULE_LICENSE("GPL"); --- -1.9.3 - |