Files
android_kernel_samsung_sm86…/drivers/cam_req_mgr/cam_subdev.h
Jigarkumar Zala 03b6c2140f msm: camera: common: Make platform register centralized
Currently camera modules platform registration/remove function
is being called as a part of module_init function individually.
Building camera as module, current infrastructure cannot support
it, as DLKM only support single module_init/exit function.
This change enables that support by combining all platform
entry/remove functions centrally. Also, remove all submodule
makefiles and combined into one root makefile in order to generate
single kernel object file to dynamically loading the kernel module
in case of DLKM compilation.

CRs-Fixed: 2569808
Change-Id: I59db3ed6cef60123e474db2f222c39836056bd6e
Signed-off-by: Jigarkumar Zala <jzala@codeaurora.org>
Signed-off-by: Karthik Jayakumar <kjayakum@codeaurora.org>
2019-12-04 12:33:01 -08:00

100 lines
3.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
*/
#ifndef _CAM_SUBDEV_H_
#define _CAM_SUBDEV_H_
#include <linux/types.h>
#include <linux/platform_device.h>
#include <media/v4l2-fh.h>
#include <media/v4l2-device.h>
#include <media/v4l2-subdev.h>
#include <media/v4l2-event.h>
#include <media/v4l2-ioctl.h>
#define CAM_SUBDEVICE_EVENT_MAX 30
/**
* struct cam_subdev - describes a camera sub-device
*
* @pdev: Pointer to the platform device
* @sd: V4l2 subdevice
* @ops: V4l2 subdecie operations
* @internal_ops: V4l2 subdevice internal operations
* @name: Name of the sub-device. Please notice that the name
* must be unique.
* @sd_flags: Subdev flags. Can be:
* %V4L2_SUBDEV_FL_HAS_DEVNODE - Set this flag if
* this subdev needs a device node.
* %V4L2_SUBDEV_FL_HAS_EVENTS - Set this flag if
* this subdev generates events.
* @token: Pointer to cookie of the client driver
* @ent_function: Media entity function type. Can be:
* %CAM_IFE_DEVICE_TYPE - identifies as IFE device.
* %CAM_ICP_DEVICE_TYPE - identifies as ICP device.
*
* Each instance of a subdev driver should create this struct, either
* stand-alone or embedded in a larger struct. This structure should be
* initialized/registered by cam_register_subdev
*
*/
struct cam_subdev {
struct platform_device *pdev;
struct v4l2_subdev sd;
const struct v4l2_subdev_ops *ops;
const struct v4l2_subdev_internal_ops *internal_ops;
char *name;
u32 sd_flags;
void *token;
u32 ent_function;
};
/**
* cam_subdev_probe()
*
* @brief: Camera Subdevice node probe function for v4l2 setup
*
* @sd: Camera subdevice object
* @name: Name of the subdevice node
* @dev_type: Subdevice node type
*
*/
int cam_subdev_probe(struct cam_subdev *sd, struct platform_device *pdev,
char *name, uint32_t dev_type);
/**
* cam_subdev_remove()
*
* @brief: Called when subdevice node is unloaded
*
* @sd: Camera subdevice node object
*
*/
int cam_subdev_remove(struct cam_subdev *sd);
/**
* cam_register_subdev()
*
* @brief: This is the common utility function to be called by each camera
* subdevice node when it tries to register itself to the camera
* request manager
*
* @sd: Pointer to struct cam_subdev.
*/
int cam_register_subdev(struct cam_subdev *sd);
/**
* cam_unregister_subdev()
*
* @brief: This is the common utility function to be called by each camera
* subdevice node when it tries to unregister itself from the
* camera request manger
*
* @sd: Pointer to struct cam_subdev.
*/
int cam_unregister_subdev(struct cam_subdev *sd);
#endif /* _CAM_SUBDEV_H_ */