msm: camera: common: Fix types for comparison function
Creates a function to match expectant types for platform device comparisons during component registration. CRs-Fixed: 2584631 Change-Id: Ib07160b8d8f1a370ba535ffdbbc6adbe391c68d5 Signed-off-by: Karthik Jayakumar <kjayakum@codeaurora.org>
This commit is contained in:
@@ -24,7 +24,7 @@
|
|||||||
#include "cam_mem_mgr.h"
|
#include "cam_mem_mgr.h"
|
||||||
#include "cam_debug_util.h"
|
#include "cam_debug_util.h"
|
||||||
#include "cam_common_util.h"
|
#include "cam_common_util.h"
|
||||||
#include "camera_main.h"
|
#include "cam_compat.h"
|
||||||
|
|
||||||
#define CAM_REQ_MGR_EVENT_MAX 30
|
#define CAM_REQ_MGR_EVENT_MAX 30
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "cam_compat.h"
|
#include "cam_compat.h"
|
||||||
#include "cam_debug_util.h"
|
#include "cam_debug_util.h"
|
||||||
#include "cam_cpas_api.h"
|
#include "cam_cpas_api.h"
|
||||||
|
#include "camera_main.h"
|
||||||
|
|
||||||
#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE
|
#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE
|
||||||
int cam_reserve_icp_fw(struct cam_fw_alloc_info *icp_fw, size_t fw_length)
|
int cam_reserve_icp_fw(struct cam_fw_alloc_info *icp_fw, size_t fw_length)
|
||||||
@@ -96,6 +97,11 @@ void cam_cpastop_scm_write(struct cam_cpas_hw_errata_wa *errata_wa)
|
|||||||
reg_val |= errata_wa->data.reg_info.value;
|
reg_val |= errata_wa->data.reg_info.value;
|
||||||
qcom_scm_io_writel(errata_wa->data.reg_info.offset, reg_val);
|
qcom_scm_io_writel(errata_wa->data.reg_info.offset, reg_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int camera_platform_compare_dev(struct device *dev, const void *data)
|
||||||
|
{
|
||||||
|
return platform_bus_type.match(dev, (struct device_driver *) data);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
int cam_reserve_icp_fw(struct cam_fw_alloc_info *icp_fw, size_t fw_length)
|
int cam_reserve_icp_fw(struct cam_fw_alloc_info *icp_fw, size_t fw_length)
|
||||||
{
|
{
|
||||||
@@ -174,4 +180,56 @@ void cam_cpastop_scm_write(struct cam_cpas_hw_errata_wa *errata_wa)
|
|||||||
reg_val |= errata_wa->data.reg_info.value;
|
reg_val |= errata_wa->data.reg_info.value;
|
||||||
scm_io_write(errata_wa->data.reg_info.offset, reg_val);
|
scm_io_write(errata_wa->data.reg_info.offset, reg_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int camera_platform_compare_dev(struct device *dev, void *data)
|
||||||
|
{
|
||||||
|
return platform_bus_type.match(dev, (struct device_driver *) data);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Callback to compare device from match list before adding as component */
|
||||||
|
static inline int camera_component_compare_dev(struct device *dev, void *data)
|
||||||
|
{
|
||||||
|
return dev == data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add component matches to list for master of aggregate driver */
|
||||||
|
int camera_component_match_add_drivers(struct device *master_dev,
|
||||||
|
struct component_match **match_list)
|
||||||
|
{
|
||||||
|
int i, rc = 0;
|
||||||
|
struct platform_device *pdev = NULL;
|
||||||
|
|
||||||
|
if (!master_dev || !match_list) {
|
||||||
|
CAM_ERR(CAM_UTIL, "Invalid parameters for component match add");
|
||||||
|
rc = -EINVAL;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(cam_component_drivers); i++) {
|
||||||
|
#if KERNEL_VERSION(5, 4, 0) <= LINUX_VERSION_CODE
|
||||||
|
struct device_driver const *drv =
|
||||||
|
&cam_component_drivers[i]->driver;
|
||||||
|
const void *drv_ptr = (const void *)drv;
|
||||||
|
#else
|
||||||
|
struct device_driver *drv = &cam_component_drivers[i]->driver;
|
||||||
|
void *drv_ptr = (void *)drv;
|
||||||
|
#endif
|
||||||
|
struct device *start_dev = NULL, *match_dev;
|
||||||
|
|
||||||
|
while ((match_dev = bus_find_device(&platform_bus_type,
|
||||||
|
start_dev, drv_ptr, &camera_platform_compare_dev))) {
|
||||||
|
put_device(start_dev);
|
||||||
|
pdev = to_platform_device(match_dev);
|
||||||
|
CAM_DBG(CAM_UTIL, "Adding matched component:%s",
|
||||||
|
pdev->name);
|
||||||
|
component_match_add(master_dev, match_list,
|
||||||
|
camera_component_compare_dev, match_dev);
|
||||||
|
start_dev = match_dev;
|
||||||
|
}
|
||||||
|
put_device(start_dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
@@ -1,12 +1,14 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2014-2020, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _CAM_COMPAT_H_
|
#ifndef _CAM_COMPAT_H_
|
||||||
#define _CAM_COMPAT_H_
|
#define _CAM_COMPAT_H_
|
||||||
|
|
||||||
#include <linux/version.h>
|
#include <linux/version.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/component.h>
|
||||||
|
|
||||||
#include "cam_csiphy_dev.h"
|
#include "cam_csiphy_dev.h"
|
||||||
#include "cam_cpastop_hw.h"
|
#include "cam_cpastop_hw.h"
|
||||||
@@ -37,5 +39,7 @@ void cam_cpastop_scm_write(struct cam_cpas_hw_errata_wa *errata_wa);
|
|||||||
int cam_ife_notify_safe_lut_scm(bool safe_trigger);
|
int cam_ife_notify_safe_lut_scm(bool safe_trigger);
|
||||||
int cam_csiphy_notify_secure_mode(struct csiphy_device *csiphy_dev,
|
int cam_csiphy_notify_secure_mode(struct csiphy_device *csiphy_dev,
|
||||||
bool protect, int32_t offset);
|
bool protect, int32_t offset);
|
||||||
|
int camera_component_match_add_drivers(struct device *master_dev,
|
||||||
|
struct component_match **match_list);
|
||||||
|
|
||||||
#endif /* _CAM_COMPAT_H_ */
|
#endif /* _CAM_COMPAT_H_ */
|
||||||
|
@@ -209,112 +209,6 @@ static const struct camera_submodule submodule_table[] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Drivers to be bound by component framework in this order with
|
|
||||||
* CRM as master
|
|
||||||
*/
|
|
||||||
static struct platform_driver *const cam_component_drivers[] = {
|
|
||||||
/* BASE */
|
|
||||||
&cam_sync_driver,
|
|
||||||
&cam_smmu_driver,
|
|
||||||
&cam_cpas_driver,
|
|
||||||
&cam_cdm_intf_driver,
|
|
||||||
&cam_hw_cdm_driver,
|
|
||||||
#ifdef CONFIG_SPECTRA_ISP
|
|
||||||
&cam_top_tpg_driver,
|
|
||||||
&cam_ife_csid17x_driver,
|
|
||||||
&cam_ife_csid_lite_driver,
|
|
||||||
&cam_vfe_driver,
|
|
||||||
&isp_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_TFE
|
|
||||||
&cam_top_tpg_driver,
|
|
||||||
&cam_tfe_driver,
|
|
||||||
&cam_tfe_csid530_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_SENSOR
|
|
||||||
&cam_res_mgr_driver,
|
|
||||||
&cci_driver,
|
|
||||||
&csiphy_driver,
|
|
||||||
&cam_actuator_platform_driver,
|
|
||||||
&cam_sensor_platform_driver,
|
|
||||||
&cam_eeprom_platform_driver,
|
|
||||||
&cam_ois_platform_driver,
|
|
||||||
#if IS_REACHABLE(CONFIG_LEDS_QPNP_FLASH_V2) || \
|
|
||||||
IS_REACHABLE(CONFIG_LEDS_QTI_FLASH)
|
|
||||||
&cam_flash_platform_driver,
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_ICP
|
|
||||||
&cam_a5_driver,
|
|
||||||
&cam_ipe_driver,
|
|
||||||
&cam_bps_driver,
|
|
||||||
&cam_icp_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_OPE
|
|
||||||
&cam_ope_driver,
|
|
||||||
&cam_ope_subdev_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_JPEG
|
|
||||||
&cam_jpeg_enc_driver,
|
|
||||||
&cam_jpeg_dma_driver,
|
|
||||||
&jpeg_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_FD
|
|
||||||
&cam_fd_hw_driver,
|
|
||||||
&cam_fd_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_LRME
|
|
||||||
&cam_lrme_hw_driver,
|
|
||||||
&cam_lrme_driver,
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_SPECTRA_CUSTOM
|
|
||||||
&cam_custom_hw_sub_mod_driver,
|
|
||||||
&cam_custom_csid_driver,
|
|
||||||
&custom_driver,
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Callback to compare device from match list before adding as component */
|
|
||||||
static int camera_component_compare_dev(struct device *dev, void *data)
|
|
||||||
{
|
|
||||||
return dev == data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add component matches to list for master of aggregate driver */
|
|
||||||
int camera_component_match_add_drivers(struct device *master_dev,
|
|
||||||
struct component_match **match_list)
|
|
||||||
{
|
|
||||||
int i, rc = 0;
|
|
||||||
struct platform_device *pdev = NULL;
|
|
||||||
|
|
||||||
if (!master_dev || !match_list) {
|
|
||||||
CAM_ERR(CAM_UTIL, "Invalid parameters for component match add");
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(cam_component_drivers); i++) {
|
|
||||||
struct device_driver *drv = &cam_component_drivers[i]->driver;
|
|
||||||
struct device *start_dev = NULL, *match_dev;
|
|
||||||
|
|
||||||
while ((match_dev = bus_find_device(&platform_bus_type,
|
|
||||||
start_dev, drv, (void *)platform_bus_type.match))) {
|
|
||||||
put_device(start_dev);
|
|
||||||
pdev = to_platform_device(match_dev);
|
|
||||||
CAM_DBG(CAM_UTIL, "Adding matched component:%s",
|
|
||||||
pdev->name);
|
|
||||||
component_match_add(master_dev, match_list,
|
|
||||||
camera_component_compare_dev, match_dev);
|
|
||||||
start_dev = match_dev;
|
|
||||||
}
|
|
||||||
put_device(start_dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int camera_verify_submodules(void)
|
static int camera_verify_submodules(void)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
@@ -68,6 +68,70 @@ extern struct platform_driver cam_custom_csid_driver;
|
|||||||
extern struct platform_driver custom_driver;
|
extern struct platform_driver custom_driver;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int camera_component_match_add_drivers(struct device *dev,
|
/*
|
||||||
struct component_match **match_list);
|
* Drivers to be bound by component framework in this order with
|
||||||
|
* CRM as master
|
||||||
|
*/
|
||||||
|
static struct platform_driver *const cam_component_drivers[] = {
|
||||||
|
/* BASE */
|
||||||
|
&cam_sync_driver,
|
||||||
|
&cam_smmu_driver,
|
||||||
|
&cam_cpas_driver,
|
||||||
|
&cam_cdm_intf_driver,
|
||||||
|
&cam_hw_cdm_driver,
|
||||||
|
#ifdef CONFIG_SPECTRA_ISP
|
||||||
|
&cam_top_tpg_driver,
|
||||||
|
&cam_ife_csid17x_driver,
|
||||||
|
&cam_ife_csid_lite_driver,
|
||||||
|
&cam_vfe_driver,
|
||||||
|
&isp_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_TFE
|
||||||
|
&cam_top_tpg_driver,
|
||||||
|
&cam_tfe_driver,
|
||||||
|
&cam_tfe_csid530_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_SENSOR
|
||||||
|
&cam_res_mgr_driver,
|
||||||
|
&cci_driver,
|
||||||
|
&csiphy_driver,
|
||||||
|
&cam_actuator_platform_driver,
|
||||||
|
&cam_sensor_platform_driver,
|
||||||
|
&cam_eeprom_platform_driver,
|
||||||
|
&cam_ois_platform_driver,
|
||||||
|
#if IS_REACHABLE(CONFIG_LEDS_QPNP_FLASH_V2) || \
|
||||||
|
IS_REACHABLE(CONFIG_LEDS_QTI_FLASH)
|
||||||
|
&cam_flash_platform_driver,
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_ICP
|
||||||
|
&cam_a5_driver,
|
||||||
|
&cam_ipe_driver,
|
||||||
|
&cam_bps_driver,
|
||||||
|
&cam_icp_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_OPE
|
||||||
|
&cam_ope_driver,
|
||||||
|
&cam_ope_subdev_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_JPEG
|
||||||
|
&cam_jpeg_enc_driver,
|
||||||
|
&cam_jpeg_dma_driver,
|
||||||
|
&jpeg_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_FD
|
||||||
|
&cam_fd_hw_driver,
|
||||||
|
&cam_fd_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_LRME
|
||||||
|
&cam_lrme_hw_driver,
|
||||||
|
&cam_lrme_driver,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SPECTRA_CUSTOM
|
||||||
|
&cam_custom_hw_sub_mod_driver,
|
||||||
|
&cam_custom_csid_driver,
|
||||||
|
&custom_driver,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* CAMERA_MAIN_H */
|
#endif /* CAMERA_MAIN_H */
|
||||||
|
Reference in New Issue
Block a user