Files
SDK_SG200x_V2/osdrv/interdrv/v2/jpeg/jpeg_common.c
sophgo-forum-service 80d4596c1b osdrv: weekly rls 2024.05.22
- 3fa71d3, [feat](saradc):Add pm api.
- cfc34b, [fix](pwm):Change pwm setting don't need to disable pwm.

Change-Id: If0f2ef94f163fd534ddcd8a07444081e7bc0fb5a
2024-05-31 14:58:30 +08:00

145 lines
3.9 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2021. All rights reserved.
*
* File Name: jpeg_common.c
* Description: jpeg chip common interface
*/
#include <linux/clk.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/io.h>
#include <linux/version.h>
#include "cvi_jpeg.h"
#include "jpeg_common.h"
void jpu_clk_get(struct cvi_jpu_device *jdev)
{
struct device *dev = jdev->dev;
jdev->clk_axi_video_codec = devm_clk_get(dev, "clk_axi_video_codec");
if (IS_ERR(jdev->clk_axi_video_codec)) {
dev_err(dev, "failed to get clk_axi_video_codec\n");
}
jdev->clk_jpeg = devm_clk_get(dev, "clk_jpeg");
if (IS_ERR(jdev->clk_jpeg)) {
dev_err(dev, "failed to get clk_jpeg\n");
}
jdev->clk_apb_jpeg = devm_clk_get(dev, "clk_apb_jpeg");
if (IS_ERR(jdev->clk_apb_jpeg)) {
dev_err(dev, "failed to get clk_apb_jpeg\n");
}
jdev->clk_vc_src0 = devm_clk_get(dev, "clk_vc_src0");
if (IS_ERR(jdev->clk_vc_src0)) {
dev_err(dev, "failed to get clk_vc_src0\n");
}
jdev->clk_vc_src1 = devm_clk_get(dev, "clk_vc_src1");
if (IS_ERR(jdev->clk_vc_src1)) {
dev_err(dev, "failed to get clk_vc_src1\n");
}
jdev->clk_vc_src2 = devm_clk_get(dev, "clk_vc_src2");
if (IS_ERR(jdev->clk_vc_src2)) {
dev_err(dev, "failed to get clk_vc_src2\n");
}
jdev->clk_cfg_reg_vc = devm_clk_get(dev, "clk_cfg_reg_vc");
if (IS_ERR(jdev->clk_cfg_reg_vc)) {
dev_err(dev, "failed to get clk_cfg_reg_vc\n");
}
}
void jpu_clk_put(struct cvi_jpu_device *jdev)
{
struct device *dev = jdev->dev;
devm_clk_put(dev, jdev->clk_jpeg);
}
#if 0
void jpu_clk_enable(struct cvi_jpu_device *jdev)
{
JPU_DBG_CLK("enable\n");
clk_prepare_enable(jdev->clk_jpeg);
clk_prepare_enable(jdev->clk_apb_jpeg);
clk_prepare_enable(jdev->clk_vc_src0);
clk_prepare_enable(jdev->clk_vc_src1);
clk_prepare_enable(jdev->clk_vc_src2);
clk_prepare_enable(jdev->clk_cfg_reg_vc);
}
void jpu_clk_disable(struct cvi_jpu_device *jdev)
{
if (jpu_mask & JPU_MASK_DISABLE_CLK_GATING)
return;
clk_disable_unprepare(jdev->clk_jpeg);
clk_disable_unprepare(jdev->clk_apb_jpeg);
clk_disable_unprepare(jdev->clk_vc_src0);
clk_disable_unprepare(jdev->clk_vc_src1);
clk_disable_unprepare(jdev->clk_vc_src2);
clk_disable_unprepare(jdev->clk_cfg_reg_vc);
}
void cv1835_config_pll(struct cvi_jpu_device *jdev)
{
unsigned int val;
void __iomem *base_030001;
void __iomem *base_030028;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0))
base_030001 = ioremap(0x03000100, 0x100);
base_030028 = ioremap(0x03002800, 0x100);
#else
base_030001 = ioremap_nocache(0x03000100, 0x100);
base_030028 = ioremap_nocache(0x03002800, 0x100);
#endif
// 0x03002840 = 0x3E //enable synthesizer clock enable
writel(0x3E, base_030028 + 0x40);
// 0x03002854 = 385505882 //set apll synthesizer 104.4480001 M
writel(385505882, base_030028 + 0x54);
//0x03002850 ^= 0x00000001 // bit 0 toggle
val = readl(base_030028 + 0x50);
writel((val ^ 0x1), base_030028 + 0x50);
// 0x0300280C = 0x01108201 // set apll *8/2
writel(0x01108201, base_030028 + 0x0C);
// 0x03002800 &= ~0x00000010 //clear apll pd , apll = 417.792
val = readl(base_030028 + 0x00);
writel((val &= (~0x10)), base_030028 + 0x00);
// 0x03002884 = 421827145 //set cam1 synthesizer 95.45454549 M
writel(421827145, base_030028 + 0x84);
// 0x03002880 ^= 0x00000001 // bit 0 toggle
val = readl(base_030028 + 0x80);
writel((val ^ 0x1), base_030028 + 0x80);
// 0x03002818 = 0x00168000 // set cam1 *11/1
writel(0x00168000, base_030028 + 0x18);
// 0x03002800 &= ~0x00010000 //clear cam1pll pd , cam1pll = 1050
val = readl(base_030028 + 0x00);
writel((val &= (~0x00010000)), base_030028 + 0x00);
// #=========measure apll
// 0x03000140 = 0x00000000
// 0x03000140 = 0x00000049
// Read 0x03000140 >>8 = ~ 2085
// #=========measure cam1pll
// 0x03000140 = 0x00000000
// 0x03000140 = 0x00000079
// Read 0x03000140 >>8 = ~ 5250
iounmap(base_030001);
iounmap(base_030028);
}
#endif