linux/include/media/blackfin/ppi.h
<<
>>
Prefs
   1/*
   2 * Analog Devices PPI header file
   3 *
   4 * Copyright (c) 2011 Analog Devices Inc.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18 */
  19
  20#ifndef _PPI_H_
  21#define _PPI_H_
  22
  23#include <linux/interrupt.h>
  24#include <asm/blackfin.h>
  25#include <asm/bfin_ppi.h>
  26
  27/* EPPI */
  28#ifdef EPPI_EN
  29#define PORT_EN EPPI_EN
  30#define PORT_DIR EPPI_DIR
  31#define DMA32 0
  32#define PACK_EN PACKEN
  33#endif
  34
  35/* EPPI3 */
  36#ifdef EPPI0_CTL2
  37#define PORT_EN EPPI_CTL_EN
  38#define PORT_DIR EPPI_CTL_DIR
  39#define PACK_EN EPPI_CTL_PACKEN
  40#define DMA32 0
  41#define DLEN_8 EPPI_CTL_DLEN08
  42#define DLEN_16 EPPI_CTL_DLEN16
  43#endif
  44
  45struct ppi_if;
  46
  47struct ppi_params {
  48        u32 width;              /* width in pixels */
  49        u32 height;             /* height in lines */
  50        u32 hdelay;             /* delay after the HSYNC in pixels */
  51        u32 vdelay;             /* delay after the VSYNC in lines */
  52        u32 line;               /* total pixels per line */
  53        u32 frame;              /* total lines per frame */
  54        u32 hsync;              /* HSYNC length in pixels */
  55        u32 vsync;              /* VSYNC length in lines */
  56        int bpp;                /* bits per pixel */
  57        int dlen;               /* data length for ppi in bits */
  58        u32 ppi_control;        /* ppi configuration */
  59        u32 int_mask;           /* interrupt mask */
  60};
  61
  62struct ppi_ops {
  63        int (*attach_irq)(struct ppi_if *ppi, irq_handler_t handler);
  64        void (*detach_irq)(struct ppi_if *ppi);
  65        int (*start)(struct ppi_if *ppi);
  66        int (*stop)(struct ppi_if *ppi);
  67        int (*set_params)(struct ppi_if *ppi, struct ppi_params *params);
  68        void (*update_addr)(struct ppi_if *ppi, unsigned long addr);
  69};
  70
  71enum ppi_type {
  72        PPI_TYPE_PPI,
  73        PPI_TYPE_EPPI,
  74        PPI_TYPE_EPPI3,
  75};
  76
  77struct ppi_info {
  78        enum ppi_type type;
  79        int dma_ch;
  80        int irq_err;
  81        void __iomem *base;
  82        const unsigned short *pin_req;
  83};
  84
  85struct ppi_if {
  86        struct device *dev;
  87        unsigned long ppi_control;
  88        const struct ppi_ops *ops;
  89        const struct ppi_info *info;
  90        bool err_int; /* if we need request error interrupt */
  91        bool err; /* if ppi has fifo error */
  92        void *priv;
  93};
  94
  95struct ppi_if *ppi_create_instance(struct platform_device *pdev,
  96                        const struct ppi_info *info);
  97void ppi_delete_instance(struct ppi_if *ppi);
  98#endif
  99