2012-09-26 12:24:03 +04:00
/*
* V4L2 OF binding parsing library
*
2013-04-02 18:41:19 +04:00
* Copyright ( C ) 2012 - 2013 Samsung Electronics Co . , Ltd .
* Author : Sylwester Nawrocki < s . nawrocki @ samsung . com >
*
2012-09-26 12:24:03 +04:00
* Copyright ( C ) 2012 Renesas Electronics Corp .
* Author : Guennadi Liakhovetski < g . liakhovetski @ gmx . de >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation .
*/
# ifndef _V4L2_OF_H
# define _V4L2_OF_H
# include <linux/list.h>
# include <linux/types.h>
# include <linux/errno.h>
2014-02-11 01:01:48 +04:00
# include <linux/of_graph.h>
2012-09-26 12:24:03 +04:00
# include <media/v4l2-mediabus.h>
struct device_node ;
/**
* struct v4l2_of_bus_mipi_csi2 - MIPI CSI - 2 bus data structure
* @ flags : media bus ( V4L2_MBUS_ * ) flags
* @ data_lanes : an array of physical data lane indexes
* @ clock_lane : physical lane index of the clock lane
* @ num_data_lanes : number of data lanes
2015-03-26 01:57:37 +03:00
* @ lane_polarities : polarity of the lanes . The order is the same of
* the physical lanes .
2012-09-26 12:24:03 +04:00
*/
struct v4l2_of_bus_mipi_csi2 {
unsigned int flags ;
unsigned char data_lanes [ 4 ] ;
unsigned char clock_lane ;
unsigned short num_data_lanes ;
2015-03-26 01:57:37 +03:00
bool lane_polarities [ 5 ] ;
2012-09-26 12:24:03 +04:00
} ;
/**
* struct v4l2_of_bus_parallel - parallel data bus data structure
* @ flags : media bus ( V4L2_MBUS_ * ) flags
* @ bus_width : bus width in bits
* @ data_shift : data shift in bits
*/
struct v4l2_of_bus_parallel {
unsigned int flags ;
unsigned char bus_width ;
unsigned char data_shift ;
} ;
/**
* struct v4l2_of_endpoint - the endpoint data structure
2014-02-14 14:53:56 +04:00
* @ base : struct of_endpoint containing port , id , and local of_node
2012-09-26 12:24:03 +04:00
* @ bus_type : bus type
* @ bus : bus configuration data structure
*/
struct v4l2_of_endpoint {
2014-02-14 14:53:56 +04:00
struct of_endpoint base ;
2015-03-22 23:42:31 +03:00
/* Fields below this line will be zeroed by v4l2_of_parse_endpoint() */
2012-09-26 12:24:03 +04:00
enum v4l2_mbus_type bus_type ;
union {
struct v4l2_of_bus_parallel parallel ;
struct v4l2_of_bus_mipi_csi2 mipi_csi2 ;
} bus ;
} ;
2013-05-17 14:31:04 +04:00
/**
* struct v4l2_of_link - a link between two endpoints
* @ local_node : pointer to device_node of this endpoint
* @ local_port : identifier of the port this endpoint belongs to
* @ remote_node : pointer to device_node of the remote endpoint
* @ remote_port : identifier of the port the remote endpoint belongs to
*/
struct v4l2_of_link {
struct device_node * local_node ;
unsigned int local_port ;
struct device_node * remote_node ;
unsigned int remote_port ;
} ;
2012-09-26 12:24:03 +04:00
# ifdef CONFIG_OF
2013-05-17 14:31:04 +04:00
int v4l2_of_parse_endpoint ( const struct device_node * node ,
struct v4l2_of_endpoint * endpoint ) ;
2013-05-17 14:31:04 +04:00
int v4l2_of_parse_link ( const struct device_node * node ,
struct v4l2_of_link * link ) ;
void v4l2_of_put_link ( struct v4l2_of_link * link ) ;
2012-09-26 12:24:03 +04:00
# else /* CONFIG_OF */
static inline int v4l2_of_parse_endpoint ( const struct device_node * node ,
struct v4l2_of_endpoint * link )
{
return - ENOSYS ;
}
2013-05-17 14:31:04 +04:00
static inline int v4l2_of_parse_link ( const struct device_node * node ,
struct v4l2_of_link * link )
{
return - ENOSYS ;
}
static inline void v4l2_of_put_link ( struct v4l2_of_link * link )
{
}
2012-09-26 12:24:03 +04:00
# endif /* CONFIG_OF */
# endif /* _V4L2_OF_H */