Dateien
android_kernel_samsung_sm86…/drivers/cam_utils/cam_soc_bus.h
Jigarkumar Zala 8a40a542fd msm: camera: common: Add support for icc and switching bus scaling
Add support for disabling bus scaling by moving bus driver
references from cpas to cam utils. The references can be
switched based on compile time flags in defconfig. Also, add
interconnect support which has bw voting based on source and
destination bus IDs.

CRs-Fixed: 2525881
Change-Id: I2a78523c0cad41503fe32aeb7bf4c794a26b16b6
Signed-off-by: Mukund Madhusudan Atre <matre@codeaurora.org>
Signed-off-by: Jigarkumar Zala <jzala@codeaurora.org>
2019-12-04 13:31:29 -08:00

97 Zeilen
2.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2019, The Linux Foundation. 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"
#define CAM_SOC_BUS_MAX_NUM_USECASES 8
/**
* 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
* @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;
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)
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);
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 inline int cam_soc_bus_client_update_request(void *client,
unsigned int idx)
{
return 0;
}
static inline int cam_soc_bus_client_update_bw(void *client,
uint64_t ab, uint64_t ib)
{
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_ */