Loading drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +5 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ #include <linux/slab.h> #include <uapi/media/cam_isp.h> #include <uapi/media/cam_defs.h> #include <media/cam_req_mgr.h> #include <dt-bindings/msm/msm-camera.h> #include "cam_isp_hw_mgr_intf.h" Loading @@ -18,6 +18,7 @@ #include "cam_debug_util.h" #include "cam_cpas_api.h" #include "cam_tasklet_util.h" #include "cam_subdev.h" /* Timeout value in msec */ #define IFE_CSID_TIMEOUT 1000 Loading Loading @@ -1720,6 +1721,9 @@ static void cam_ife_csid_halt_csi2( csid_reg->csi2_reg->csid_csi2_rx_cfg0_addr); cam_io_w_mb(0, soc_info->reg_map[0].mem_base + csid_reg->csi2_reg->csid_csi2_rx_cfg1_addr); cam_subdev_notify_message(CAM_CSIPHY_DEVICE_TYPE, CAM_SUBDEV_MESSAGE_IRQ_ERR, csid_hw->csi2_rx_cfg.phy_sel); } static int cam_ife_csid_init_config_pxl_path( Loading drivers/cam_req_mgr/cam_req_mgr_dev.c +19 −1 Original line number Diff line number Diff line Loading @@ -643,6 +643,24 @@ void cam_register_subdev_fops(struct v4l2_file_operations *fops) } EXPORT_SYMBOL(cam_register_subdev_fops); void cam_subdev_notify_message(u32 subdev_type, enum cam_subdev_message_type_t message_type, uint32_t data) { struct v4l2_subdev *sd = NULL; struct cam_subdev *csd = NULL; list_for_each_entry(sd, &g_dev.v4l2_dev->subdevs, list) { sd->entity.name = video_device_node_name(sd->devnode); if (sd->entity.function == subdev_type) { csd = container_of(sd, struct cam_subdev, sd); if (csd->msg_cb != NULL) csd->msg_cb(sd, message_type, data); } } } EXPORT_SYMBOL(cam_subdev_notify_message); int cam_register_subdev(struct cam_subdev *csd) { struct v4l2_subdev *sd; Loading Loading @@ -671,7 +689,7 @@ int cam_register_subdev(struct cam_subdev *csd) sd = &csd->sd; v4l2_subdev_init(sd, csd->ops); sd->internal_ops = csd->internal_ops; snprintf(sd->name, ARRAY_SIZE(sd->name), csd->name); snprintf(sd->name, V4L2_SUBDEV_NAME_SIZE, "%s", csd->name); v4l2_set_subdevdata(sd, csd->token); sd->flags = csd->sd_flags; Loading drivers/cam_req_mgr/cam_subdev.h +24 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. */ #ifndef _CAM_SUBDEV_H_ Loading @@ -16,6 +16,10 @@ #define CAM_SUBDEVICE_EVENT_MAX 30 enum cam_subdev_message_type_t { CAM_SUBDEV_MESSAGE_IRQ_ERR = 0x1 }; /** * struct cam_subdev - describes a camera sub-device * Loading @@ -34,6 +38,7 @@ * @ent_function: Media entity function type. Can be: * %CAM_IFE_DEVICE_TYPE - identifies as IFE device. * %CAM_ICP_DEVICE_TYPE - identifies as ICP device. * @msg_cb: Pointer to the callback function to dump PHY status. * * Each instance of a subdev driver should create this struct, either * stand-alone or embedded in a larger struct. This structure should be Loading @@ -49,8 +54,26 @@ struct cam_subdev { u32 sd_flags; void *token; u32 ent_function; void (*msg_cb)( struct v4l2_subdev *sd, enum cam_subdev_message_type_t msg_type, uint32_t data); }; /** * cam_subdev_notify_message() * * @brief: Notify message to a subdevs of specific type * * @subdev_type: Subdev type * @message_type: message type * @data: data to be delivered. * */ void cam_subdev_notify_message(u32 subdev_type, enum cam_subdev_message_type_t message_type, uint32_t data); /** * cam_subdev_probe() * Loading drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.c +22 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. */ #include "cam_csiphy_dev.h" Loading @@ -9,6 +9,25 @@ #include "cam_csiphy_core.h" #include <media/cam_sensor.h> static void cam_csiphy_subdev_handle_message( struct v4l2_subdev *sd, enum cam_subdev_message_type_t message_type, uint32_t data) { struct csiphy_device *csiphy_dev = v4l2_get_subdevdata(sd); switch (message_type) { case CAM_SUBDEV_MESSAGE_IRQ_ERR: CAM_INFO(CAM_CSIPHY, "subdev index : %d CSIPHY index: %d", csiphy_dev->soc_info.index, data); if (data == csiphy_dev->soc_info.index) cam_csiphy_status_dmp(csiphy_dev); break; default: break; } } static long cam_csiphy_subdev_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { Loading Loading @@ -148,6 +167,8 @@ static int32_t cam_csiphy_platform_probe(struct platform_device *pdev) (V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS); new_csiphy_dev->v4l2_dev_str.ent_function = CAM_CSIPHY_DEVICE_TYPE; new_csiphy_dev->v4l2_dev_str.msg_cb = cam_csiphy_subdev_handle_message; new_csiphy_dev->v4l2_dev_str.token = new_csiphy_dev; Loading drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h +2 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ enum cam_csiphy_state { * @mipi_csiphy_interrupt_clear0_addr: * CSIPhy interrupt clear addr * @csiphy_version: CSIPhy Version * @csiphy_interrupt_status_size: CSIPhy status register size * @csiphy_common_array_size: CSIPhy common array size * @csiphy_reset_array_size: CSIPhy reset array size * @csiphy_2ph_config_array_size: 2ph settings size Loading @@ -108,6 +109,7 @@ struct csiphy_reg_parms_t { uint32_t mipi_csiphy_interrupt_mask_addr; uint32_t mipi_csiphy_interrupt_clear0_addr; uint32_t csiphy_version; uint32_t csiphy_interrupt_status_size; uint32_t csiphy_common_array_size; uint32_t csiphy_reset_array_size; uint32_t csiphy_2ph_config_array_size; Loading Loading
drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +5 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ #include <linux/slab.h> #include <uapi/media/cam_isp.h> #include <uapi/media/cam_defs.h> #include <media/cam_req_mgr.h> #include <dt-bindings/msm/msm-camera.h> #include "cam_isp_hw_mgr_intf.h" Loading @@ -18,6 +18,7 @@ #include "cam_debug_util.h" #include "cam_cpas_api.h" #include "cam_tasklet_util.h" #include "cam_subdev.h" /* Timeout value in msec */ #define IFE_CSID_TIMEOUT 1000 Loading Loading @@ -1720,6 +1721,9 @@ static void cam_ife_csid_halt_csi2( csid_reg->csi2_reg->csid_csi2_rx_cfg0_addr); cam_io_w_mb(0, soc_info->reg_map[0].mem_base + csid_reg->csi2_reg->csid_csi2_rx_cfg1_addr); cam_subdev_notify_message(CAM_CSIPHY_DEVICE_TYPE, CAM_SUBDEV_MESSAGE_IRQ_ERR, csid_hw->csi2_rx_cfg.phy_sel); } static int cam_ife_csid_init_config_pxl_path( Loading
drivers/cam_req_mgr/cam_req_mgr_dev.c +19 −1 Original line number Diff line number Diff line Loading @@ -643,6 +643,24 @@ void cam_register_subdev_fops(struct v4l2_file_operations *fops) } EXPORT_SYMBOL(cam_register_subdev_fops); void cam_subdev_notify_message(u32 subdev_type, enum cam_subdev_message_type_t message_type, uint32_t data) { struct v4l2_subdev *sd = NULL; struct cam_subdev *csd = NULL; list_for_each_entry(sd, &g_dev.v4l2_dev->subdevs, list) { sd->entity.name = video_device_node_name(sd->devnode); if (sd->entity.function == subdev_type) { csd = container_of(sd, struct cam_subdev, sd); if (csd->msg_cb != NULL) csd->msg_cb(sd, message_type, data); } } } EXPORT_SYMBOL(cam_subdev_notify_message); int cam_register_subdev(struct cam_subdev *csd) { struct v4l2_subdev *sd; Loading Loading @@ -671,7 +689,7 @@ int cam_register_subdev(struct cam_subdev *csd) sd = &csd->sd; v4l2_subdev_init(sd, csd->ops); sd->internal_ops = csd->internal_ops; snprintf(sd->name, ARRAY_SIZE(sd->name), csd->name); snprintf(sd->name, V4L2_SUBDEV_NAME_SIZE, "%s", csd->name); v4l2_set_subdevdata(sd, csd->token); sd->flags = csd->sd_flags; Loading
drivers/cam_req_mgr/cam_subdev.h +24 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. */ #ifndef _CAM_SUBDEV_H_ Loading @@ -16,6 +16,10 @@ #define CAM_SUBDEVICE_EVENT_MAX 30 enum cam_subdev_message_type_t { CAM_SUBDEV_MESSAGE_IRQ_ERR = 0x1 }; /** * struct cam_subdev - describes a camera sub-device * Loading @@ -34,6 +38,7 @@ * @ent_function: Media entity function type. Can be: * %CAM_IFE_DEVICE_TYPE - identifies as IFE device. * %CAM_ICP_DEVICE_TYPE - identifies as ICP device. * @msg_cb: Pointer to the callback function to dump PHY status. * * Each instance of a subdev driver should create this struct, either * stand-alone or embedded in a larger struct. This structure should be Loading @@ -49,8 +54,26 @@ struct cam_subdev { u32 sd_flags; void *token; u32 ent_function; void (*msg_cb)( struct v4l2_subdev *sd, enum cam_subdev_message_type_t msg_type, uint32_t data); }; /** * cam_subdev_notify_message() * * @brief: Notify message to a subdevs of specific type * * @subdev_type: Subdev type * @message_type: message type * @data: data to be delivered. * */ void cam_subdev_notify_message(u32 subdev_type, enum cam_subdev_message_type_t message_type, uint32_t data); /** * cam_subdev_probe() * Loading
drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.c +22 −1 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved. */ #include "cam_csiphy_dev.h" Loading @@ -9,6 +9,25 @@ #include "cam_csiphy_core.h" #include <media/cam_sensor.h> static void cam_csiphy_subdev_handle_message( struct v4l2_subdev *sd, enum cam_subdev_message_type_t message_type, uint32_t data) { struct csiphy_device *csiphy_dev = v4l2_get_subdevdata(sd); switch (message_type) { case CAM_SUBDEV_MESSAGE_IRQ_ERR: CAM_INFO(CAM_CSIPHY, "subdev index : %d CSIPHY index: %d", csiphy_dev->soc_info.index, data); if (data == csiphy_dev->soc_info.index) cam_csiphy_status_dmp(csiphy_dev); break; default: break; } } static long cam_csiphy_subdev_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { Loading Loading @@ -148,6 +167,8 @@ static int32_t cam_csiphy_platform_probe(struct platform_device *pdev) (V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS); new_csiphy_dev->v4l2_dev_str.ent_function = CAM_CSIPHY_DEVICE_TYPE; new_csiphy_dev->v4l2_dev_str.msg_cb = cam_csiphy_subdev_handle_message; new_csiphy_dev->v4l2_dev_str.token = new_csiphy_dev; Loading
drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h +2 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,7 @@ enum cam_csiphy_state { * @mipi_csiphy_interrupt_clear0_addr: * CSIPhy interrupt clear addr * @csiphy_version: CSIPhy Version * @csiphy_interrupt_status_size: CSIPhy status register size * @csiphy_common_array_size: CSIPhy common array size * @csiphy_reset_array_size: CSIPhy reset array size * @csiphy_2ph_config_array_size: 2ph settings size Loading @@ -108,6 +109,7 @@ struct csiphy_reg_parms_t { uint32_t mipi_csiphy_interrupt_mask_addr; uint32_t mipi_csiphy_interrupt_clear0_addr; uint32_t csiphy_version; uint32_t csiphy_interrupt_status_size; uint32_t csiphy_common_array_size; uint32_t csiphy_reset_array_size; uint32_t csiphy_2ph_config_array_size; Loading