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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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 <jmcne...@invisible.ca> @@ -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