Files
android_kernel_samsung_sm86…/drivers/cam_utils/cam_soc_bus.h
Mukund Madhusudan Atre 65878f05bb msm: camera: common: Add support for DRV config
Add DRV config blob handling for programming required
registers per request. Also, add debugfs entry for
disabling DRV feature from ife hw manager. Update
existing BW voting logs to reflect DRV vote level info.
Add support for communicating with rsc device upon update
in MNOC BW. Also, update BW voting logic in cpas to accommodate
DRV voting to interconnect framework.

CRs-Fixed: 3065551
Change-Id: I8ac4820b7af824f5ff46614ae6804001deca9b01
Signed-off-by: Mukund Madhusudan Atre <quic_matre@quicinc.com>
2022-06-09 12:07:29 -07:00

116 lines
2.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2019, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _CAM_SOC_BUS_H_
#define _CAM_SOC_BUS_H_
#include <linux/of.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include "cam_debug_util.h"
#include "cam_cpas.h"
#define CAM_SOC_BUS_MAX_NUM_USECASES 8
enum cam_soc_bus_path_data {
CAM_SOC_BUS_PATH_DATA_HLOS,
CAM_SOC_BUS_PATH_DATA_DRV_HIGH,
CAM_SOC_BUS_PATH_DATA_DRV_LOW,
CAM_SOC_BUS_PATH_DATA_MAX,
};
/**
* struct cam_soc_bus_client_ab_ib : Bandwidth values for selected usecase
*
* @ab: Arbitrated Bandwidth
* @ib: Instantaneous Bandwidth
*/
struct cam_soc_bus_client_ab_ib {
uint64_t ab;
uint64_t ib;
};
/**
* struct cam_soc_bus_client_common_data : Common data fields for bus client
*
* @name: Name of bus client
* @src_id: Bus master/src id
* @dst_id: Bus slave/dst id
* @is_drv_port: If DRV bus client
* @num_usecases: Number of use cases for this client
* @bw_pair: Bandwidth values for applicable usecases
*/
struct cam_soc_bus_client_common_data {
const char *name;
uint32_t src_id;
uint32_t dst_id;
bool is_drv_port;
int num_usecases;
struct cam_soc_bus_client_ab_ib bw_pair[CAM_SOC_BUS_MAX_NUM_USECASES];
};
/**
* struct cam_soc_bus_client : Bus client information
*
* @client_data: Bus client data
* @common_data: Common data fields for bus client
*/
struct cam_soc_bus_client {
void *client_data;
struct cam_soc_bus_client_common_data *common_data;
};
#if IS_REACHABLE(CONFIG_QCOM_BUS_SCALING) || \
IS_REACHABLE(CONFIG_INTERCONNECT_QCOM)
const char *cam_soc_bus_path_data_to_str(enum cam_soc_bus_path_data bus_path_data);
int cam_soc_bus_client_update_request(void *client, unsigned int idx);
int cam_soc_bus_client_update_bw(void *client, uint64_t ab, uint64_t ib,
enum cam_soc_bus_path_data bus_path_data);
int cam_soc_bus_client_register(struct platform_device *pdev,
struct device_node *dev_node, void **client,
struct cam_soc_bus_client_common_data *common_data);
void cam_soc_bus_client_unregister(void **client);
#else
static const char *cam_soc_bus_path_data_to_str(enum cam_soc_bus_path_data bus_path_data)
{
return NULL;
}
static inline int cam_soc_bus_client_update_request(void *client,
unsigned int idx)
{
return 0;
}
int cam_soc_bus_client_update_bw(void *client, uint64_t ab, uint64_t ib,
enum cam_soc_bus_path_data bus_path_data)
{
return 0;
}
static inline int cam_soc_bus_client_register(
struct platform_device *pdev, struct device_node *dev_node,
void **client, struct cam_soc_bus_client_common_data *common_data)
{
return 0;
}
static inline void cam_soc_bus_client_unregister(void **client)
{
}
#endif
#endif /* _CAM_SOC_BUS_H_ */