Skip to content

Commit 63df37f

Browse files
Nicolas FrattaroliYuryNorov
authored andcommitted
drm/rockchip: dw_hdmi: switch to FIELD_PREP_WM16* macros
The era of hand-rolled HIWORD_UPDATE macros is over, at least for those drivers that use constant masks. Remove this driver's very own HIWORD_UPDATE macro, and replace all instances of it with equivalent instantiations of FIELD_PREP_WM16 or FIELD_PREP_WM16_CONST, depending on whether it's in an initializer. This gives us better error checking, and a centrally agreed upon signature for this macro, to ease in code comprehension. Because FIELD_PREP_WM16/FIELD_PREP_WM16_CONST shifts the value to the mask (like FIELD_PREP et al do), a lot of macro instantiations get easier to read. This was tested on an RK3568 ODROID M1, as well as an RK3399 ROCKPro64. Reviewed-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Tested-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com> Reviewed-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Yury Norov (NVIDIA) <yury.norov@gmail.com>
1 parent a104de6 commit 63df37f

1 file changed

Lines changed: 36 additions & 44 deletions

File tree

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c

Lines changed: 36 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
#include <linux/clk.h>
7+
#include <linux/hw_bitfield.h>
78
#include <linux/mfd/syscon.h>
89
#include <linux/module.h>
910
#include <linux/platform_device.h>
@@ -54,8 +55,6 @@
5455
#define RK3568_HDMI_SDAIN_MSK BIT(15)
5556
#define RK3568_HDMI_SCLIN_MSK BIT(14)
5657

57-
#define HIWORD_UPDATE(val, mask) (val | (mask) << 16)
58-
5958
/**
6059
* struct rockchip_hdmi_chip_data - splite the grf setting of kind of chips
6160
* @lcdsel_grf_reg: grf register offset of lcdc select
@@ -355,17 +354,14 @@ static void dw_hdmi_rk3228_setup_hpd(struct dw_hdmi *dw_hdmi, void *data)
355354

356355
dw_hdmi_phy_setup_hpd(dw_hdmi, data);
357356

358-
regmap_write(hdmi->regmap,
359-
RK3228_GRF_SOC_CON6,
360-
HIWORD_UPDATE(RK3228_HDMI_HPD_VSEL | RK3228_HDMI_SDA_VSEL |
361-
RK3228_HDMI_SCL_VSEL,
362-
RK3228_HDMI_HPD_VSEL | RK3228_HDMI_SDA_VSEL |
363-
RK3228_HDMI_SCL_VSEL));
364-
365-
regmap_write(hdmi->regmap,
366-
RK3228_GRF_SOC_CON2,
367-
HIWORD_UPDATE(RK3228_HDMI_SDAIN_MSK | RK3228_HDMI_SCLIN_MSK,
368-
RK3228_HDMI_SDAIN_MSK | RK3228_HDMI_SCLIN_MSK));
357+
regmap_write(hdmi->regmap, RK3228_GRF_SOC_CON6,
358+
FIELD_PREP_WM16(RK3228_HDMI_HPD_VSEL, 1) |
359+
FIELD_PREP_WM16(RK3228_HDMI_SDA_VSEL, 1) |
360+
FIELD_PREP_WM16(RK3228_HDMI_SCL_VSEL, 1));
361+
362+
regmap_write(hdmi->regmap, RK3228_GRF_SOC_CON2,
363+
FIELD_PREP_WM16(RK3228_HDMI_SDAIN_MSK, 1) |
364+
FIELD_PREP_WM16(RK3328_HDMI_SCLIN_MSK, 1));
369365
}
370366

371367
static enum drm_connector_status
@@ -377,15 +373,13 @@ dw_hdmi_rk3328_read_hpd(struct dw_hdmi *dw_hdmi, void *data)
377373
status = dw_hdmi_phy_read_hpd(dw_hdmi, data);
378374

379375
if (status == connector_status_connected)
380-
regmap_write(hdmi->regmap,
381-
RK3328_GRF_SOC_CON4,
382-
HIWORD_UPDATE(RK3328_HDMI_SDA_5V | RK3328_HDMI_SCL_5V,
383-
RK3328_HDMI_SDA_5V | RK3328_HDMI_SCL_5V));
376+
regmap_write(hdmi->regmap, RK3328_GRF_SOC_CON4,
377+
FIELD_PREP_WM16(RK3328_HDMI_SDA_5V, 1) |
378+
FIELD_PREP_WM16(RK3328_HDMI_SCL_5V, 1));
384379
else
385-
regmap_write(hdmi->regmap,
386-
RK3328_GRF_SOC_CON4,
387-
HIWORD_UPDATE(0, RK3328_HDMI_SDA_5V |
388-
RK3328_HDMI_SCL_5V));
380+
regmap_write(hdmi->regmap, RK3328_GRF_SOC_CON4,
381+
FIELD_PREP_WM16(RK3328_HDMI_SDA_5V, 0) |
382+
FIELD_PREP_WM16(RK3328_HDMI_SCL_5V, 0));
389383
return status;
390384
}
391385

@@ -396,21 +390,21 @@ static void dw_hdmi_rk3328_setup_hpd(struct dw_hdmi *dw_hdmi, void *data)
396390
dw_hdmi_phy_setup_hpd(dw_hdmi, data);
397391

398392
/* Enable and map pins to 3V grf-controlled io-voltage */
399-
regmap_write(hdmi->regmap,
400-
RK3328_GRF_SOC_CON4,
401-
HIWORD_UPDATE(0, RK3328_HDMI_HPD_SARADC | RK3328_HDMI_CEC_5V |
402-
RK3328_HDMI_SDA_5V | RK3328_HDMI_SCL_5V |
403-
RK3328_HDMI_HPD_5V));
404-
regmap_write(hdmi->regmap,
405-
RK3328_GRF_SOC_CON3,
406-
HIWORD_UPDATE(0, RK3328_HDMI_SDA5V_GRF | RK3328_HDMI_SCL5V_GRF |
407-
RK3328_HDMI_HPD5V_GRF |
408-
RK3328_HDMI_CEC5V_GRF));
409-
regmap_write(hdmi->regmap,
410-
RK3328_GRF_SOC_CON2,
411-
HIWORD_UPDATE(RK3328_HDMI_SDAIN_MSK | RK3328_HDMI_SCLIN_MSK,
412-
RK3328_HDMI_SDAIN_MSK | RK3328_HDMI_SCLIN_MSK |
413-
RK3328_HDMI_HPD_IOE));
393+
regmap_write(hdmi->regmap, RK3328_GRF_SOC_CON4,
394+
FIELD_PREP_WM16(RK3328_HDMI_HPD_SARADC, 0) |
395+
FIELD_PREP_WM16(RK3328_HDMI_CEC_5V, 0) |
396+
FIELD_PREP_WM16(RK3328_HDMI_SDA_5V, 0) |
397+
FIELD_PREP_WM16(RK3328_HDMI_SCL_5V, 0) |
398+
FIELD_PREP_WM16(RK3328_HDMI_HPD_5V, 0));
399+
regmap_write(hdmi->regmap, RK3328_GRF_SOC_CON3,
400+
FIELD_PREP_WM16(RK3328_HDMI_SDA5V_GRF, 0) |
401+
FIELD_PREP_WM16(RK3328_HDMI_SCL5V_GRF, 0) |
402+
FIELD_PREP_WM16(RK3328_HDMI_HPD5V_GRF, 0) |
403+
FIELD_PREP_WM16(RK3328_HDMI_CEC5V_GRF, 0));
404+
regmap_write(hdmi->regmap, RK3328_GRF_SOC_CON2,
405+
FIELD_PREP_WM16(RK3328_HDMI_SDAIN_MSK, 1) |
406+
FIELD_PREP_WM16(RK3328_HDMI_SCLIN_MSK, 1) |
407+
FIELD_PREP_WM16(RK3328_HDMI_HPD_IOE, 0));
414408

