[media] stk1160: Check whether to use AC97 codec
authorMarcel Hasler <mahasler@gmail.com>
Thu, 15 Dec 2016 22:13:34 +0000 (20:13 -0200)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 3 Feb 2017 13:26:32 +0000 (11:26 -0200)
Some STK1160-based devices use the chip's internal 8-bit ADC. This is
configured through a strap pin. The value of this and other pins can be
read through the POSVA register. If the internal ADC is used, or if
audio is disabled altogether, there's no point trying to setup the AC97
codec.

Signed-off-by: Marcel Hasler <mahasler@gmail.com>
Acked-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/usb/stk1160/stk1160-ac97.c
drivers/media/usb/stk1160/stk1160-core.c
drivers/media/usb/stk1160/stk1160-reg.h

index 502fc8ee9a975980b2cbbdfae6db4538ac74c2f1..5e9b76edd81c94190116d4a184a5b0a2493ac932 100644 (file)
@@ -91,8 +91,34 @@ void stk1160_ac97_dump_regs(struct stk1160 *dev)
 }
 #endif
 
+int stk1160_has_audio(struct stk1160 *dev)
+{
+       u8 value;
+
+       stk1160_read_reg(dev, STK1160_POSV_L, &value);
+       return !(value & STK1160_POSV_L_ACDOUT);
+}
+
+int stk1160_has_ac97(struct stk1160 *dev)
+{
+       u8 value;
+
+       stk1160_read_reg(dev, STK1160_POSV_L, &value);
+       return !(value & STK1160_POSV_L_ACSYNC);
+}
+
 void stk1160_ac97_setup(struct stk1160 *dev)
 {
+       if (!stk1160_has_audio(dev)) {
+               stk1160_info("Device doesn't support audio, skipping AC97 setup.");
+               return;
+       }
+
+       if (!stk1160_has_ac97(dev)) {
+               stk1160_info("Device uses internal 8-bit ADC, skipping AC97 setup.");
+               return;
+       }
+
        /* Two-step reset AC97 interface and hardware codec */
        stk1160_write_reg(dev, STK1160_AC97CTL_0, 0x94);
        stk1160_write_reg(dev, STK1160_AC97CTL_0, 0x8c);
index f3c9b8a2c6e8d4fd6cfccee84a39097c4b794f66..c86eb61647138b394a3c22c7e62b354f1f1df378 100644 (file)
@@ -20,8 +20,7 @@
  *
  * TODO:
  *
- * 1. (Try to) detect if we must register ac97 mixer
- * 2. Support stream at lower speed: lower frame rate or lower frame size.
+ * 1. Support stream at lower speed: lower frame rate or lower frame size.
  *
  */
 
index 81ff3a15d96ee413bef207e6cc42325702578a47..296a9e712c81ec1b4ab3362fb211e144e2814ef7 100644 (file)
 /* Remote Wakup Control */
 #define STK1160_RMCTL                  0x00c
 
+/* Power-on Strapping Data */
+#define STK1160_POSVA                  0x010
+#define STK1160_POSV_L                 0x010
+#define STK1160_POSV_M                 0x011
+#define STK1160_POSV_H                 0x012
+#define  STK1160_POSV_L_ACDOUT         BIT(3)
+#define  STK1160_POSV_L_ACSYNC         BIT(2)
+
 /*
  * Decoder Control Register:
  * This byte controls capture start/stop