/* * 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__ */
/*
* 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__ */