unsigned int last_fault2;
        unsigned int last_warn;
        struct gpio_desc *standby_gpio;
+       struct gpio_desc *mute_gpio;
 };
 
 /*
 static int tas6424_mute(struct snd_soc_dai *dai, int mute)
 {
        struct snd_soc_component *component = dai->component;
+       struct tas6424_data *tas6424 = snd_soc_component_get_drvdata(component);
        unsigned int val;
 
        dev_dbg(component->dev, "%s() mute=%d\n", __func__, mute);
 
+       if (tas6424->mute_gpio) {
+               gpiod_set_value_cansleep(tas6424->mute_gpio, mute);
+               return 0;
+       }
+
        if (mute)
                val = TAS6424_ALL_STATE_MUTE;
        else
 {
        struct tas6424_data *tas6424 = snd_soc_component_get_drvdata(component);
        int ret;
+       u8 chan_states;
 
        ret = regulator_bulk_enable(ARRAY_SIZE(tas6424->supplies),
                                    tas6424->supplies);
                return ret;
        }
 
-       snd_soc_component_write(component, TAS6424_CH_STATE_CTRL, TAS6424_ALL_STATE_MUTE);
+       if (tas6424->mute_gpio) {
+               gpiod_set_value_cansleep(tas6424->mute_gpio, 0);
+               /*
+                * channels are muted via the mute pin.  Don't also mute
+                * them via the registers so that subsequent register
+                * access is not necessary to un-mute the channels
+                */
+               chan_states = TAS6424_ALL_STATE_PLAY;
+       } else {
+               chan_states = TAS6424_ALL_STATE_MUTE;
+       }
+       snd_soc_component_write(component, TAS6424_CH_STATE_CTRL, chan_states);
 
        /* any time we come out of HIZ, the output channels automatically run DC
         * load diagnostics, wait here until this completes
                tas6424->standby_gpio = NULL;
        }
 
+       /*
+        * Get control of the mute pin and set it HIGH in order to start with
+        * all the output muted.
+        * Note: The actual pin polarity is taken care of in the GPIO lib
+        * according the polarity specified in the DTS.
+        */
+       tas6424->mute_gpio = devm_gpiod_get_optional(dev, "mute",
+                                                     GPIOD_OUT_HIGH);
+       if (IS_ERR(tas6424->mute_gpio)) {
+               if (PTR_ERR(tas6424->mute_gpio) == -EPROBE_DEFER)
+                       return -EPROBE_DEFER;
+               dev_info(dev, "failed to get nmute GPIO: %ld\n",
+                       PTR_ERR(tas6424->mute_gpio));
+               tas6424->mute_gpio = NULL;
+       }
+
        for (i = 0; i < ARRAY_SIZE(tas6424->supplies); i++)
                tas6424->supplies[i].supply = tas6424_supply_names[i];
        ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(tas6424->supplies),