|
55 | 55 | #define DW_UART_QUIRK_SKIP_SET_RATE BIT(2) |
56 | 56 | #define DW_UART_QUIRK_IS_DMA_FC BIT(3) |
57 | 57 | #define DW_UART_QUIRK_APMC0D08 BIT(4) |
| 58 | +#define DW_UART_QUIRK_CPR_VALUE BIT(5) |
| 59 | + |
| 60 | +struct dw8250_platform_data { |
| 61 | + u8 usr_reg; |
| 62 | + u32 cpr_value; |
| 63 | + unsigned int quirks; |
| 64 | +}; |
| 65 | + |
| 66 | +struct dw8250_data { |
| 67 | + struct dw8250_port_data data; |
| 68 | + const struct dw8250_platform_data *pdata; |
| 69 | + |
| 70 | + int msr_mask_on; |
| 71 | + int msr_mask_off; |
| 72 | + struct clk *clk; |
| 73 | + struct clk *pclk; |
| 74 | + struct notifier_block clk_notifier; |
| 75 | + struct work_struct clk_work; |
| 76 | + struct reset_control *rst; |
| 77 | + |
| 78 | + unsigned int skip_autocfg:1; |
| 79 | + unsigned int uart_16550_compatible:1; |
| 80 | +}; |
| 81 | + |
| 82 | +static inline struct dw8250_data *to_dw8250_data(struct dw8250_port_data *data) |
| 83 | +{ |
| 84 | + return container_of(data, struct dw8250_data, data); |
| 85 | +} |
58 | 86 |
|
59 | 87 | static inline struct dw8250_data *clk_to_dw8250_data(struct notifier_block *nb) |
60 | 88 | { |
@@ -432,6 +460,10 @@ static void dw8250_prepare_rx_dma(struct uart_8250_port *p) |
432 | 460 | static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data) |
433 | 461 | { |
434 | 462 | unsigned int quirks = data->pdata ? data->pdata->quirks : 0; |
| 463 | + u32 cpr_value = data->pdata ? data->pdata->cpr_value : 0; |
| 464 | + |
| 465 | + if (quirks & DW_UART_QUIRK_CPR_VALUE) |
| 466 | + data->data.cpr_value = cpr_value; |
435 | 467 |
|
436 | 468 | #ifdef CONFIG_64BIT |
437 | 469 | if (quirks & DW_UART_QUIRK_OCTEON) { |
@@ -714,8 +746,8 @@ static const struct dw8250_platform_data dw8250_armada_38x_data = { |
714 | 746 |
|
715 | 747 | static const struct dw8250_platform_data dw8250_renesas_rzn1_data = { |
716 | 748 | .usr_reg = DW_UART_USR, |
717 | | - .cpr_val = 0x00012f32, |
718 | | - .quirks = DW_UART_QUIRK_IS_DMA_FC, |
| 749 | + .cpr_value = 0x00012f32, |
| 750 | + .quirks = DW_UART_QUIRK_CPR_VALUE | DW_UART_QUIRK_IS_DMA_FC, |
719 | 751 | }; |
720 | 752 |
|
721 | 753 | static const struct dw8250_platform_data dw8250_starfive_jh7100_data = { |
|
0 commit comments