Optional properties:
 
+  - clocks, clock-names: Clock specifier for XTI input clock.
+       If specified, the clock will be enabled when the codec is probed,
+       and disabled when it is removed. The 'clock-names' must be set to 'xti'.
+
   -  st,output-conf: number, Selects the output configuration:
        0: 2-channel (full-bridge) power, 2-channel data-out
        1: 2 (half-bridge). 1 (full-bridge) on-board power
 codec: sta32x@38 {
        compatible = "st,sta32x";
        reg = <0x1c>;
+       clocks = <&clock>;
+       clock-names = "xti";
        reset-gpios = <&gpio1 19 0>;
        power-down-gpios = <&gpio1 16 0>;
        st,output-conf = /bits/ 8  <0x3>;       // set output to 2-channel
 
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/init.h>
+#include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/pm.h>
 #include <linux/i2c.h>
 /* codec private data */
 struct sta32x_priv {
        struct regmap *regmap;
+       struct clk *xti_clk;
        struct regulator_bulk_data supplies[ARRAY_SIZE(sta32x_supply_names)];
        struct snd_soc_component *component;
        struct sta32x_platform_data *pdata;
        struct sta32x_priv *sta32x = snd_soc_component_get_drvdata(component);
        struct sta32x_platform_data *pdata = sta32x->pdata;
        int i, ret = 0, thermal = 0;
+
+       sta32x->component = component;
+
+       if (sta32x->xti_clk) {
+               ret = clk_prepare_enable(sta32x->xti_clk);
+               if (ret != 0) {
+                       dev_err(component->dev,
+                               "Failed to enable clock: %d\n", ret);
+                       return ret;
+               }
+       }
+
        ret = regulator_bulk_enable(ARRAY_SIZE(sta32x->supplies),
                                    sta32x->supplies);
        if (ret != 0) {
 
        sta32x_watchdog_stop(sta32x);
        regulator_bulk_disable(ARRAY_SIZE(sta32x->supplies), sta32x->supplies);
+
+       if (sta32x->xti_clk)
+               clk_disable_unprepare(sta32x->xti_clk);
 }
 
 static const struct snd_soc_component_driver sta32x_component = {
        }
 #endif
 
+       /* Clock */
+       sta32x->xti_clk = devm_clk_get(dev, "xti");
+       if (IS_ERR(sta32x->xti_clk)) {
+               ret = PTR_ERR(sta32x->xti_clk);
+
+               if (ret == -EPROBE_DEFER)
+                       return ret;
+
+               sta32x->xti_clk = NULL;
+       }
+
        /* GPIOs */
        sta32x->gpiod_nreset = devm_gpiod_get_optional(dev, "reset",
                                                       GPIOD_OUT_LOW);