linux/include/linux/amba/bus.h
<<
>>
Prefs
   1/*
   2 *  linux/include/amba/bus.h
   3 *
   4 *  This device type deals with ARM PrimeCells and anything else that
   5 *  presents a proper CID (0xB105F00D) at the end of the I/O register
   6 *  region or that is derived from a PrimeCell.
   7 *
   8 *  Copyright (C) 2003 Deep Blue Solutions Ltd, All Rights Reserved.
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License version 2 as
  12 * published by the Free Software Foundation.
  13 */
  14#ifndef ASMARM_AMBA_H
  15#define ASMARM_AMBA_H
  16
  17#include <linux/clk.h>
  18#include <linux/device.h>
  19#include <linux/err.h>
  20#include <linux/resource.h>
  21#include <linux/regulator/consumer.h>
  22
  23#define AMBA_NR_IRQS    2
  24#define AMBA_CID        0xb105f00d
  25
  26struct clk;
  27
  28struct amba_device {
  29        struct device           dev;
  30        struct resource         res;
  31        struct clk              *pclk;
  32        struct regulator        *vcore;
  33        u64                     dma_mask;
  34        unsigned int            periphid;
  35        unsigned int            irq[AMBA_NR_IRQS];
  36};
  37
  38struct amba_id {
  39        unsigned int            id;
  40        unsigned int            mask;
  41        void                    *data;
  42};
  43
  44struct amba_driver {
  45        struct device_driver    drv;
  46        int                     (*probe)(struct amba_device *, const struct amba_id *);
  47        int                     (*remove)(struct amba_device *);
  48        void                    (*shutdown)(struct amba_device *);
  49        int                     (*suspend)(struct amba_device *, pm_message_t);
  50        int                     (*resume)(struct amba_device *);
  51        const struct amba_id    *id_table;
  52};
  53
  54enum amba_vendor {
  55        AMBA_VENDOR_ARM = 0x41,
  56        AMBA_VENDOR_ST = 0x80,
  57};
  58
  59extern struct bus_type amba_bustype;
  60
  61#define to_amba_device(d)       container_of(d, struct amba_device, dev)
  62
  63#define amba_get_drvdata(d)     dev_get_drvdata(&d->dev)
  64#define amba_set_drvdata(d,p)   dev_set_drvdata(&d->dev, p)
  65
  66int amba_driver_register(struct amba_driver *);
  67void amba_driver_unregister(struct amba_driver *);
  68int amba_device_register(struct amba_device *, struct resource *);
  69void amba_device_unregister(struct amba_device *);
  70struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int);
  71int amba_request_regions(struct amba_device *, const char *);
  72void amba_release_regions(struct amba_device *);
  73
  74#define amba_pclk_enable(d)     \
  75        (IS_ERR((d)->pclk) ? 0 : clk_enable((d)->pclk))
  76
  77#define amba_pclk_disable(d)    \
  78        do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0)
  79
  80#define amba_vcore_enable(d)    \
  81        (IS_ERR((d)->vcore) ? 0 : regulator_enable((d)->vcore))
  82
  83#define amba_vcore_disable(d)   \
  84        do { if (!IS_ERR((d)->vcore)) regulator_disable((d)->vcore); } while (0)
  85
  86/* Some drivers don't use the struct amba_device */
  87#define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff)
  88#define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f)
  89#define AMBA_MANF_BITS(a) (((a) >> 12) & 0xff)
  90#define AMBA_PART_BITS(a) ((a) & 0xfff)
  91
  92#define amba_config(d)  AMBA_CONFIG_BITS((d)->periphid)
  93#define amba_rev(d)     AMBA_REV_BITS((d)->periphid)
  94#define amba_manf(d)    AMBA_MANF_BITS((d)->periphid)
  95#define amba_part(d)    AMBA_PART_BITS((d)->periphid)
  96
  97#endif
  98