The imx_fracn_gppll_rate_table rate table is:
static const struct imx_fracn_gppll_rate_table fracn_tbl[] = {
PLL_FRACN_GP(1700000000U, 141, 0, 0, 1, 2),
PLL_FRACN_GP(1400000000U, 175, 0, 0, 1, 3),
PLL_FRACN_GP(1039500000U, 173, 25, 100, 1, 4),
PLL_FRACN_GP(900000000U, 150, 0, 0, 1, 4),
PLL_FRACN_GP(800000000U, 200, 0, 0, 1, 6),
PLL_FRACN_GP(650000000U, 162, 50, 100, 0, 6),
PLL_FRACN_GP(594000000U, 198, 0, 1, 0, 8),
PLL_FRACN_GP(560000000U, 140, 0, 1, 0, 6),
PLL_FRACN_GP(498000000U, 166, 0, 1, 0, 8),
PLL_FRACN_GP(484000000U, 121, 0, 1, 0, 6),
PLL_FRACN_GP(445333333U, 167, 0, 1, 0, 9),
PLL_FRACN_GP(400000000U, 200, 0, 1, 0, 12),
PLL_FRACN_GP(393216000U, 163, 84, 100, 0, 10),
PLL_FRACN_GP(300000000U, 150, 0, 1, 0, 12)
};
My device tree has the following:
&lcdif {
status = "okay";
assigned-clock-rates = <445333333>, <148444444>, <400000000>, <133333333>;
};
and is based on the node in imx93.dtsi:
lcdif: lcd-controller@4ae30000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx93-lcdif";
reg = <0x4ae30000 0x10000>;
interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
fsl,gpr = <&media_blk_ctrl>;
clocks = <&clk IMX93_CLK_MEDIA_DISP_PIX>,
<&clk IMX93_CLK_MEDIA_AXI>,
<&clk IMX93_CLK_LCDIF_GATE>;
clock-names = "pix", "disp-axi", "disp-apb";
assigned-clocks = <&clk IMX93_CLK_VIDEO_PLL>,
<&clk IMX93_CLK_MEDIA_DISP_PIX>,
<&clk IMX93_CLK_MEDIA_AXI>,
<&clk IMX93_CLK_MEDIA_APB>;
assigned-clock-parents = <&clk IMX93_CLK_24M>,
<&clk IMX93_CLK_VIDEO_PLL>,
<&clk IMX93_CLK_SYS_PLL_PFD1>,
<&clk IMX93_CLK_SYS_PLL_PFD1_DIV2>;
power-domains = <&media_blk_ctrl IMX93_MEDIABLK_PD_LCDIF>;
status = "disabled";
lcdif_disp: port@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
lcdif_to_dsi: endpoint@0 {
reg = <0>;
remote-endpoint = <&dsi_to_lcdif>;
};
lcdif_to_ldb: endpoint@1 {
reg = <1>;
remote-endpoint = <&ldb_ch0>;
};
lcdif_to_dpi: endpoint@2 {
reg = <2>;
remote-endpoint = <&dpi_to_lcdif>;
};
};
};
Can you please explain
1. How should I calculate the assigned-clock-rates in the device tree?
2. How do those assigned-clock-rates relate to the imx_fracn_gppll_rate_table?
3. What is the meaning behind the values in the imx_fracn_gppll_rate_table?
4. How can I add/modify rows in the imx_fracn_gppll_rate_table?