Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.17 97 lines 2.2 kB view raw
1/* 2 * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved. 3 * 4 * The code contained herein is licensed under the GNU General Public 5 * License. You may obtain a copy of the GNU General Public License 6 * Version 2 or later at the following locations: 7 * 8 * http://www.opensource.org/licenses/gpl-license.html 9 * http://www.gnu.org/copyleft/gpl.html 10 */ 11#define DEBUG 12#include <linux/export.h> 13#include <linux/types.h> 14#include <linux/init.h> 15#include <linux/io.h> 16#include <linux/errno.h> 17#include <linux/spinlock.h> 18#include <linux/delay.h> 19#include <linux/clk.h> 20#include <video/imx-ipu-v3.h> 21 22#include "ipu-prv.h" 23 24struct ipu_smfc_priv { 25 void __iomem *base; 26 spinlock_t lock; 27}; 28 29/*SMFC Registers */ 30#define SMFC_MAP 0x0000 31#define SMFC_WMC 0x0004 32#define SMFC_BS 0x0008 33 34int ipu_smfc_set_burstsize(struct ipu_soc *ipu, int channel, int burstsize) 35{ 36 struct ipu_smfc_priv *smfc = ipu->smfc_priv; 37 unsigned long flags; 38 u32 val, shift; 39 40 spin_lock_irqsave(&smfc->lock, flags); 41 42 shift = channel * 4; 43 val = readl(smfc->base + SMFC_BS); 44 val &= ~(0xf << shift); 45 val |= burstsize << shift; 46 writel(val, smfc->base + SMFC_BS); 47 48 spin_unlock_irqrestore(&smfc->lock, flags); 49 50 return 0; 51} 52EXPORT_SYMBOL_GPL(ipu_smfc_set_burstsize); 53 54int ipu_smfc_map_channel(struct ipu_soc *ipu, int channel, int csi_id, int mipi_id) 55{ 56 struct ipu_smfc_priv *smfc = ipu->smfc_priv; 57 unsigned long flags; 58 u32 val, shift; 59 60 spin_lock_irqsave(&smfc->lock, flags); 61 62 shift = channel * 3; 63 val = readl(smfc->base + SMFC_MAP); 64 val &= ~(0x7 << shift); 65 val |= ((csi_id << 2) | mipi_id) << shift; 66 writel(val, smfc->base + SMFC_MAP); 67 68 spin_unlock_irqrestore(&smfc->lock, flags); 69 70 return 0; 71} 72EXPORT_SYMBOL_GPL(ipu_smfc_map_channel); 73 74int ipu_smfc_init(struct ipu_soc *ipu, struct device *dev, 75 unsigned long base) 76{ 77 struct ipu_smfc_priv *smfc; 78 79 smfc = devm_kzalloc(dev, sizeof(*smfc), GFP_KERNEL); 80 if (!smfc) 81 return -ENOMEM; 82 83 ipu->smfc_priv = smfc; 84 spin_lock_init(&smfc->lock); 85 86 smfc->base = devm_ioremap(dev, base, PAGE_SIZE); 87 if (!smfc->base) 88 return -ENOMEM; 89 90 pr_debug("%s: ioremap 0x%08lx -> %p\n", __func__, base, smfc->base); 91 92 return 0; 93} 94 95void ipu_smfc_exit(struct ipu_soc *ipu) 96{ 97}