Module Name: src
Committed By: jmcneill
Date: Sun Jul 10 00:47:34 UTC 2011
Modified Files:
src/sys/dev/i2c: au8522.c au8522mod.h au8522mod_8vsb.h
au8522mod_qam256.h au8522mod_qam64.h au8522reg.h au8522var.h
src/sys/dev/usb: auvitek_dtv.c
Log Message:
add snr reporting
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/i2c/au8522.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/i2c/au8522mod.h \
src/sys/dev/i2c/au8522mod_8vsb.h src/sys/dev/i2c/au8522mod_qam256.h \
src/sys/dev/i2c/au8522mod_qam64.h src/sys/dev/i2c/au8522reg.h
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/i2c/au8522var.h
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/usb/auvitek_dtv.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/i2c/au8522.c
diff -u src/sys/dev/i2c/au8522.c:1.4 src/sys/dev/i2c/au8522.c:1.5
--- src/sys/dev/i2c/au8522.c:1.4 Sat Jul 9 15:00:43 2011
+++ src/sys/dev/i2c/au8522.c Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522.c,v 1.4 2011/07/09 15:00:43 jmcneill Exp $ */
+/* $NetBSD: au8522.c,v 1.5 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: au8522.c,v 1.4 2011/07/09 15:00:43 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: au8522.c,v 1.5 2011/07/10 00:47:34 jmcneill Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -345,9 +345,6 @@
fe_status_t status = 0;
uint8_t val;
- //printf("%s: current_modulation = %d\n", __func__,
- // au->current_modulation);
-
switch (au->current_modulation) {
case VSB_8:
if (au8522_read_1(au, 0x4088, &val))
@@ -379,10 +376,49 @@
status |= FE_HAS_LOCK;
}
- //printf("%s: status = 0x%x\n", __func__, status);
return status;
}
+uint16_t
+au8522_get_snr(struct au8522 *au)
+{
+ const struct au8522_snr_table *snrtab = NULL;
+ uint16_t snrreg;
+ uint8_t val;
+ size_t snrtablen;
+ unsigned int n;
+
+ switch (au->current_modulation) {
+ case VSB_8:
+ snrtab = au8522_snr_8vsb;
+ snrtablen = __arraycount(au8522_snr_8vsb);
+ snrreg = AU8522_REG_SNR_VSB;
+ break;
+ case QAM_64:
+ snrtab = au8522_snr_qam64;
+ snrtablen = __arraycount(au8522_snr_qam64);
+ snrreg = AU8522_REG_SNR_QAM;
+ break;
+ case QAM_256:
+ snrtab = au8522_snr_qam256;
+ snrtablen = __arraycount(au8522_snr_qam256);
+ snrreg = AU8522_REG_SNR_QAM;
+ break;
+ default:
+ return 0;
+ }
+
+ if (au8522_read_1(au, snrreg, &val))
+ return 0;
+
+ for (n = 0; n < snrtablen; n++) {
+ if (val < snrtab[n].val)
+ return snrtab[n].snr;
+ }
+
+ return 0;
+}
+
MODULE(MODULE_CLASS_DRIVER, au8522, NULL);
static int
Index: src/sys/dev/i2c/au8522mod.h
diff -u src/sys/dev/i2c/au8522mod.h:1.1 src/sys/dev/i2c/au8522mod.h:1.2
--- src/sys/dev/i2c/au8522mod.h:1.1 Sat Jul 9 15:00:43 2011
+++ src/sys/dev/i2c/au8522mod.h Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522mod.h,v 1.1 2011/07/09 15:00:43 jmcneill Exp $ */
+/* $NetBSD: au8522mod.h,v 1.2 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -34,6 +34,11 @@
uint8_t val;
};
+struct au8522_snr_table {
+ uint16_t val;
+ uint16_t snr;
+};
+
#include <dev/i2c/au8522mod_8vsb.h>
#include <dev/i2c/au8522mod_qam64.h>
#include <dev/i2c/au8522mod_qam256.h>
Index: src/sys/dev/i2c/au8522mod_8vsb.h
diff -u src/sys/dev/i2c/au8522mod_8vsb.h:1.1 src/sys/dev/i2c/au8522mod_8vsb.h:1.2
--- src/sys/dev/i2c/au8522mod_8vsb.h:1.1 Sat Jul 9 15:00:43 2011
+++ src/sys/dev/i2c/au8522mod_8vsb.h Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522mod_8vsb.h,v 1.1 2011/07/09 15:00:43 jmcneill Exp $ */
+/* $NetBSD: au8522mod_8vsb.h,v 1.2 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -55,3 +55,36 @@
{ 0x80a4, 0xe8 },
{ 0x8231, 0x13 },
};
+
+static const struct au8522_snr_table au8522_snr_8vsb[] = {
+ { 0, 270 },
+ { 2, 250 },
+ { 3, 240 },
+ { 5, 230 },
+ { 7, 220 },
+ { 9, 210 },
+ { 12, 200 },
+ { 13, 195 },
+ { 15, 190 },
+ { 17, 185 },
+ { 19, 180 },
+ { 21, 175 },
+ { 24, 170 },
+ { 27, 165 },
+ { 31, 160 },
+ { 32, 158 },
+ { 33, 156 },
+ { 36, 152 },
+ { 37, 150 },
+ { 39, 148 },
+ { 40, 146 },
+ { 41, 144 },
+ { 43, 142 },
+ { 44, 140 },
+ { 48, 135 },
+ { 50, 130 },
+ { 43, 142 },
+ { 53, 125 },
+ { 56, 120 },
+ { 256, 115 },
+};
Index: src/sys/dev/i2c/au8522mod_qam256.h
diff -u src/sys/dev/i2c/au8522mod_qam256.h:1.1 src/sys/dev/i2c/au8522mod_qam256.h:1.2
--- src/sys/dev/i2c/au8522mod_qam256.h:1.1 Sat Jul 9 15:00:43 2011
+++ src/sys/dev/i2c/au8522mod_qam256.h Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522mod_qam256.h,v 1.1 2011/07/09 15:00:43 jmcneill Exp $ */
+/* $NetBSD: au8522mod_qam256.h,v 1.2 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -100,3 +100,70 @@
{ 0x80a7, 0x40 },
{ 0x8526, 0x01 },
};
+
+static const struct au8522_snr_table au8522_snr_qam256[] = {
+ { 16, 0 },
+ { 17, 400 },
+ { 18, 398 },
+ { 19, 396 },
+ { 20, 394 },
+ { 21, 392 },
+ { 22, 390 },
+ { 23, 388 },
+ { 24, 386 },
+ { 25, 384 },
+ { 26, 382 },
+ { 27, 380 },
+ { 28, 379 },
+ { 29, 378 },
+ { 30, 377 },
+ { 31, 376 },
+ { 32, 375 },
+ { 33, 374 },
+ { 34, 373 },
+ { 35, 372 },
+ { 36, 371 },
+ { 37, 370 },
+ { 38, 362 },
+ { 39, 354 },
+ { 40, 346 },
+ { 41, 338 },
+ { 42, 330 },
+ { 43, 328 },
+ { 44, 326 },
+ { 45, 324 },
+ { 46, 322 },
+ { 47, 320 },
+ { 48, 319 },
+ { 49, 318 },
+ { 50, 317 },
+ { 51, 316 },
+ { 52, 315 },
+ { 53, 314 },
+ { 54, 313 },
+ { 55, 312 },
+ { 56, 311 },
+ { 57, 310 },
+ { 58, 308 },
+ { 59, 306 },
+ { 60, 304 },
+ { 61, 302 },
+ { 62, 300 },
+ { 63, 298 },
+ { 65, 295 },
+ { 68, 294 },
+ { 70, 293 },
+ { 73, 292 },
+ { 76, 291 },
+ { 78, 290 },
+ { 79, 289 },
+ { 81, 288 },
+ { 82, 287 },
+ { 83, 286 },
+ { 84, 285 },
+ { 85, 284 },
+ { 86, 283 },
+ { 88, 282 },
+ { 89, 281 },
+ { 256, 280 },
+};
Index: src/sys/dev/i2c/au8522mod_qam64.h
diff -u src/sys/dev/i2c/au8522mod_qam64.h:1.1 src/sys/dev/i2c/au8522mod_qam64.h:1.2
--- src/sys/dev/i2c/au8522mod_qam64.h:1.1 Sat Jul 9 15:00:44 2011
+++ src/sys/dev/i2c/au8522mod_qam64.h Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522mod_qam64.h,v 1.1 2011/07/09 15:00:44 jmcneill Exp $ */
+/* $NetBSD: au8522mod_qam64.h,v 1.2 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -100,3 +100,83 @@
{ 0x00a7, 0x40 },
{ 0x0526, 0x01 },
};
+
+static const struct au8522_snr_table au8522_snr_qam64[] = {
+ { 15, 0 },
+ { 16, 290 },
+ { 17, 288 },
+ { 18, 286 },
+ { 19, 284 },
+ { 20, 282 },
+ { 21, 281 },
+ { 22, 279 },
+ { 23, 277 },
+ { 24, 275 },
+ { 25, 273 },
+ { 26, 271 },
+ { 27, 269 },
+ { 28, 268 },
+ { 29, 266 },
+ { 30, 264 },
+ { 31, 262 },
+ { 32, 260 },
+ { 33, 259 },
+ { 34, 258 },
+ { 35, 256 },
+ { 36, 255 },
+ { 37, 254 },
+ { 38, 252 },
+ { 39, 251 },
+ { 40, 250 },
+ { 41, 249 },
+ { 42, 248 },
+ { 43, 246 },
+ { 44, 245 },
+ { 45, 244 },
+ { 46, 242 },
+ { 47, 241 },
+ { 48, 240 },
+ { 50, 239 },
+ { 51, 238 },
+ { 53, 237 },
+ { 54, 236 },
+ { 56, 235 },
+ { 57, 234 },
+ { 59, 233 },
+ { 60, 232 },
+ { 62, 231 },
+ { 63, 230 },
+ { 65, 229 },
+ { 67, 228 },
+ { 68, 227 },
+ { 70, 226 },
+ { 71, 225 },
+ { 73, 224 },
+ { 74, 223 },
+ { 76, 222 },
+ { 78, 221 },
+ { 80, 220 },
+ { 82, 219 },
+ { 85, 218 },
+ { 88, 217 },
+ { 90, 216 },
+ { 92, 215 },
+ { 93, 214 },
+ { 94, 212 },
+ { 95, 211 },
+ { 97, 210 },
+ { 99, 209 },
+ { 101, 208 },
+ { 102, 207 },
+ { 104, 206 },
+ { 107, 205 },
+ { 111, 204 },
+ { 114, 203 },
+ { 118, 202 },
+ { 122, 201 },
+ { 125, 200 },
+ { 128, 199 },
+ { 130, 198 },
+ { 132, 197 },
+ { 256, 190 },
+};
Index: src/sys/dev/i2c/au8522reg.h
diff -u src/sys/dev/i2c/au8522reg.h:1.1 src/sys/dev/i2c/au8522reg.h:1.2
--- src/sys/dev/i2c/au8522reg.h:1.1 Mon Dec 27 15:42:11 2010
+++ src/sys/dev/i2c/au8522reg.h Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522reg.h,v 1.1 2010/12/27 15:42:11 jmcneill Exp $ */
+/* $NetBSD: au8522reg.h,v 1.2 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -80,5 +80,7 @@
#define AU8522_REG_VFCOEF_CVBS 0x0415
#define AU8522_REG_AUDIO_FREQ 0x0606
#define AU8522_REG_LPFCOEF_BASE 0x060b
+#define AU8522_REG_SNR_QAM 0x4522
+#define AU8522_REG_SNR_VSB 0x4311
#endif /* !_AU8522REG_H */
Index: src/sys/dev/i2c/au8522var.h
diff -u src/sys/dev/i2c/au8522var.h:1.3 src/sys/dev/i2c/au8522var.h:1.4
--- src/sys/dev/i2c/au8522var.h:1.3 Sat Jul 9 15:00:44 2011
+++ src/sys/dev/i2c/au8522var.h Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: au8522var.h,v 1.3 2011/07/09 15:00:44 jmcneill Exp $ */
+/* $NetBSD: au8522var.h,v 1.4 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -67,5 +67,6 @@
int au8522_set_modulation(struct au8522 *, fe_modulation_t);
void au8522_set_gate(struct au8522 *, bool);
fe_status_t au8522_get_dtv_status(struct au8522 *);
+uint16_t au8522_get_snr(struct au8522 *);
#endif /* !_AU8522VAR_H */
Index: src/sys/dev/usb/auvitek_dtv.c
diff -u src/sys/dev/usb/auvitek_dtv.c:1.1 src/sys/dev/usb/auvitek_dtv.c:1.2
--- src/sys/dev/usb/auvitek_dtv.c:1.1 Sat Jul 9 15:00:44 2011
+++ src/sys/dev/usb/auvitek_dtv.c Sun Jul 10 00:47:34 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: auvitek_dtv.c,v 1.1 2011/07/09 15:00:44 jmcneill Exp $ */
+/* $NetBSD: auvitek_dtv.c,v 1.2 2011/07/10 00:47:34 jmcneill Exp $ */
/*-
* Copyright (c) 2011 Jared D. McNeill <[email protected]>
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: auvitek_dtv.c,v 1.1 2011/07/09 15:00:44 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: auvitek_dtv.c,v 1.2 2011/07/10 00:47:34 jmcneill Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -190,13 +190,15 @@
uint16_t
auvitek_dtv_get_signal_strength(void *priv)
{
- return 0; /* TODO */
+ return auvitek_dtv_get_snr(priv);
}
uint16_t
auvitek_dtv_get_snr(void *priv)
{
- return 0; /* TODO */
+ struct auvitek_softc *sc = priv;
+
+ return au8522_get_snr(sc->sc_au8522);
}
static int