Merge branch 'rmobile-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal...
[pandora-kernel.git] / include / media / soc_mediabus.h
1 /*
2  * SoC-camera Media Bus API extensions
3  *
4  * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
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
11 #ifndef SOC_MEDIABUS_H
12 #define SOC_MEDIABUS_H
13
14 #include <linux/videodev2.h>
15 #include <linux/v4l2-mediabus.h>
16
17 /**
18  * enum soc_mbus_packing - data packing types on the media-bus
19  * @SOC_MBUS_PACKING_NONE:      no packing, bit-for-bit transfer to RAM
20  * @SOC_MBUS_PACKING_2X8_PADHI: 16 bits transferred in 2 8-bit samples, in the
21  *                              possibly incomplete byte high bits are padding
22  * @SOC_MBUS_PACKING_2X8_PADLO: as above, but low bits are padding
23  * @SOC_MBUS_PACKING_EXTEND16:  sample width (e.g., 10 bits) has to be extended
24  *                              to 16 bits
25  */
26 enum soc_mbus_packing {
27         SOC_MBUS_PACKING_NONE,
28         SOC_MBUS_PACKING_2X8_PADHI,
29         SOC_MBUS_PACKING_2X8_PADLO,
30         SOC_MBUS_PACKING_EXTEND16,
31 };
32
33 /**
34  * enum soc_mbus_order - sample order on the media bus
35  * @SOC_MBUS_ORDER_LE:          least significant sample first
36  * @SOC_MBUS_ORDER_BE:          most significant sample first
37  */
38 enum soc_mbus_order {
39         SOC_MBUS_ORDER_LE,
40         SOC_MBUS_ORDER_BE,
41 };
42
43 /**
44  * struct soc_mbus_pixelfmt - Data format on the media bus
45  * @name:               Name of the format
46  * @fourcc:             Fourcc code, that will be obtained if the data is
47  *                      stored in memory in the following way:
48  * @packing:            Type of sample-packing, that has to be used
49  * @order:              Sample order when storing in memory
50  * @bits_per_sample:    How many bits the bridge has to sample
51  */
52 struct soc_mbus_pixelfmt {
53         const char              *name;
54         u32                     fourcc;
55         enum soc_mbus_packing   packing;
56         enum soc_mbus_order     order;
57         u8                      bits_per_sample;
58 };
59
60 const struct soc_mbus_pixelfmt *soc_mbus_get_fmtdesc(
61         enum v4l2_mbus_pixelcode code);
62 s32 soc_mbus_bytes_per_line(u32 width, const struct soc_mbus_pixelfmt *mf);
63 int soc_mbus_samples_per_pixel(const struct soc_mbus_pixelfmt *mf);
64
65 #endif