415409
dw_hdmi_rk3328_read_hpd(dw_hdmi, data);
416410
}
@@ -438,8 +432,8 @@ static const struct dw_hdmi_plat_data rk3228_hdmi_drv_data = {
438432

439433
static struct rockchip_hdmi_chip_data rk3288_chip_data = {
440434
.lcdsel_grf_reg = RK3288_GRF_SOC_CON6,
441-
.lcdsel_big = HIWORD_UPDATE(0, RK3288_HDMI_LCDC_SEL),
442-
.lcdsel_lit = HIWORD_UPDATE(RK3288_HDMI_LCDC_SEL, RK3288_HDMI_LCDC_SEL),
435+
.lcdsel_big = FIELD_PREP_WM16_CONST(RK3288_HDMI_LCDC_SEL, 0),
436+
.lcdsel_lit = FIELD_PREP_WM16_CONST(RK3288_HDMI_LCDC_SEL, 1),
443437
.max_tmds_clock = 340000,
444438
};
445439

@@ -475,8 +469,8 @@ static const struct dw_hdmi_plat_data rk3328_hdmi_drv_data = {
475469

476470
static struct rockchip_hdmi_chip_data rk3399_chip_data = {
477471
.lcdsel_grf_reg = RK3399_GRF_SOC_CON20,
478-
.lcdsel_big = HIWORD_UPDATE(0, RK3399_HDMI_LCDC_SEL),
479-
.lcdsel_lit = HIWORD_UPDATE(RK3399_HDMI_LCDC_SEL, RK3399_HDMI_LCDC_SEL),
472+
.lcdsel_big = FIELD_PREP_WM16_CONST(RK3399_HDMI_LCDC_SEL, 0),
473+
.lcdsel_lit = FIELD_PREP_WM16_CONST(RK3399_HDMI_LCDC_SEL, 1),
480474
.max_tmds_clock = 594000,
481475
};
482476

@@ -589,10 +583,8 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
589583

590584
if (hdmi->chip_data == &rk3568_chip_data) {
591585
regmap_write(hdmi->regmap, RK3568_GRF_VO_CON1,
592-
HIWORD_UPDATE(RK3568_HDMI_SDAIN_MSK |
593-
RK3568_HDMI_SCLIN_MSK,
594-
RK3568_HDMI_SDAIN_MSK |
595-
RK3568_HDMI_SCLIN_MSK));
586+
FIELD_PREP_WM16(RK3568_HDMI_SDAIN_MSK, 1) |
587+
FIELD_PREP_WM16(RK3568_HDMI_SCLIN_MSK, 1));
596588
}
597589

598590
drm_encoder_helper_add(encoder, &dw_hdmi_rockchip_encoder_helper_funcs);

0 commit comments

Comments
 (0)