#define MCHP_I2SMCC_MRA_DATALENGTH_8_BITS_COMPACT      (7 << 1)
 
 #define MCHP_I2SMCC_MRA_WIRECFG_MASK           GENMASK(5, 4)
+#define MCHP_I2SMCC_MRA_WIRECFG_TDM(pin)       (((pin) << 4) & \
+                                                MCHP_I2SMCC_MRA_WIRECFG_MASK)
 #define MCHP_I2SMCC_MRA_WIRECFG_I2S_1_TDM_0    (0 << 4)
 #define MCHP_I2SMCC_MRA_WIRECFG_I2S_2_TDM_1    (1 << 4)
 #define MCHP_I2SMCC_MRA_WIRECFG_I2S_4_TDM_2    (2 << 4)
        unsigned int                            frame_length;
        int                                     tdm_slots;
        int                                     channels;
+       u8                                      tdm_data_pair;
        unsigned int                            gclk_use:1;
        unsigned int                            gclk_running:1;
        unsigned int                            tx_rdy:1;
                if (!frame_length)
                        frame_length = 2 * params_physical_width(params);
        } else if (dev->fmt & SND_SOC_DAIFMT_DSP_A) {
+               mra |= MCHP_I2SMCC_MRA_WIRECFG_TDM(dev->tdm_data_pair);
+
                if (dev->tdm_slots) {
                        if (channels % 2 && channels * 2 <= dev->tdm_slots) {
                                /*
 MODULE_DEVICE_TABLE(of, mchp_i2s_mcc_dt_ids);
 #endif
 
+static int mchp_i2s_mcc_soc_data_parse(struct platform_device *pdev,
+                                      struct mchp_i2s_mcc_dev *dev)
+{
+       int err;
+
+       if (!dev->soc) {
+               dev_err(&pdev->dev, "failed to get soc data\n");
+               return -ENODEV;
+       }
+
+       if (dev->soc->data_pin_pair_num == 1)
+               return 0;
+
+       err = of_property_read_u8(pdev->dev.of_node, "microchip,tdm-data-pair",
+                                 &dev->tdm_data_pair);
+       if (err < 0 && err != -EINVAL) {
+               dev_err(&pdev->dev,
+                       "bad property data for 'microchip,tdm-data-pair': %d",
+                       err);
+               return err;
+       }
+       if (err == -EINVAL) {
+               dev_info(&pdev->dev,
+                        "'microchip,tdm-data-pair' not found; assuming DIN/DOUT 0 for TDM\n");
+               dev->tdm_data_pair = 0;
+       } else {
+               if (dev->tdm_data_pair > dev->soc->data_pin_pair_num - 1) {
+                       dev_err(&pdev->dev,
+                               "invalid value for 'microchip,tdm-data-pair': %d\n",
+                               dev->tdm_data_pair);
+                       return -EINVAL;
+               }
+               dev_dbg(&pdev->dev, "TMD format on DIN/DOUT %d pins\n",
+                       dev->tdm_data_pair);
+       }
+
+       return 0;
+}
+
 static int mchp_i2s_mcc_probe(struct platform_device *pdev)
 {
        struct mchp_i2s_mcc_dev *dev;
        }
 
        dev->soc = of_device_get_match_data(&pdev->dev);
-       if (!dev->soc) {
-               dev_err(&pdev->dev, "failed to get soc data\n");
-               return -ENODEV;
-       }
+       err = mchp_i2s_mcc_soc_data_parse(pdev, dev);
+       if (err < 0)
+               return err;
+
        dev->dev = &pdev->dev;
        dev->regmap = regmap;
        platform_set_drvdata(pdev, dev);