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>
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
371367static 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
439433static 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
476470static 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