99
1010#include <linux/clk.h>
1111#include <linux/gpio/consumer.h>
12+ #include <linux/hw_bitfield.h>
1213#include <linux/mfd/syscon.h>
1314#include <linux/module.h>
1415#include <linux/platform_device.h>
6667#define RK3588_HDMI1_HPD_INT_MSK BIT(15)
6768#define RK3588_HDMI1_HPD_INT_CLR BIT(14)
6869#define RK3588_GRF_SOC_CON7 0x031c
69- #define RK3588_SET_HPD_PATH_MASK GENMASK(13, 12)
70+ #define RK3588_HPD_HDMI0_IO_EN_MASK BIT(12)
71+ #define RK3588_HPD_HDMI1_IO_EN_MASK BIT(13)
7072#define RK3588_GRF_SOC_STATUS1 0x0384
7173#define RK3588_HDMI0_LEVEL_INT BIT(16)
7274#define RK3588_HDMI1_LEVEL_INT BIT(24)
8082#define RK3588_HDMI0_GRANT_SEL BIT(10)
8183#define RK3588_HDMI1_GRANT_SEL BIT(12)
8284
83- #define HIWORD_UPDATE (val , mask ) ((val) | (mask) << 16)
8485#define HOTPLUG_DEBOUNCE_MS 150
8586#define MAX_HDMI_PORT_NUM 2
8687
@@ -185,11 +186,11 @@ static void dw_hdmi_qp_rk3588_setup_hpd(struct dw_hdmi_qp *dw_hdmi, void *data)
185186 u32 val ;
186187
187188 if (hdmi -> port_id )
188- val = HIWORD_UPDATE ( RK3588_HDMI1_HPD_INT_CLR ,
189- RK3588_HDMI1_HPD_INT_CLR | RK3588_HDMI1_HPD_INT_MSK );
189+ val = ( FIELD_PREP_WM16 ( RK3588_HDMI1_HPD_INT_CLR , 1 ) |
190+ FIELD_PREP_WM16 ( RK3588_HDMI1_HPD_INT_MSK , 0 ) );
190191 else
191- val = HIWORD_UPDATE ( RK3588_HDMI0_HPD_INT_CLR ,
192- RK3588_HDMI0_HPD_INT_CLR | RK3588_HDMI0_HPD_INT_MSK );
192+ val = ( FIELD_PREP_WM16 ( RK3588_HDMI0_HPD_INT_CLR , 1 ) |
193+ FIELD_PREP_WM16 ( RK3588_HDMI0_HPD_INT_MSK , 0 ) );
193194
194195 regmap_write (hdmi -> regmap , RK3588_GRF_SOC_CON2 , val );
195196}
@@ -218,8 +219,8 @@ static void dw_hdmi_qp_rk3576_setup_hpd(struct dw_hdmi_qp *dw_hdmi, void *data)
218219 struct rockchip_hdmi_qp * hdmi = (struct rockchip_hdmi_qp * )data ;
219220 u32 val ;
220221
221- val = HIWORD_UPDATE ( RK3576_HDMI_HPD_INT_CLR ,
222- RK3576_HDMI_HPD_INT_CLR | RK3576_HDMI_HPD_INT_MSK );
222+ val = ( FIELD_PREP_WM16 ( RK3576_HDMI_HPD_INT_CLR , 1 ) |
223+ FIELD_PREP_WM16 ( RK3576_HDMI_HPD_INT_MSK , 0 ) );
223224
224225 regmap_write (hdmi -> regmap , RK3576_IOC_MISC_CON0 , val );
225226 regmap_write (hdmi -> regmap , 0xa404 , 0xffff0102 );
@@ -254,7 +255,7 @@ static irqreturn_t dw_hdmi_qp_rk3576_hardirq(int irq, void *dev_id)
254255
255256 regmap_read (hdmi -> regmap , RK3576_IOC_HDMI_HPD_STATUS , & intr_stat );
256257 if (intr_stat ) {
257- val = HIWORD_UPDATE (RK3576_HDMI_HPD_INT_MSK , RK3576_HDMI_HPD_INT_MSK );
258+ val = FIELD_PREP_WM16 (RK3576_HDMI_HPD_INT_MSK , 1 );
258259
259260 regmap_write (hdmi -> regmap , RK3576_IOC_MISC_CON0 , val );
260261 return IRQ_WAKE_THREAD ;
@@ -273,12 +274,12 @@ static irqreturn_t dw_hdmi_qp_rk3576_irq(int irq, void *dev_id)
273274 if (!intr_stat )
274275 return IRQ_NONE ;
275276
276- val = HIWORD_UPDATE (RK3576_HDMI_HPD_INT_CLR , RK3576_HDMI_HPD_INT_CLR );
277+ val = FIELD_PREP_WM16 (RK3576_HDMI_HPD_INT_CLR , 1 );
277278 regmap_write (hdmi -> regmap , RK3576_IOC_MISC_CON0 , val );
278279 mod_delayed_work (system_wq , & hdmi -> hpd_work ,
279280 msecs_to_jiffies (HOTPLUG_DEBOUNCE_MS ));
280281
281- val = HIWORD_UPDATE ( 0 , RK3576_HDMI_HPD_INT_MSK );
282+ val = FIELD_PREP_WM16 ( RK3576_HDMI_HPD_INT_MSK , 0 );
282283 regmap_write (hdmi -> regmap , RK3576_IOC_MISC_CON0 , val );
283284
284285 return IRQ_HANDLED ;
@@ -293,11 +294,9 @@ static irqreturn_t dw_hdmi_qp_rk3588_hardirq(int irq, void *dev_id)
293294
294295 if (intr_stat ) {
295296 if (hdmi -> port_id )
296- val = HIWORD_UPDATE (RK3588_HDMI1_HPD_INT_MSK ,
297- RK3588_HDMI1_HPD_INT_MSK );
297+ val = FIELD_PREP_WM16 (RK3588_HDMI1_HPD_INT_MSK , 1 );
298298 else
299- val = HIWORD_UPDATE (RK3588_HDMI0_HPD_INT_MSK ,
300- RK3588_HDMI0_HPD_INT_MSK );
299+ val = FIELD_PREP_WM16 (RK3588_HDMI0_HPD_INT_MSK , 1 );
301300 regmap_write (hdmi -> regmap , RK3588_GRF_SOC_CON2 , val );
302301 return IRQ_WAKE_THREAD ;
303302 }
@@ -315,20 +314,18 @@ static irqreturn_t dw_hdmi_qp_rk3588_irq(int irq, void *dev_id)
315314 return IRQ_NONE ;
316315
317316 if (hdmi -> port_id )
318- val = HIWORD_UPDATE (RK3588_HDMI1_HPD_INT_CLR ,
319- RK3588_HDMI1_HPD_INT_CLR );
317+ val = FIELD_PREP_WM16 (RK3588_HDMI1_HPD_INT_CLR , 1 );
320318 else
321- val = HIWORD_UPDATE (RK3588_HDMI0_HPD_INT_CLR ,
322- RK3588_HDMI0_HPD_INT_CLR );
319+ val = FIELD_PREP_WM16 (RK3588_HDMI0_HPD_INT_CLR , 1 );
323320 regmap_write (hdmi -> regmap , RK3588_GRF_SOC_CON2 , val );
324321
325322 mod_delayed_work (system_wq , & hdmi -> hpd_work ,
326323 msecs_to_jiffies (HOTPLUG_DEBOUNCE_MS ));
327324
328325 if (hdmi -> port_id )
329- val |= HIWORD_UPDATE ( 0 , RK3588_HDMI1_HPD_INT_MSK );
326+ val |= FIELD_PREP_WM16 ( RK3588_HDMI1_HPD_INT_MSK , 0 );
330327 else
331- val |= HIWORD_UPDATE ( 0 , RK3588_HDMI0_HPD_INT_MSK );
328+ val |= FIELD_PREP_WM16 ( RK3588_HDMI0_HPD_INT_MSK , 0 );
332329 regmap_write (hdmi -> regmap , RK3588_GRF_SOC_CON2 , val );
333330
334331 return IRQ_HANDLED ;
@@ -338,42 +335,43 @@ static void dw_hdmi_qp_rk3576_io_init(struct rockchip_hdmi_qp *hdmi)
338335{
339336 u32 val ;
340337
341- val = HIWORD_UPDATE (RK3576_SCLIN_MASK , RK3576_SCLIN_MASK ) |
342- HIWORD_UPDATE (RK3576_SDAIN_MASK , RK3576_SDAIN_MASK ) |
343- HIWORD_UPDATE (RK3576_HDMI_GRANT_SEL , RK3576_HDMI_GRANT_SEL ) |
344- HIWORD_UPDATE (RK3576_I2S_SEL_MASK , RK3576_I2S_SEL_MASK );
338+ val = FIELD_PREP_WM16 (RK3576_SCLIN_MASK , 1 ) |
339+ FIELD_PREP_WM16 (RK3576_SDAIN_MASK , 1 ) |
340+ FIELD_PREP_WM16 (RK3576_HDMI_GRANT_SEL , 1 ) |
341+ FIELD_PREP_WM16 (RK3576_I2S_SEL_MASK , 1 );
345342
346343 regmap_write (hdmi -> vo_regmap , RK3576_VO0_GRF_SOC_CON14 , val );
347344
348- val = HIWORD_UPDATE ( 0 , RK3576_HDMI_HPD_INT_MSK );
345+ val = FIELD_PREP_WM16 ( RK3576_HDMI_HPD_INT_MSK , 0 );
349346 regmap_write (hdmi -> regmap , RK3576_IOC_MISC_CON0 , val );
350347}
351348
352349static void dw_hdmi_qp_rk3588_io_init (struct rockchip_hdmi_qp * hdmi )
353350{
354351 u32 val ;
355352
356- val = HIWORD_UPDATE (RK3588_SCLIN_MASK , RK3588_SCLIN_MASK ) |
357- HIWORD_UPDATE (RK3588_SDAIN_MASK , RK3588_SDAIN_MASK ) |
358- HIWORD_UPDATE (RK3588_MODE_MASK , RK3588_MODE_MASK ) |
359- HIWORD_UPDATE (RK3588_I2S_SEL_MASK , RK3588_I2S_SEL_MASK );
353+ val = FIELD_PREP_WM16 (RK3588_SCLIN_MASK , 1 ) |
354+ FIELD_PREP_WM16 (RK3588_SDAIN_MASK , 1 ) |
355+ FIELD_PREP_WM16 (RK3588_MODE_MASK , 1 ) |
356+ FIELD_PREP_WM16 (RK3588_I2S_SEL_MASK , 1 );
360357 regmap_write (hdmi -> vo_regmap ,
361358 hdmi -> port_id ? RK3588_GRF_VO1_CON6 : RK3588_GRF_VO1_CON3 ,
362359 val );
363360
364- val = HIWORD_UPDATE (RK3588_SET_HPD_PATH_MASK , RK3588_SET_HPD_PATH_MASK );
361+ val = FIELD_PREP_WM16 (RK3588_HPD_HDMI0_IO_EN_MASK , 1 ) |
362+ FIELD_PREP_WM16 (RK3588_HPD_HDMI1_IO_EN_MASK , 1 );
365363 regmap_write (hdmi -> regmap , RK3588_GRF_SOC_CON7 , val );
366364
367365 if (hdmi -> port_id )
368- val = HIWORD_UPDATE (RK3588_HDMI1_GRANT_SEL , RK3588_HDMI1_GRANT_SEL );
366+ val = FIELD_PREP_WM16 (RK3588_HDMI1_GRANT_SEL , 1 );
369367 else
370- val = HIWORD_UPDATE (RK3588_HDMI0_GRANT_SEL , RK3588_HDMI0_GRANT_SEL );
368+ val = FIELD_PREP_WM16 (RK3588_HDMI0_GRANT_SEL , 1 );
371369 regmap_write (hdmi -> vo_regmap , RK3588_GRF_VO1_CON9 , val );
372370
373371 if (hdmi -> port_id )
374- val = HIWORD_UPDATE (RK3588_HDMI1_HPD_INT_MSK , RK3588_HDMI1_HPD_INT_MSK );
372+ val = FIELD_PREP_WM16 (RK3588_HDMI1_HPD_INT_MSK , 1 );
375373 else
376- val = HIWORD_UPDATE (RK3588_HDMI0_HPD_INT_MSK , RK3588_HDMI0_HPD_INT_MSK );
374+ val = FIELD_PREP_WM16 (RK3588_HDMI0_HPD_INT_MSK , 1 );
377375 regmap_write (hdmi -> regmap , RK3588_GRF_SOC_CON2 , val );
378376}
379377
0 commit comments