83 lines · 1.9 KB · C
RawDownload
/* * Generic Platform Camera Driver Header * * Copyright (C) 2008 Magnus Damm * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __SOC_CAMERA_H__#define __SOC_CAMERA_H__ #include <linux/videodev2.h>#include <media/soc_camera.h>#include <media/v4l2-mediabus.h> struct device; struct soc_camera_platform_info {	const char *format_name;	unsigned long format_depth;	struct v4l2_mbus_framefmt format;	unsigned long mbus_param;	enum v4l2_mbus_type mbus_type;	struct soc_camera_device *icd;	int (*set_capture)(struct soc_camera_platform_info *info, int enable);}; static inline void soc_camera_platform_release(struct platform_device **pdev){	*pdev = NULL;} static inline int soc_camera_platform_add(struct soc_camera_device *icd,					  struct platform_device **pdev,					  struct soc_camera_link *plink,					  void (*release)(struct device *dev),					  int id){	struct soc_camera_subdev_desc *ssdd =		(struct soc_camera_subdev_desc *)plink;	struct soc_camera_platform_info *info = ssdd->drv_priv;	int ret; 	if (&icd->sdesc->subdev_desc != ssdd)		return -ENODEV; 	if (*pdev)		return -EBUSY; 	*pdev = platform_device_alloc("soc_camera_platform", id);	if (!*pdev)		return -ENOMEM; 	info->icd = icd; 	(*pdev)->dev.platform_data = info;	(*pdev)->dev.release = release; 	ret = platform_device_add(*pdev);	if (ret < 0) {		platform_device_put(*pdev);		*pdev = NULL;		info->icd = NULL;	} 	return ret;} static inline void soc_camera_platform_del(const struct soc_camera_device *icd,					   struct platform_device *pdev,					   const struct soc_camera_link *plink){	const struct soc_camera_subdev_desc *ssdd =		(const struct soc_camera_subdev_desc *)plink;	if (&icd->sdesc->subdev_desc != ssdd || !pdev)		return; 	platform_device_unregister(pdev);} #endif /* __SOC_CAMERA_H__ */