.hw.init = &(struct clk_init_data){
                /* sometimes also called "HPLL" or "HPLL PLL" */
                .name = "hdmi_pll_dco",
-               .ops = &meson_clk_pll_ro_ops,
+               .ops = &meson_clk_pll_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &hdmi_pll_dco_in.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "hdmi_pll_lvds_out",
-               .ops = &clk_regmap_divider_ro_ops,
+               .ops = &clk_regmap_divider_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_hdmi_pll_dco.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "hdmi_pll_hdmi_out",
-               .ops = &clk_regmap_divider_ro_ops,
+               .ops = &clk_regmap_divider_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_hdmi_pll_dco.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll_lvds_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_hdmi_pll_lvds_out.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll_in_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                /*
                 * TODO: depending on the SoC there is also a second parent:
                 * Meson8: unknown
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll_in_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vid_pll_in_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll_pre_div",
-               .ops = &clk_regmap_divider_ro_ops,
+               .ops = &clk_regmap_divider_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vid_pll_in_en.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll_post_div",
-               .ops = &clk_regmap_divider_ro_ops,
+               .ops = &clk_regmap_divider_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vid_pll_pre_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                /* TODO: parent 0x2 is vid_pll_pre_div_mult7_div2 */
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vid_pll_pre_div.hw,
        },
        .hw.init = &(struct clk_init_data){
                .name = "vid_pll_final_div",
-               .ops = &clk_regmap_divider_ro_ops,
+               .ops = &clk_regmap_divider_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vid_pll.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_in_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_in_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_in_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_in_en.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_div1_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_en.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_div2_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_div2_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_div4_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_div4_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_div6_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_div6_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk_div12_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk_div12_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_in_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_in_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_in_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_clk_in_en.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_div1_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_clk_en.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_div2_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_div2_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_div4_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_div4_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_div6_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_div6_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "vclk2_div12_en",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_vclk2_div12_div.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_enct_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk_enc_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk_enc_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_enct",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_cts_enct_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_encp_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk_enc_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk_enc_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_encp",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_cts_encp_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_enci_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk_enc_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk_enc_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_enci",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_cts_enci_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "hdmi_tx_pixel_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk_enc_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk_enc_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "hdmi_tx_pixel",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_hdmi_tx_pixel_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_encl_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk2_enc_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk2_enc_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_encl",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_cts_encl_sel.hw
                },
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_vdac0_sel",
-               .ops = &clk_regmap_mux_ro_ops,
+               .ops = &clk_regmap_mux_ops,
                .parent_hws = meson8b_vclk2_enc_mux_parent_hws,
                .num_parents = ARRAY_SIZE(meson8b_vclk2_enc_mux_parent_hws),
                .flags = CLK_SET_RATE_PARENT,
        },
        .hw.init = &(struct clk_init_data){
                .name = "cts_vdac0",
-               .ops = &clk_regmap_gate_ro_ops,
+               .ops = &clk_regmap_gate_ops,
                .parent_hws = (const struct clk_hw *[]) {
                        &meson8b_cts_vdac0_sel.hw
                },