misc: rk628: fix 64-bit division error when compiling arm platform

Type: Fix
Redmine ID: N/A
Associated modifications: N/A
Test: N/A

Signed-off-by: Zhibin Huang <zhibin.huang@rock-chips.com>
Change-Id: I1bf1319de734979735ff3af95bd83f12ffcd3c5c
This commit is contained in:
Zhibin Huang
2024-04-25 09:14:54 +08:00
parent e8ce498b96
commit f12b2d73bb
3 changed files with 19 additions and 14 deletions

View File

@@ -921,8 +921,7 @@ static void rk628_show_resolution(struct seq_file *s)
src_vtotal = src_mode->vtotal;
/* get fps */
fps = clk_rx_read * 1000;
do_div(fps, src_htotal * src_vtotal);
fps = clk_rx_read * 1000 / (src_htotal * src_vtotal);
/* print */
DEBUG_PRINT(" Display mode: %dx%dp%d,dclk[%u]\n", src_hactive,
@@ -955,7 +954,8 @@ static void rk628f_show_rgbrx_resolution(struct seq_file *s)
imodet_clk = rk628_cru_clk_get_rate(rk628, CGU_CLK_IMODET);
clk_rx_read = imodet_clk * rgb_rx_clkrate / (rgb_rx_eval_time + 1);
clk_rx_read = imodet_clk * rgb_rx_clkrate;
do_div(clk_rx_read, rgb_rx_eval_time + 1);
do_div(clk_rx_read, 1000);
/* get timing */
@@ -976,8 +976,7 @@ static void rk628f_show_rgbrx_resolution(struct seq_file *s)
src_vtotal = val & 0xffff;
/* get fps */
fps = clk_rx_read * 1000;
do_div(fps, src_htotal * src_vtotal);
fps = clk_rx_read * 1000 / (src_htotal * src_vtotal);
/* print */
DEBUG_PRINT(" Display mode: %dx%dp%d,dclk[%llu]\n", src_hactive,
@@ -1028,8 +1027,7 @@ static void rk628_show_output_resolution(struct seq_file *s)
dsp_vact_end = val & 0xfff;
/* get fps */
fps = sclk_vop * 1000;
do_div(fps, dsp_vtotal * dsp_htotal);
fps = sclk_vop * 1000 / (dsp_vtotal * dsp_htotal);
/* print */
DEBUG_PRINT(" Display mode: %dx%dp%d,dclk[%llu]\n",

View File

@@ -247,7 +247,8 @@ static void rk628_hdmirx_audio_clk_set_rate(struct rk628_hdmirx *hdmirx, u32 rat
static void rk628_hdmirx_audio_clk_ppm_inc(struct rk628_hdmirx *hdmirx, int ppm)
{
int delta, rate, inc;
u64 delta;
int rate, inc;
rate = hdmirx->audio_state.hdmirx_aud_clkrate;
if (ppm < 0) {
@@ -255,11 +256,13 @@ static void rk628_hdmirx_audio_clk_ppm_inc(struct rk628_hdmirx *hdmirx, int ppm)
inc = -1;
} else
inc = 1;
delta = (uint64_t)((uint64_t)rate * ppm + 500000) / 1000000;
delta = (uint64_t)((uint64_t)rate * ppm + 500000);
do_div(delta, 1000000);
delta *= inc;
rate += delta;
rate += (int)delta;
dev_dbg(hdmirx->rk628->dev, "%s: %u to %u(delta:%d)\n",
__func__, hdmirx->audio_state.hdmirx_aud_clkrate, rate, delta);
__func__, hdmirx->audio_state.hdmirx_aud_clkrate, rate, (int)delta);
rk628_cru_clk_set_rate(hdmirx->rk628, CGU_CLK_HDMIRX_AUD, rate);
hdmirx->audio_state.hdmirx_aud_clkrate = rate;
}
@@ -674,7 +677,7 @@ static void rk628_hdmirx_get_timing(struct rk628 *rk628)
u64 tmp_data;
u32 interlaced;
u32 hfrontporch, hsync, hbackporch, vfrontporch, vsync, vbackporch;
unsigned long long pixelclock;
unsigned long long pixelclock, clock;
unsigned long flags = 0;
struct rk628_hdmirx *hdmirx = rk628->hdmirx;
@@ -770,7 +773,10 @@ static void rk628_hdmirx_get_timing(struct rk628 *rk628)
pixelclock /= 2;
}
hdmirx->mode.clock = pixelclock / 1000;
clock = pixelclock;
do_div(clock, 1000);
hdmirx->mode.clock = clock;
hdmirx->mode.hdisplay = hact;
hdmirx->mode.hstart = hdmirx->mode.hdisplay + hfrontporch;
hdmirx->mode.hend = hdmirx->mode.hstart + hsync;

View File

@@ -57,7 +57,8 @@ static int rk628_rgb_resolution_show(struct seq_file *s, void *data)
rgb_rx_clkrate = val & RGB_RX_CLKRATE_MASK;
ref_clk = rk628_cru_clk_get_rate(rk628, CGU_CLK_IMODET);
pixel_clk = ref_clk * rgb_rx_clkrate / (rgb_rx_eval_time + 1);
pixel_clk = ref_clk * rgb_rx_clkrate;
do_div(pixel_clk, rgb_rx_eval_time + 1);
if (rk628_input_is_rgb(rk628)) {
rk628_i2c_read(rk628, GRF_RGB_RX_DBG_MEAS4, &val);