void sc_hwset_polyphase_vcoef(struct sc_dev *sc, unsigned int yratio, unsigned int cratio, unsigned int filter) { unsigned int phase; unsigned int yfilter = sc_get_scale_filter(yratio); unsigned int cfilter = sc_get_scale_filter(cratio); const __u32 (*sc_coef_4t)[16][2] = sc_coef_4t_org; if (sc_set_blur || filter == SC_FT_BLUR) sc_coef_4t = sc_coef_4t_blur1; BUG_ON(yfilter >= ARRAY_SIZE(sc_coef_4t_org)); BUG_ON(cfilter >= ARRAY_SIZE(sc_coef_4t_org)); BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t_org[yfilter]) < 9); BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t_org[cfilter]) < 9); /* reset value of the coefficient registers are the 8:8 table */ for (phase = 0; phase < 9; phase++) { __raw_writel(sc_coef_4t[yfilter][phase][1], sc->regs + SCALER_YVCOEF + phase * 8); __raw_writel(sc_coef_4t[yfilter][phase][0], sc->regs + SCALER_YVCOEF + phase * 8 + 4); } for (phase = 0; phase < 9; phase++) { __raw_writel(sc_coef_4t[cfilter][phase][1], sc->regs + SCALER_CVCOEF + phase * 8); __raw_writel(sc_coef_4t[cfilter][phase][0], sc->regs + SCALER_CVCOEF + phase * 8 + 4); } }
void sc_hwset_polyphase_vcoef(struct sc_dev *sc, unsigned int yratio, unsigned int cratio) { unsigned int phase; unsigned int yfilter = sc_get_scale_filter(yratio); unsigned int cfilter = sc_get_scale_filter(cratio); BUG_ON(yfilter >= ARRAY_SIZE(sc_coef_4t)); BUG_ON(cfilter >= ARRAY_SIZE(sc_coef_4t)); BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t[yfilter]) < 9); BUILD_BUG_ON(ARRAY_SIZE(sc_coef_4t[cfilter]) < 9); /* reset value of the coefficient registers are the 8:8 table */ if (IS_ENABLED(CONFIG_SCALER_NO_SOFTRST) || (yfilter != 0)) { for (phase = 0; phase < 9; phase++) { writel(sc_coef_4t[yfilter][phase][1], sc->regs + SCALER_YVCOEF + phase * 8); writel(sc_coef_4t[yfilter][phase][0], sc->regs + SCALER_YVCOEF + phase * 8 + 4); } } if (IS_ENABLED(CONFIG_SCALER_NO_SOFTRST) || (cfilter != 0)) { for (phase = 0; phase < 9; phase++) { writel(sc_coef_4t[cfilter][phase][1], sc->regs + SCALER_CVCOEF + phase * 8); writel(sc_coef_4t[cfilter][phase][0], sc->regs + SCALER_CVCOEF + phase * 8 + 4); } } }
void sc_hwset_polyphase_hcoef(struct sc_dev *sc, unsigned int yratio, unsigned int cratio, unsigned int filter) { unsigned int phase; unsigned int yfilter = sc_get_scale_filter(yratio); unsigned int cfilter = sc_get_scale_filter(cratio); const __u32 (*sc_coef_8t)[16][4] = sc_coef_8t_org; if (sc_set_blur || filter == SC_FT_BLUR) sc_coef_8t = sc_coef_8t_blur1; BUG_ON(yfilter >= ARRAY_SIZE(sc_coef_8t_org)); BUG_ON(cfilter >= ARRAY_SIZE(sc_coef_8t_org)); BUILD_BUG_ON(ARRAY_SIZE(sc_coef_8t_org[yfilter]) < 9); BUILD_BUG_ON(ARRAY_SIZE(sc_coef_8t_org[cfilter]) < 9); for (phase = 0; phase < 9; phase++) { __raw_writel(sc_coef_8t[yfilter][phase][3], sc->regs + SCALER_YHCOEF + phase * 16); __raw_writel(sc_coef_8t[yfilter][phase][2], sc->regs + SCALER_YHCOEF + phase * 16 + 4); __raw_writel(sc_coef_8t[yfilter][phase][1], sc->regs + SCALER_YHCOEF + phase * 16 + 8); __raw_writel(sc_coef_8t[yfilter][phase][0], sc->regs + SCALER_YHCOEF + phase * 16 + 12); } for (phase = 0; phase < 9; phase++) { __raw_writel(sc_coef_8t[cfilter][phase][3], sc->regs + SCALER_CHCOEF + phase * 16); __raw_writel(sc_coef_8t[cfilter][phase][2], sc->regs + SCALER_CHCOEF + phase * 16 + 4); __raw_writel(sc_coef_8t[cfilter][phase][1], sc->regs + SCALER_CHCOEF + phase * 16 + 8); __raw_writel(sc_coef_8t[cfilter][phase][0], sc->regs + SCALER_CHCOEF + phase * 16 + 12); } }