You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
1.9 KiB
83 lines
1.9 KiB
/* |
|
* 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__ */
|
|
|