[kernel] r15824 - in dists/sid/linux-2.6/debian: . config patches/features/all/mantis patches/series
Ben Hutchings
benh at alioth.debian.org
Thu Jun 3 01:02:38 UTC 2010
Author: benh
Date: Thu Jun 3 01:02:13 2010
New Revision: 15824
Log:
Add mantis DVB driver and mb86a16 and tda665x DVB front-ends,
backported by Bjørn Mork (Closes: #577264)
Added:
dists/sid/linux-2.6/debian/patches/features/all/mantis/
dists/sid/linux-2.6/debian/patches/features/all/mantis/0001-V4L-DVB-13699-Mantis-MB86A16-Initial-checkin-Mantis-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0002-V4L-DVB-13700-MB86A16-Need-a-bit-of-settling-time.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0003-V4L-DVB-13701-MB86A16-Reduce-Carrier-Recovery-range-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0004-V4L-DVB-13702-MB86A16-need-to-wait-a-bit-more-than-t.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0005-V4L-DVB-13703-MB86A16-Fix-wrong-message-printed-out.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0006-V4L-DVB-13704-MB86A16-FIX-Don-t-loop-again-if-we-hav.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0007-V4L-DVB-13705-Mantis-FIX-Do-not-return-IRQ_HANDLED-i.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0008-V4L-DVB-13706-MB86A16-Overhaul.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0009-V4L-DVB-13707-Mantis-Whitespace-cleanup.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0010-V4L-DVB-13708-Mantis-Remove-some-dead-code.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0011-V4L-DVB-13709-Mantis-VP-1034-Switch-13-18v-for-the-V.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0012-V4L-DVB-13710-Mantis-FIX-Use-swfilter-188-204-accord.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0013-V4L-DVB-13711-Mantis-FIX-Do-nor-toggle-GPIF-status.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0014-V4L-DVB-13712-Mantis-Add-locking-for-concurrent-acce.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0015-V4L-DVB-13713-MB86A16-Fix-Initialize-SNR-STATUS.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0016-V4L-DVB-13714-MB86A16-FIX-Code-simplification-use-hw.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0017-V4L-DVB-13715-Mantis-Kernel-I2C-changes-use-PCI-pare.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0018-V4L-DVB-13716-Mantis-Bug-incorrect-byte-swap.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0019-V4L-DVB-13717-MB86A16-Statistics-Updates.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0020-V4L-DVB-13718-Mantis-Use-gpio_set_bits-to-turn-OFF-t.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0021-V4L-DVB-13719-Mantis-VP-2033-Initial-test-switch-to-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0022-V4L-DVB-13720-Mantis-Terratec-Cinergy-C-Add-support-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0023-V4L-DVB-13721-Mantis-Bug-Before-bailing-out-Unlock.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0024-V4L-DVB-13722-Mantis-Revert-13560.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0025-V4L-DVB-13723-Mantis-VP-2040-Terratec-Cinergy-C-Add-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0026-V4L-DVB-13724-Mantis-VP-1041-Initial-support-for-Man.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0027-V4L-DVB-13725-Mantis-VP-1041-Revert-to-old-register-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0028-V4L-DVB-13726-Mantis-Skystar-HD2-Add-support-for-the.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0029-V4L-DVB-13727-Mantis-VP-1041-Bugfix-Sigh-Don-t-look-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0030-V4L-DVB-13728-Mantis-Add-in-some-Host-Interface-defi.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0031-V4L-DVB-13729-Mantis-Add-in-a-license-header.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0032-V4L-DVB-13730-Mantis-Add-in-some-UART-definitions.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0033-V4L-DVB-13731-Mantis-Add-in-a-license-header.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0034-V4L-DVB-13732-Mantis-Add-in-some-Link-Layer-definiti.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0035-V4L-DVB-13733-Mantis-Start-with-the-PCMCIA-interface.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0036-V4L-DVB-13734-Mantis-Initial-go-at-an-Event-Manager.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0037-V4L-DVB-13735-Mantis-Implement-the-Event-Manager-tas.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0038-V4L-DVB-13736-Mantis-Implement-CAM-Plug-IN-and-Unplu.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0039-V4L-DVB-13737-Mantis-Register-the-CA-device-dummy-fu.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0040-V4L-DVB-13738-Mantis-Enable-IRQ0-events.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0041-V4L-DVB-13739-Mantis-Event-Manager-Handle-Masked-eve.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0042-V4L-DVB-13740-Mantis-Schedule-the-work-instead-of-ha.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0043-V4L-DVB-13741-Mantis-Implement-HIF-Mem-Read-Write-op.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0044-V4L-DVB-13742-Mantis-Implement-PCMCIA-I-O-Rd-Wr-oper.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0045-V4L-DVB-13743-Mantis-CA-Use-DVB_CA-Tuple-parser.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0046-V4L-DVB-13744-Mantis-CA-Use-Module-status-to-signal-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0047-V4L-DVB-13745-Mantis-CA-Add-some-debug-statements.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0048-V4L-DVB-13746-Mantis-CA-Bug-Remove-duplicated-symbol.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0049-V4L-DVB-13747-Mantis-Bug-Fix-Use-Register-Address-ra.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0050-V4L-DVB-13748-Mantis-VP-2040-Add-support-for-VP-2040.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0051-V4L-DVB-13749-Mantis-CA-CA_SLAVE-Do-not-change-Slave.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0052-V4L-DVB-13750-Mantis-GPIO_CONTROL-Cache-a-given-GPIO.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0053-V4L-DVB-13751-Mantis-GPIO_CONTROL-Do-not-toggle-GPIO.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0054-V4L-DVB-13752-Mantis-CA-CAM_CONTROL-All-CAM-control-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0055-V4L-DVB-13753-Mantis-CA-SLOT_CONTROL-Implement-Slot-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0056-V4L-DVB-13754-Mantis-CAM_CONTROL-Implement-TS-contro.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0057-V4L-DVB-13755-Mantis-CA-CAM_CONTROL-Use-appropriate-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0058-V4L-DVB-13756-Mantis-CA-CAM_CONTROL-Use-CAMCHANGE_IR.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0059-V4L-DVB-13757-Mantis-CA-CAM_CONTROL-Use-FRDA_IRQ-Eve.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0060-V4L-DVB-13758-Mantis-CA-CAM_CONTROL-Use-CAMREADY_IRQ.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0061-V4L-DVB-13759-Mantis-HIF-I-O-Use-the-LSB-octet-only.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0062-V4L-DVB-13760-Mantis-CA-CA_MODULE-Look-for-module-st.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0063-V4L-DVB-13761-Mantis-HIF-I-O-Temporary-workaround-us.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0064-V4L-DVB-13762-Mantis-CA-CA_MODULE-Look-for-the-modul.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0065-V4L-DVB-13763-Mantis-HIF-I-O-trim-delays-a-bit-appro.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0066-V4L-DVB-13764-Mantis-CA-SLOT-Add-some-debug-status.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0067-V4L-DVB-13765-Mantis-HIF-I-O-Add-some-debug-statemen.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0068-V4L-DVB-13766-Mantis-Bug-Fix-wrong-exit-condition.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0069-V4L-DVB-13767-Mantis-VP-1041-Bug-Add-in-missing-Mast.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0070-V4L-DVB-13768-Mantis-Enable-WRACK.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0071-V4L-DVB-13769-Mantis-Smart-Buffer-Burst-Read-Ready-c.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0072-V4L-DVB-13770-Mantis-Bug-Do-not-trigger-FR-DA-IRQ-fr.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0073-V4L-DVB-13771-Mantis-Reset-Flags-at-the-earliest-pos.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0074-V4L-DVB-13772-Mantis-Do-not-enable-Common-Memory-Acc.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0075-V4L-DVB-13773-Mantis-Enable-all-interrupts.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0076-V4L-DVB-13774-Mantis-Remove-redundant-wait-for-Burst.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0077-V4L-DVB-13775-Mantis-Remove-unnecessary-job-queues.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0078-V4L-DVB-13776-Mantis-Use-a-simple-timeout-instead-in.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0079-V4L-DVB-13777-Mantis-Use-a-Write-wait-queue-for-Writ.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0080-V4L-DVB-13778-Mantis-Wr-ACK-is-already-handled-in-th.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0081-V4L-DVB-13779-Mantis-Missing-wakeup-for-write-queue.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0082-V4L-DVB-13780-Mantis-HIF-I-O-Enable-Interrupts-for-R.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0083-V4L-DVB-13781-Mantis-CA-Bug-Fix-wrong-usage-of-HIFRD.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0084-V4L-DVB-13782-Mantis-Temporarily-disable-FRDA-irq.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0085-V4L-DVB-13783-Mantis-Technisat-Cablestar-HD2-Add-sup.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0086-V4L-DVB-13784-Mantis-Use-PCI-API-instead-of-hardcode.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0087-V4L-DVB-13785-Mantis-Do-not-disable-IRQ-s-while-bein.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0088-V4L-DVB-13786-Mantis-Bug-HIF-bits-already-shifted.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0089-V4L-DVB-13787-Mantis-Fix-build.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0090-V4L-DVB-13788-Mantis-CA-use-a-lock-for-the-relevant-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0091-V4L-DVB-13789-Mantis-CA-Initialize-the-mutex.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0092-V4L-DVB-13790-Mantis-Relocate-queue-initialization.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0093-V4L-DVB-13792-Mantis-VP-2033-Do-not-claim-TDA10023.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0094-V4L-DVB-13794-Mantis-VP-3028-Initial-go-at-Serial-in.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0095-V4L-DVB-13795-Mantis-Hopper-Code-overhaul-add-Hopper.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0096-V4L-DVB-13796-Mantis-Add-missing-file-in-previous-co.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0097-V4L-DVB-13797-Mantis-Hopper-TDA665x-Large-overhaul.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0098-V4L-DVB-13798-Mantis-Enable-power-for-all-cards-use-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0099-V4L-DVB-13799-Mantis-Unregister-frontend.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0100-V4L-DVB-13800-Mantis-I2C-optimization.-Required-dela.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0101-V4L-DVB-13801-MB86A16-Use-the-search-callback.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0102-V4L-DVB-13802-Mantis-Hopper-Fix-all-build-related-wa.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0103-V4L-DVB-13803-Remove-unused-dependency-on-CU1216.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0104-V4L-DVB-13804-Remove-unused-I2C-Adapter-ID.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0105-V4L-DVB-13805-Fix-Unregister-the-frontend-before-det.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0106-V4L-DVB-13806-Register-and-Initialize-Remote-control.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0107-V4L-DVB-13807-Fix-Free-device-in-the-device-registra.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0108-V4L-DVB-13809-Fix-Checkpatch-violations.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0109-V4L-DVB-13810-MB86A16-Use-DVB_-macros.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0110-V4L-DVB-13811-MB86A16-Update-Copyright-header.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0111-V4L-DVB-13812-Mantis-Hopper-Update-Copyright-header.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0112-V4L-DVB-13808b-mantis-replace-DMA_nnBIT_MASK-to-DMA_.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0113-V4L-DVB-13824a-mantis-Fix-__devexit-bad-annotations.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0114-V4L-DVB-13851-Fix-Input-dependency-for-Mantis.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0115-V4L-DVB-Mantis-remove-duplicated-include.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0116-V4L-DVB-dvb-fix-sparse-warnings.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0117-V4L-DVB-Fix-bad-whitespacing.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0118-V4L-DVB-13791-TDA10021-Do-not-claim-TDA10023.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0119-Mantis-hopper-use-MODULE_DEVICE_TABLE-use-the-macro-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0120-V4L-DVB-13808-Mantis-Hopper-Build-update-for-Mantis-.patch
dists/sid/linux-2.6/debian/patches/features/all/mantis/0121-V4L-DVB-mantis-Select-correct-frontends.patch
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/config/config
dists/sid/linux-2.6/debian/patches/series/16
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog Wed Jun 2 09:10:51 2010 (r15823)
+++ dists/sid/linux-2.6/debian/changelog Thu Jun 3 01:02:13 2010 (r15824)
@@ -6,6 +6,8 @@
[ Ben Hutchings ]
* Add stable 2.6.32.15
+ * Add mantis DVB driver and mb86a16 and tda665x DVB front-ends,
+ backported by Bjørn Mork (Closes: #577264)
[ Aurelien Jarno ]
* [sh4] fix sh_tmu clocksource following recent nohz changes.
Modified: dists/sid/linux-2.6/debian/config/config
==============================================================================
--- dists/sid/linux-2.6/debian/config/config Wed Jun 2 09:10:51 2010 (r15823)
+++ dists/sid/linux-2.6/debian/config/config Thu Jun 3 01:02:13 2010 (r15824)
@@ -862,6 +862,13 @@
CONFIG_DVB_DUMMY_FE=m
##
+## file: drivers/media/dvb/mantis/Kconfig
+##
+CONFIG_MANTIS_CORE=m
+CONFIG_DVB_MANTIS=m
+CONFIG_DVB_HOPPER=m
+
+##
## file: drivers/media/dvb/pluto2/Kconfig
##
CONFIG_DVB_PLUTO2=m
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0001-V4L-DVB-13699-Mantis-MB86A16-Initial-checkin-Mantis-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0001-V4L-DVB-13699-Mantis-MB86A16-Initial-checkin-Mantis-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,3868 @@
+From e7cc9f1635f1d46992cb66e0aac472cbfc89f878 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 21:57:10 -0300
+Subject: [PATCH 001/120] V4L/DVB (13699): [Mantis, MB86A16] Initial checkin: Mantis, MB86A16
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 41e840b13e111ba18b138d055ddd250bd5ad5e39)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 1772 ++++++++++++++++++++++++++++
+ drivers/media/dvb/frontends/mb86a16.h | 38 +
+ drivers/media/dvb/frontends/mb86a16_priv.h | 151 +++
+ drivers/media/dvb/mantis/Kconfig | 13 +
+ drivers/media/dvb/mantis/Makefile | 7 +
+ drivers/media/dvb/mantis/mantis_common.h | 135 +++
+ drivers/media/dvb/mantis/mantis_core.c | 215 ++++
+ drivers/media/dvb/mantis/mantis_core.h | 61 +
+ drivers/media/dvb/mantis/mantis_dma.c | 238 ++++
+ drivers/media/dvb/mantis/mantis_dvb.c | 304 +++++
+ drivers/media/dvb/mantis/mantis_i2c.c | 189 +++
+ drivers/media/dvb/mantis/mantis_reg.h | 109 ++
+ drivers/media/dvb/mantis/mantis_vp1033.c | 151 +++
+ drivers/media/dvb/mantis/mantis_vp1033.h | 35 +
+ drivers/media/dvb/mantis/mantis_vp1034.c | 52 +
+ drivers/media/dvb/mantis/mantis_vp1034.h | 30 +
+ drivers/media/dvb/mantis/mantis_vp2033.c | 73 ++
+ drivers/media/dvb/mantis/mantis_vp2033.h | 33 +
+ drivers/media/dvb/mantis/mantis_vp3030.c | 53 +
+ drivers/media/dvb/mantis/mantis_vp3030.h | 30 +
+ 20 files changed, 3689 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/frontends/mb86a16.c
+ create mode 100644 drivers/media/dvb/frontends/mb86a16.h
+ create mode 100644 drivers/media/dvb/frontends/mb86a16_priv.h
+ create mode 100644 drivers/media/dvb/mantis/Kconfig
+ create mode 100644 drivers/media/dvb/mantis/Makefile
+ create mode 100644 drivers/media/dvb/mantis/mantis_common.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_core.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_core.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_dma.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_dvb.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_i2c.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_reg.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp1033.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp1033.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp1034.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp1034.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp2033.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp2033.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp3030.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp3030.h
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+new file mode 100644
+index 0000000..6a78a0c
+--- /dev/null
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -0,0 +1,1772 @@
++/*
++ Fujitsu MB86A16 DVB-S/DSS DC Receiver driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++
++#include "dvb_frontend.h"
++#include "mb86a16.h"
++#include "mb86a16_priv.h"
++
++unsigned int verbose = 5;
++module_param(verbose, int, 0644);
++
++#define ABS(x) ((x) < 0 ? (-x) : (x))
++
++struct mb86a16_state {
++ struct i2c_adapter *i2c_adap;
++ const struct mb86a16_config *config;
++ struct dvb_frontend frontend;
++ u8 signal;
++
++ // tuning parameters
++ int frequency;
++ int srate;
++
++ // Internal stuff
++ int master_clk;
++ int deci;
++ int csel;
++ int rsel;
++};
++
++#define MB86A16_ERROR 0
++#define MB86A16_NOTICE 1
++#define MB86A16_INFO 2
++#define MB86A16_DEBUG 3
++
++#define dprintk(x, y, z, format, arg...) do { \
++ if (z) { \
++ if ((x > MB86A16_ERROR) && (x > y)) \
++ printk(KERN_ERR "%s: " format "\n", __func__, ##arg); \
++ else if ((x > MB86A16_NOTICE) && (x > y)) \
++ printk(KERN_NOTICE "%s: " format "\n", __func__, ##arg); \
++ else if ((x > MB86A16_INFO) && (x > y)) \
++ printk(KERN_INFO "%s: " format "\n", __func__, ##arg); \
++ else if ((x > MB86A16_DEBUG) && (x > y)) \
++ printk(KERN_DEBUG "%s: " format "\n", __func__, ##arg); \
++ } else { \
++ if (x > y) \
++ printk(format, ##arg); \
++ } \
++} while (0)
++
++#define TRACE_IN dprintk(verbose, MB86A16_DEBUG, 1, "-->()")
++#define TRACE_OUT dprintk(verbose, MB86A16_DEBUG, 1, "()-->")
++
++static int mb86a16_write(struct mb86a16_state *state, u8 reg, u8 val)
++{
++ int ret;
++ u8 buf[] = { reg, val };
++
++ struct i2c_msg msg = {
++ .addr = state->config->demod_address,
++ .flags = 0,
++ .buf = buf,
++ .len = 2
++ };
++
++ dprintk(verbose, MB86A16_DEBUG, 1,
++ "writing to [0x%02x],Reg[0x%02x],Data[0x%02x]",
++ state->config->demod_address, buf[0], buf[1]);
++
++ ret = i2c_transfer(state->i2c_adap, &msg, 1);
++
++ return (ret != 1) ? -EREMOTEIO : 0;
++}
++
++static int mb86a16_read(struct mb86a16_state *state, u8 reg, u8 *val)
++{
++ int ret;
++ u8 b0[] = { reg };
++ u8 b1[] = { 0 };
++
++ struct i2c_msg msg[] = {
++ {
++ .addr = state->config->demod_address,
++ .flags = 0,
++ .buf = b0,
++ .len = 1
++ },{
++ .addr = state->config->demod_address,
++ .flags = I2C_M_RD,
++ .buf = b1,
++ .len = 1
++ }
++ };
++ ret = i2c_transfer(state->i2c_adap, msg, 2);
++ if (ret != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "read error(reg=0x%02x, ret=0x%i)",
++ reg, ret);
++
++ return -EREMOTEIO;
++ }
++ *val = b1[0];
++
++ return ret;
++}
++
++static int CNTM_set(struct mb86a16_state *state,
++ unsigned char timint1,
++ unsigned char timint2,
++ unsigned char cnext)
++{
++ unsigned char val;
++
++ val = (timint1 << 4) | (timint2 << 2) | cnext;
++ if (mb86a16_write(state, MB86A16_CNTMR, val) < 0)
++ goto err;
++
++ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int smrt_set(struct mb86a16_state *state, int rate)
++{
++ int tmp ;
++ int m ;
++ unsigned char STOFS0, STOFS1;
++
++ m = 1 << state->deci;
++ tmp = (8192 * state->master_clk - 2 * m * rate * 8192 + state->master_clk / 2) / state->master_clk;
++
++ STOFS0 = tmp & 0x0ff;
++ STOFS1 = (tmp & 0xf00) >> 8;
++
++ if (mb86a16_write(state, MB86A16_SRATE1, (state->deci << 2) |
++ (state->csel << 1) |
++ state->rsel) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_SRATE2, STOFS0) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_SRATE3, STOFS1) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -1;
++}
++
++static int srst(struct mb86a16_state *state)
++{
++ if (mb86a16_write(state, MB86A16_RESET, 0x04) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++
++}
++
++static int afcex_data_set(struct mb86a16_state *state,
++ unsigned char AFCEX_L,
++ unsigned char AFCEX_H)
++{
++ if (mb86a16_write(state, MB86A16_AFCEXL, AFCEX_L) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_AFCEXH, AFCEX_H) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++
++ return -1;
++}
++
++static int afcofs_data_set(struct mb86a16_state *state,
++ unsigned char AFCEX_L,
++ unsigned char AFCEX_H)
++{
++ if (mb86a16_write(state, 0x58, AFCEX_L) < 0)
++ goto err;
++ if (mb86a16_write(state, 0x59, AFCEX_H) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int stlp_set(struct mb86a16_state *state,
++ unsigned char STRAS,
++ unsigned char STRBS)
++{
++ if (mb86a16_write(state, MB86A16_STRFILTCOEF1, (STRBS << 3) | (STRAS)) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int Vi_set(struct mb86a16_state *state, unsigned char ETH, unsigned char VIA)
++{
++ if (mb86a16_write(state, MB86A16_VISET2, 0x04) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_VISET3, 0xf5) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int initial_set(struct mb86a16_state *state)
++{
++ if (stlp_set(state, 5, 7))
++ goto err;
++ if (afcex_data_set(state, 0, 0))
++ goto err;
++ if (afcofs_data_set(state, 0, 0))
++ goto err;
++
++ if (mb86a16_write(state, MB86A16_CRLFILTCOEF1, 0x16) < 0)
++ goto err;
++ if (mb86a16_write(state, 0x2f, 0x21) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_VIMAG, 0x38) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_FAGCS1, 0x00) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_FAGCS2, 0x1c) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_FAGCS3, 0x20) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_FAGCS4, 0x1e) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_FAGCS5, 0x23) < 0)
++ goto err;
++ if (mb86a16_write(state, 0x54, 0xff) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_TSOUT, 0x00) < 0)
++ goto err;
++
++ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int S01T_set(struct mb86a16_state *state,
++ unsigned char s1t,
++ unsigned s0t)
++{
++ if (mb86a16_write(state, 0x33, (s1t << 3) | s0t) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++
++static int EN_set(struct mb86a16_state *state,
++ int cren,
++ int afcen)
++{
++ unsigned char val;
++
++ val = 0x7a | (cren << 7) | (afcen << 2);
++ if (mb86a16_write(state, 0x49, val) < 0)
++ goto err;
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int AFCEXEN_set(struct mb86a16_state *state,
++ int afcexen,
++ int smrt)
++{
++ unsigned char AFCA ;
++
++ if (smrt > 18875)
++ AFCA = 4;
++ else if (smrt > 9375)
++ AFCA = 3;
++ else if (smrt > 2250)
++ AFCA = 2;
++ else
++ AFCA = 1;
++
++ if (mb86a16_write(state, 0x2a, 0x02 | (afcexen << 5) | (AFCA << 2)) < 0)
++ goto err;
++
++ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int DAGC_data_set(struct mb86a16_state *state,
++ unsigned char DAGCA,
++ unsigned char DAGCW)
++{
++ if (mb86a16_write(state, 0x2d, (DAGCA << 3) | DAGCW) < 0)
++ goto err;
++
++ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static void smrt_info_get(struct mb86a16_state *state, int rate)
++{
++ if (rate >= 37501) {
++ state->deci = 0; state->csel = 0; state->rsel = 0;
++ } else if (rate >= 30001) {
++ state->deci = 0; state->csel = 0; state->rsel = 1;
++ } else if (rate >= 26251) {
++ state->deci = 0; state->csel = 1; state->rsel = 0;
++ } else if (rate >= 22501) {
++ state->deci = 0; state->csel = 1; state->rsel = 1;
++ } else if (rate >= 18751) {
++ state->deci = 1; state->csel = 0; state->rsel = 0;
++ } else if (rate >= 15001) {
++ state->deci = 1; state->csel = 0; state->rsel = 1;
++ } else if (rate >= 13126) {
++ state->deci = 1; state->csel = 1; state->rsel = 0;
++ } else if (rate >= 11251) {
++ state->deci = 1; state->csel = 1; state->rsel = 1;
++ } else if (rate >= 9376) {
++ state->deci = 2; state->csel = 0; state->rsel = 0;
++ } else if (rate >= 7501) {
++ state->deci = 2; state->csel = 0; state->rsel = 1;
++ } else if (rate >= 6563) {
++ state->deci = 2; state->csel = 1; state->rsel = 0;
++ } else if (rate >= 5626) {
++ state->deci = 2; state->csel = 1; state->rsel = 1;
++ } else if (rate >= 4688) {
++ state->deci = 3; state->csel = 0; state->rsel = 0;
++ } else if (rate >= 3751) {
++ state->deci = 3; state->csel = 0; state->rsel = 1;
++ } else if (rate >= 3282) {
++ state->deci = 3; state->csel = 1; state->rsel = 0;
++ } else if (rate >= 2814) {
++ state->deci = 3; state->csel = 1; state->rsel = 1;
++ } else if (rate >= 2344) {
++ state->deci = 4; state->csel = 0; state->rsel = 0;
++ } else if (rate >= 1876) {
++ state->deci = 4; state->csel = 0; state->rsel = 1;
++ } else if (rate >= 1641) {
++ state->deci = 4; state->csel = 1; state->rsel = 0;
++ } else if (rate >= 1407) {
++ state->deci = 4; state->csel = 1; state->rsel = 1;
++ } else if (rate >= 1172) {
++ state->deci = 5; state->csel = 0; state->rsel = 0;
++ } else if (rate >= 939) {
++ state->deci = 5; state->csel = 0; state->rsel = 1;
++ } else if (rate >= 821) {
++ state->deci = 5; state->csel = 1; state->rsel = 0;
++ } else {
++ state->deci = 5; state->csel = 1; state->rsel = 1;
++ }
++
++ if (state->csel == 0)
++ state->master_clk = 92000;
++ else
++ state->master_clk = 61333;
++
++}
++
++static int signal_det(struct mb86a16_state *state,
++ int smrt,
++ unsigned char *SIG)
++{
++
++ int ret ;
++ int smrtd ;
++ int wait_sym ;
++ int wait_t ;
++ unsigned char S[3] ;
++ int i ;
++
++ if (*SIG > 45) {
++ if (CNTM_set(state, 2, 1, 2) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "CNTM set Error");
++ return -1;
++ }
++ wait_sym = 40000;
++ } else {
++ if (CNTM_set(state, 3, 1, 2) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "CNTM set Error");
++ return -1;
++ }
++ wait_sym = 80000;
++ }
++ for (i = 0; i < 3; i++) {
++ if (i == 0 )
++ smrtd = smrt * 98 / 100;
++ else if (i == 1)
++ smrtd = smrt;
++ else
++ smrtd = smrt * 102 / 100;
++ smrt_info_get(state, smrtd);
++ smrt_set(state, smrtd);
++ srst(state);
++ wait_t = (wait_sym + 99 * smrtd / 100) / smrtd;
++ if (wait_t == 0)
++ wait_t = 1;
++ msleep_interruptible(10);
++ if (mb86a16_read(state, 0x37, &(S[i])) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++ }
++ if ((S[1] > S[0] * 112 / 100) &&
++ (S[1] > S[2] * 112 / 100)) {
++
++ ret = 1;
++ } else {
++ ret = 0;
++ }
++ *SIG = S[1];
++
++ if (CNTM_set(state, 0, 1, 2) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "CNTM set Error");
++ return -1;
++ }
++
++ return ret;
++}
++
++static int rf_val_set(struct mb86a16_state *state,
++ int f,
++ int smrt,
++ unsigned char R)
++{
++ unsigned char C, F, B;
++ int M;
++ unsigned char rf_val[5];
++ int ack = -1;
++
++ if (smrt > 37750 )
++ C = 1;
++ else if (smrt > 18875)
++ C = 2;
++ else if (smrt > 5500 )
++ C = 3;
++ else
++ C = 4;
++
++ if (smrt > 30500)
++ F = 3;
++ else if (smrt > 9375)
++ F = 1;
++ else if (smrt > 4625)
++ F = 0;
++ else
++ F = 2;
++
++ if (f < 1060)
++ B = 0;
++ else if (f < 1175)
++ B = 1;
++ else if (f < 1305)
++ B = 2;
++ else if (f < 1435)
++ B = 3;
++ else if (f < 1570)
++ B = 4;
++ else if (f < 1715)
++ B = 5;
++ else if (f < 1845)
++ B = 6;
++ else if (f < 1980)
++ B = 7;
++ else if (f < 2080)
++ B = 8;
++ else
++ B = 9;
++
++ M = f * (1 << R) / 2;
++
++ rf_val[0] = 0x01 | (C << 3) | (F << 1);
++ rf_val[1] = (R << 5) | ((M & 0x1f000) >> 12);
++ rf_val[2] = (M & 0x00ff0) >> 4;
++ rf_val[3] = ((M & 0x0000f) << 4) | B;
++
++ // Frequency Set
++ if (mb86a16_write(state, 0x21, rf_val[0]) < 0)
++ ack = 0;
++ if (mb86a16_write(state, 0x22, rf_val[1]) < 0)
++ ack = 0;
++ if (mb86a16_write(state, 0x23, rf_val[2]) < 0)
++ ack = 0;
++ if (mb86a16_write(state, 0x24, rf_val[3]) < 0)
++ ack = 0;
++ if (mb86a16_write(state, 0x25, 0x01) < 0)
++ ack = 0;
++ if (ack == 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "RF Setup - I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ return 0;
++}
++
++static int afcerr_chk(struct mb86a16_state *state)
++{
++ unsigned char AFCM_L, AFCM_H ;
++ int AFCM ;
++ int afcm, afcerr ;
++
++ if (mb86a16_read(state, 0x0e, &AFCM_L) != 2)
++ goto err;
++ if (mb86a16_read(state, 0x0f, &AFCM_H) != 2)
++ goto err;
++
++ AFCM = (AFCM_H << 8) + AFCM_L;
++
++ if (AFCM > 2048)
++ afcm = AFCM - 4096;
++ else
++ afcm = AFCM;
++ afcerr = afcm * state->master_clk / 8192;
++
++ return afcerr;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int dagcm_val_get(struct mb86a16_state *state)
++{
++ int DAGCM;
++ unsigned char DAGCM_H, DAGCM_L;
++
++ if (mb86a16_read(state, 0x45, &DAGCM_L) != 2)
++ goto err;
++ if (mb86a16_read(state, 0x46, &DAGCM_H) != 2)
++ goto err;
++
++ DAGCM = (DAGCM_H << 8) + DAGCM_L;
++
++ return DAGCM;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int mb86a16_read_status(struct dvb_frontend *fe, fe_status_t *status)
++{
++ struct mb86a16_state *state = fe->demodulator_priv;
++
++ if (state->signal & 0x02)
++ *status |= FE_HAS_VITERBI;
++ if (state->signal & 0x01)
++ *status |= FE_HAS_SYNC;
++ if (state->signal & 0x03)
++ *status |= FE_HAS_LOCK;
++
++ return 0;
++}
++
++static int sync_chk(struct mb86a16_state *state,
++ unsigned char *VIRM)
++{
++ unsigned char val;
++ int sync;
++
++ if (mb86a16_read(state, 0x0d, &val) != 2)
++ goto err;
++
++ dprintk(verbose, MB86A16_INFO, 1, "Status = %02x,", val);
++ sync = val & 0x01;
++ *VIRM = (val & 0x1c) >> 2;
++
++ return sync;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++
++}
++
++static int freqerr_chk(struct mb86a16_state *state,
++ int fTP,
++ int smrt,
++ int unit)
++{
++ unsigned char CRM, AFCML, AFCMH;
++ unsigned char temp1, temp2, temp3;
++ int crm, afcm, AFCM;
++ int crrerr, afcerr; // [kHz]
++ int frqerr; // [MHz]
++ int afcen, afcexen = 0;
++ int R, M, fOSC, fOSC_OFS;
++
++ if (mb86a16_read(state, 0x43, &CRM) != 2)
++ goto err;
++
++ if (CRM > 127)
++ crm = CRM - 256;
++ else
++ crm = CRM;
++
++ crrerr = smrt * crm / 256;
++ if (mb86a16_read(state, 0x49, &temp1) != 2)
++ goto err;
++
++ afcen = (temp1 & 0x04) >> 2;
++ if (afcen == 0) {
++ if (mb86a16_read(state, 0x2a, &temp1) != 2)
++ goto err;
++ afcexen = (temp1 & 0x20) >> 5;
++ }
++
++ if (afcen == 1) {
++ if (mb86a16_read(state, 0x0e, &AFCML) != 2)
++ goto err;
++ if (mb86a16_read(state, 0x0f, &AFCMH) != 2)
++ goto err;
++ } else if (afcexen == 1) {
++ if (mb86a16_read(state, 0x2b, &AFCML) != 2)
++ goto err;
++ if (mb86a16_read(state, 0x2c, &AFCMH) != 2)
++ goto err;
++ }
++ if ((afcen == 1) || (afcexen == 1)) {
++ smrt_info_get(state, smrt);
++ AFCM = ((AFCMH & 0x01) << 8) + AFCML;
++ if (AFCM > 255)
++ afcm = AFCM - 512;
++ else
++ afcm = AFCM;
++
++ afcerr = afcm * state->master_clk / 8192;
++ } else
++ afcerr = 0;
++
++ if (mb86a16_read(state, 0x22, &temp1) != 2)
++ goto err;
++ if (mb86a16_read(state, 0x23, &temp2) != 2)
++ goto err;
++ if (mb86a16_read(state, 0x24, &temp3) != 2)
++ goto err;
++
++ R = (temp1 & 0xe0) >> 5;
++ M = ((temp1 & 0x1f) << 12) + (temp2 << 4) + (temp3 >> 4);
++ if (R == 0)
++ fOSC = 2 * M;
++ else
++ fOSC = M;
++
++ fOSC_OFS = fOSC - fTP;
++
++ if (unit == 0) { //[MHz]
++ if (crrerr + afcerr + fOSC_OFS * 1000 >= 0)
++ frqerr = (crrerr + afcerr + fOSC_OFS * 1000 + 500) / 1000;
++ else
++ frqerr = (crrerr + afcerr + fOSC_OFS * 1000 - 500) / 1000;
++ } else { //[kHz]
++ frqerr = crrerr + afcerr + fOSC_OFS * 1000;
++ }
++
++ return frqerr;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static unsigned char vco_dev_get(struct mb86a16_state *state, int smrt)
++{
++ unsigned char R;
++
++ if (smrt > 9375)
++ R = 0;
++ else
++ R = 1;
++
++ return R;
++}
++
++static void swp_info_get(struct mb86a16_state *state,
++ int fOSC_start,
++ int smrt,
++ int v, int R,
++ int swp_ofs,
++ int *fOSC,
++ int *afcex_freq,
++ unsigned char *AFCEX_L,
++ unsigned char *AFCEX_H)
++{
++ int AFCEX ;
++ int crnt_swp_freq ;
++
++ crnt_swp_freq = fOSC_start * 1000 + v * swp_ofs;
++
++ if (R == 0 )
++ *fOSC = (crnt_swp_freq + 1000) / 2000 * 2;
++ else
++ *fOSC = (crnt_swp_freq + 500) / 1000;
++
++ if (*fOSC >= crnt_swp_freq)
++ *afcex_freq = *fOSC *1000 - crnt_swp_freq;
++ else
++ *afcex_freq = crnt_swp_freq - *fOSC * 1000;
++
++ AFCEX = *afcex_freq * 8192 / state->master_clk;
++ *AFCEX_L = AFCEX & 0x00ff;
++ *AFCEX_H = (AFCEX & 0x0f00) >> 8;
++}
++
++
++static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V, int vmax, int vmin,
++ int SIGMIN, int fOSC, int afcex_freq, int swp_ofs, unsigned char *SIG1)
++{
++ int swp_freq ;
++
++ if ((i % 2 == 1) && (v <= vmax)) {
++ // positive v (case 1)
++ if ((v - 1 == vmin) &&
++ (*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v - 1) >= 0) &&
++ (*(V + 30 + v - 1) > *(V + 30 + v)) &&
++ (*(V + 30 + v - 1) > SIGMIN)) {
++
++ swp_freq = fOSC * 1000 + afcex_freq - swp_ofs;
++ *SIG1 = *(V + 30 + v - 1);
++ } else if ((v == vmax) &&
++ (*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v - 1) >= 0) &&
++ (*(V + 30 + v) > *(V + 30 + v - 1)) &&
++ (*(V + 30 + v) > SIGMIN)) {
++ // (case 2)
++ swp_freq = fOSC * 1000 + afcex_freq;
++ *SIG1 = *(V + 30 + v);
++ } else if ((*(V + 30 + v) > 0) &&
++ (*(V + 30 + v - 1) > 0) &&
++ (*(V + 30 + v - 2) > 0) &&
++ (*(V + 30 + v - 3) > 0) &&
++ (*(V + 30 + v - 1) > *(V + 30 + v)) &&
++ (*(V + 30 + v - 2) > *(V + 30 + v - 3)) &&
++ ((*(V + 30 + v - 1) > SIGMIN) ||
++ (*(V + 30 + v - 2) > SIGMIN))) {
++ // (case 3)
++ if (*(V + 30 + v - 1) >= *(V + 30 + v - 2)) {
++ swp_freq = fOSC * 1000 + afcex_freq - swp_ofs;
++ *SIG1 = *(V + 30 + v - 1);
++ } else {
++ swp_freq = fOSC * 1000 + afcex_freq - swp_ofs * 2;
++ *SIG1 = *(V + 30 + v - 2);
++ }
++ } else if ((v == vmax) &&
++ (*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v - 1) >= 0) &&
++ (*(V + 30 + v - 2) >= 0) &&
++ (*(V + 30 + v) > *(V + 30 + v - 2)) &&
++ (*(V + 30 + v - 1) > *(V + 30 + v - 2)) &&
++ ((*(V + 30 + v) > SIGMIN) ||
++ (*(V + 30 + v - 1) > SIGMIN))) {
++ // (case 4)
++ if (*(V + 30 + v) >= *(V + 30 + v - 1)) {
++ swp_freq = fOSC * 1000 + afcex_freq;
++ *SIG1 = *(V + 30 + v);
++ } else {
++ swp_freq = fOSC * 1000 + afcex_freq - swp_ofs;
++ *SIG1 = *(V + 30 + v - 1);
++ }
++ } else {
++ swp_freq = -1 ;
++ }
++ } else if ((i % 2 == 0) && (v >= vmin)) {
++ // Negative v (case 1)
++ if ((*(V + 30 + v) > 0) &&
++ (*(V + 30 + v + 1) > 0) &&
++ (*(V + 30 + v + 2) > 0) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v)) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v + 2)) &&
++ (*(V + 30 + v + 1) > SIGMIN)) {
++
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
++ *SIG1 = *(V + 30 + v + 1);
++ } else if ((v + 1 == vmax) &&
++ (*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v + 1) >= 0) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v)) &&
++ (*(V + 30 + v + 1) > SIGMIN)) {
++ // (case 2)
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
++ *SIG1 = *(V + 30 + v);
++ } else if ((v == vmin) &&
++ (*(V + 30 + v) > 0) &&
++ (*(V + 30 + v + 1) > 0) &&
++ (*(V + 30 + v + 2) > 0) &&
++ (*(V + 30 + v) > *(V + 30 + v + 1)) &&
++ (*(V + 30 + v) > *(V + 30 + v + 2)) &&
++ (*(V + 30 + v) > SIGMIN)) {
++ // (case 3)
++ swp_freq = fOSC * 1000 + afcex_freq;
++ *SIG1 = *(V + 30 + v);
++ } else if ((*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v + 1) >= 0) &&
++ (*(V + 30 + v + 2) >= 0) &&
++ (*(V +30 + v + 3) >= 0) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v)) &&
++ (*(V + 30 + v + 2) > *(V + 30 + v + 3)) &&
++ ((*(V + 30 + v + 1) > SIGMIN) ||
++ (*(V + 30 + v + 2) > SIGMIN))) {
++ // (case 4)
++ if (*(V + 30 + v + 1) >= *(V + 30 + v + 2)) {
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
++ *SIG1 = *(V + 30 + v + 1);
++ } else {
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs * 2;
++ *SIG1 = *(V + 30 + v + 2);
++ }
++ } else if ((*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v + 1) >= 0) &&
++ (*(V + 30 + v + 2) >= 0) &&
++ (*(V + 30 + v + 3) >= 0) &&
++ (*(V + 30 + v) > *(V + 30 + v + 2)) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v + 2)) &&
++ (*(V + 30 + v) > *(V + 30 + v + 3)) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v + 3)) &&
++ ((*(V + 30 + v) > SIGMIN) ||
++ (*(V + 30 + v + 1) > SIGMIN))) {
++ // (case 5)
++ if (*(V + 30 + v) >= *(V + 30 + v + 1)) {
++ swp_freq = fOSC * 1000 + afcex_freq;
++ *SIG1 = *(V + 30 + v);
++ } else {
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
++ *SIG1 = *(V + 30 + v + 1);
++ }
++ } else if ((v + 2 == vmin) &&
++ (*(V + 30 + v) >= 0) &&
++ (*(V + 30 + v + 1) >= 0) &&
++ (*(V + 30 + v + 2) >= 0) &&
++ (*(V + 30 + v + 1) > *(V + 30 + v)) &&
++ (*(V + 30 + v + 2) > *(V + 30 + v)) &&
++ ((*(V + 30 + v + 1) > SIGMIN) ||
++ (*(V + 30 + v + 2) > SIGMIN))) {
++ // (case 6)
++ if (*(V + 30 + v + 1) >= *(V + 30 + v + 2)) {
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
++ *SIG1 = *(V + 30 + v + 1);
++ } else {
++ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs * 2;
++ *SIG1 = *(V + 30 + v + 2);
++ }
++ } else if ((vmax == 0) && (vmin == 0) && (*(V + 30 + v) > SIGMIN)) {
++ swp_freq = fOSC * 1000;
++ *SIG1 = *(V + 30 + v);
++ } else swp_freq = -1;
++ } else swp_freq = -1;
++
++ return swp_freq;
++}
++
++static void swp_info_get2(struct mb86a16_state *state,
++ int smrt,
++ int R,
++ int swp_freq,
++ int *afcex_freq,
++ int *fOSC,
++ unsigned char *AFCEX_L,
++ unsigned char *AFCEX_H)
++{
++ int AFCEX ;
++
++ if (R == 0)
++ *fOSC = (swp_freq + 1000) / 2000 * 2;
++ else
++ *fOSC = (swp_freq + 500) / 1000;
++
++ if (*fOSC >= swp_freq)
++ *afcex_freq = *fOSC * 1000 - swp_freq;
++ else
++ *afcex_freq = swp_freq - *fOSC * 1000;
++
++ AFCEX = *afcex_freq * 8192 / state->master_clk;
++ *AFCEX_L = AFCEX & 0x00ff;
++ *AFCEX_H = (AFCEX & 0x0f00) >> 8;
++}
++
++static void afcex_info_get(struct mb86a16_state *state,
++ int afcex_freq,
++ unsigned char *AFCEX_L,
++ unsigned char *AFCEX_H)
++{
++ int AFCEX ;
++
++ AFCEX = afcex_freq * 8192 / state->master_clk;
++ *AFCEX_L = AFCEX & 0x00ff;
++ *AFCEX_H = (AFCEX & 0x0f00) >> 8;
++}
++
++static int SEQ_set(struct mb86a16_state *state, unsigned char loop)
++{
++ // SLOCK0 = 0
++ if (mb86a16_write(state, 0x32, 0x02 | (loop << 2)) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ return 0;
++}
++
++static int iq_vt_set(struct mb86a16_state *state, unsigned char IQINV)
++{
++ // Viterbi Rate, IQ Settings
++ if (mb86a16_write(state, 0x06, 0xdf | (IQINV << 5)) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ return 0;
++}
++
++static int FEC_srst(struct mb86a16_state *state)
++{
++ if (mb86a16_write(state, MB86A16_RESET, 0x02) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ return 0;
++}
++
++static int S2T_set(struct mb86a16_state *state, unsigned char S2T)
++{
++ if (mb86a16_write(state, 0x34, 0x70 | S2T) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ return 0;
++}
++
++static int S45T_set(struct mb86a16_state *state, unsigned char S4T, unsigned char S5T)
++{
++ if (mb86a16_write(state, 0x35, 0x00 | (S5T << 4) | S4T) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ return 0;
++}
++
++
++static int mb86a16_set_fe(struct mb86a16_state *state)
++{
++ u8 agcval, cnmval;
++
++ int i, j;
++ int fOSC = 0;
++ int fOSC_start = 0;
++ int wait_t;
++ int fcp;
++ int swp_ofs;
++ int V[60];
++ u8 SIG1MIN;
++
++ unsigned char CREN, AFCEN, AFCEXEN;
++ unsigned char SIG1;
++ unsigned char TIMINT1, TIMINT2, TIMEXT;
++ unsigned char S0T, S1T;
++ unsigned char S2T;
++// unsigned char S2T, S3T;
++ unsigned char S4T, S5T;
++ unsigned char AFCEX_L, AFCEX_H;
++ unsigned char R;
++ unsigned char VIRM;
++ unsigned char ETH, VIA;
++ unsigned char junk;
++
++ int loop;
++ int ftemp;
++ int v, vmax, vmin;
++ int vmax_his, vmin_his;
++ int swp_freq, prev_swp_freq[20];
++ int prev_freq_num;
++ int signal_dupl;
++ int afcex_freq;
++ int signal;
++ int afcerr;
++ int temp_freq, delta_freq;
++ int dagcm[4];
++ int smrt_d;
++// int freq_err;
++ int n;
++ int ret = -1;
++ int sync;
++
++ dprintk(verbose, MB86A16_INFO, 1, "freq=%d Mhz, symbrt=%d Ksps", state->frequency, state->srate);
++
++ fcp = 5000; // (carrier recovery [kHz])
++// fcp = 3000;
++ swp_ofs = state->srate / 4;
++
++ for (i = 0; i < 60; i++)
++ V[i] = -1;
++
++ for (i = 0; i < 20; i++)
++ prev_swp_freq[i] = 0;
++
++ SIG1MIN = 25;
++
++ for (n = 0; ((n < 3) && (ret == -1)); n++) {
++ SEQ_set(state, 0);
++ iq_vt_set(state, 0);
++
++ CREN = 0;
++ AFCEN = 0;
++ AFCEXEN = 1;
++ TIMINT1 = 0;
++ TIMINT2 = 1;
++ TIMEXT = 2;
++ S1T = 0;
++ S0T = 0;
++
++ if (initial_set(state) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "initial set failed");
++ return -1;
++ }
++ if (DAGC_data_set(state, 3, 2) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "DAGC data set error");
++ return -1;
++ }
++ if (EN_set(state, CREN, AFCEN) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "EN set error");
++ return -1; // (0, 0)
++ }
++ if (AFCEXEN_set(state, AFCEXEN, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "AFCEXEN set error");
++ return -1; // (1, smrt) = (1, symbolrate)
++ }
++ if (CNTM_set(state, TIMINT1, TIMINT2, TIMEXT) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "CNTM set error");
++ return -1; // (0, 1, 2)
++ }
++ if (S01T_set(state, S1T, S0T) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "S01T set error");
++ return -1; // (0, 0)
++ }
++ smrt_info_get(state, state->srate);
++ if (smrt_set(state, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "smrt info get error");
++ return -1;
++ }
++
++ R = vco_dev_get(state, state->srate);
++ if (R == 1)
++ fOSC_start = state->frequency;
++
++ else if (R == 0) {
++ if (state->frequency % 2 == 0) {
++ fOSC_start = state->frequency;
++ } else {
++ fOSC_start = state->frequency + 1;
++ if (fOSC_start > 2150)
++ fOSC_start = state->frequency - 1;
++ }
++ }
++ loop = 1;
++ ftemp = fOSC_start * 1000;
++ vmax = 0 ;
++ while (loop == 1) {
++ ftemp = ftemp + swp_ofs;
++ vmax++;
++
++ // Upper bound
++ if (ftemp > 2150000) {
++ loop = 0;
++ vmax--;
++ }
++ else if ((ftemp == 2150000) || (ftemp - state->frequency * 1000 >= fcp + state->srate / 4))
++ loop = 0;
++ }
++
++ loop = 1;
++ ftemp = fOSC_start * 1000;
++ vmin = 0 ;
++ while (loop == 1) {
++ ftemp = ftemp - swp_ofs;
++ vmin--;
++
++ // Lower bound
++ if (ftemp < 950000) {
++ loop = 0;
++ vmin++;
++ }
++ else if ((ftemp == 950000) || (state->frequency * 1000 - ftemp >= fcp + state->srate / 4))
++ loop = 0;
++ }
++
++ wait_t = (8000 + state->srate / 2) / state->srate;
++ if (wait_t == 0)
++ wait_t = 1;
++
++ i = 0;
++ j = 0;
++ prev_freq_num = 0;
++ loop = 1;
++ signal = 0;
++ vmax_his = 0;
++ vmin_his = 0;
++ v = 0;
++
++ while (loop == 1) {
++ swp_info_get(state, fOSC_start, state->srate,
++ v, R, swp_ofs, &fOSC,
++ &afcex_freq, &AFCEX_L, &AFCEX_H);
++
++ if (rf_val_set(state, fOSC, state->srate, R) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "rf val set error");
++ return -1;
++ }
++
++ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set error");
++ return -1;
++ }
++ if (srst(state) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "srst error");
++ return -1;
++ }
++ msleep_interruptible(wait_t);
++
++ if (mb86a16_read(state, 0x37, &SIG1) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -1;
++ }
++ V[30 + v] = SIG1 ;
++ swp_freq = swp_freq_calcuation(state, i, v, V, vmax, vmin,
++ SIG1MIN, fOSC, afcex_freq,
++ swp_ofs, &SIG1); //changed
++
++ signal_dupl = 0;
++ for (j = 0; j < prev_freq_num; j++) {
++ if ((ABS(prev_swp_freq[j] - swp_freq)) < (swp_ofs * 3 / 2)) {
++ signal_dupl = 1;
++ dprintk(verbose, MB86A16_INFO, 1, "Probably Duplicate Signal, j = %d", j);
++ }
++ }
++ if ((signal_dupl == 0) && (swp_freq > 0) && (ABS(swp_freq - state->frequency * 1000) < fcp + state->srate / 6)) {
++ dprintk(verbose, MB86A16_DEBUG, 1, "------ Signal detect ------ [swp_freq=[%07d, srate=%05d]]", swp_freq, state->srate);
++ prev_swp_freq[prev_freq_num] = swp_freq;
++ prev_freq_num++;
++ swp_info_get2(state, state->srate, R, swp_freq,
++ &afcex_freq, &fOSC,
++ &AFCEX_L, &AFCEX_H);
++
++ if (rf_val_set(state, fOSC, state->srate, R) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "rf val set error");
++ return -1;
++ }
++ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set error");
++ return -1;
++ }
++ signal = signal_det(state, state->srate, &SIG1);
++ if (signal == 1) {
++ dprintk(verbose, MB86A16_ERROR, 1, "***** Signal Found *****");
++ loop = 0;
++ } else {
++ dprintk(verbose, MB86A16_ERROR, 1, "!!!!! No signal !!!!!, try again...");
++ smrt_info_get(state, state->srate);
++ if (smrt_set(state, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "smrt set error");
++ return -1;
++ }
++ }
++ }
++ if (v > vmax)
++ vmax_his = 1 ;
++ if (v < vmin)
++ vmin_his = 1 ;
++ i++;
++
++ if ((i % 2 == 1) && (vmax_his == 1))
++ i++;
++ if ((i % 2 == 0) && (vmin_his == 1))
++ i++;
++
++ if (i % 2 == 1)
++ v = (i + 1) / 2;
++ else
++ v = -i / 2;
++
++ if ((vmax_his == 1) && (vmin_his == 1))
++ loop = 0 ;
++ }
++
++ if (signal == 1) {
++ dprintk(verbose, MB86A16_INFO, 1, " Start Freq Error Check");
++ S1T = 7 ;
++ S0T = 1 ;
++ CREN = 0 ;
++ AFCEN = 1 ;
++ AFCEXEN = 0 ;
++
++ if (S01T_set(state, S1T, S0T) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "S01T set error");
++ return -1;
++ }
++ smrt_info_get(state, state->srate);
++ if (smrt_set(state, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "smrt set error");
++ return -1;
++ }
++ if (EN_set(state, CREN, AFCEN) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "EN set error");
++ return -1;
++ }
++ if (AFCEXEN_set(state, AFCEXEN, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "AFCEXEN set error");
++ return -1;
++ }
++ afcex_info_get(state, afcex_freq, &AFCEX_L, &AFCEX_H);
++ if (afcofs_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "AFCOFS data set error");
++ return -1;
++ }
++ if (srst(state) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "srst error");
++ return -1;
++ }
++ // delay 4~200
++ wait_t = 200000 / state->master_clk + 200000 / state->srate;
++ msleep(wait_t);
++ afcerr = afcerr_chk(state);
++ if (afcerr == -1)
++ return -1;
++
++ swp_freq = fOSC * 1000 + afcerr ;
++ AFCEXEN = 1 ;
++ if (state->srate >= 1500)
++ smrt_d = state->srate / 3;
++ else
++ smrt_d = state->srate / 2;
++ smrt_info_get(state, smrt_d);
++ if (smrt_set(state, smrt_d) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "smrt set error");
++ return -1;
++ }
++ if (AFCEXEN_set(state, AFCEXEN, smrt_d) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "AFCEXEN set error");
++ return -1;
++ }
++ R = vco_dev_get(state, smrt_d);
++ if (DAGC_data_set(state, 2, 0) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "DAGC data set error");
++ return -1;
++ }
++ for (i = 0; i < 3; i++) {
++ temp_freq = swp_freq + (i - 1) * state->srate / 8;
++ swp_info_get2(state, smrt_d, R, temp_freq, &afcex_freq, &fOSC, &AFCEX_L, &AFCEX_H);
++ if (rf_val_set(state, fOSC, smrt_d, R) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "rf val set error");
++ return -1;
++ }
++ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set error");
++ return -1;
++ }
++ wait_t = 200000 / state->master_clk + 40000 / smrt_d;
++ msleep(wait_t);
++ dagcm[i] = dagcm_val_get(state);
++ }
++ if ((dagcm[0] > dagcm[1]) &&
++ (dagcm[0] > dagcm[2]) &&
++ (dagcm[0] - dagcm[1] > 2 * (dagcm[2] - dagcm[1]))) {
++
++ temp_freq = swp_freq - 2 * state->srate / 8;
++ swp_info_get2(state, smrt_d, R, temp_freq, &afcex_freq, &fOSC, &AFCEX_L, &AFCEX_H);
++ if (rf_val_set(state, fOSC, smrt_d, R) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "rf val set error");
++ return -1;
++ }
++ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set");
++ return -1;
++ }
++ wait_t = 200000 / state->master_clk + 40000 / smrt_d;
++ msleep(wait_t);
++ dagcm[3] = dagcm_val_get(state);
++ if (dagcm[3] > dagcm[1])
++ delta_freq = (dagcm[2] - dagcm[0] + dagcm[1] - dagcm[3]) * state->srate / 300;
++ else
++ delta_freq = 0;
++ } else if ((dagcm[2] > dagcm[1]) &&
++ (dagcm[2] > dagcm[0]) &&
++ (dagcm[2] - dagcm[1] > 2 * (dagcm[0] - dagcm[1]))) {
++
++ temp_freq = swp_freq + 2 * state->srate / 8;
++ swp_info_get2(state, smrt_d, R, temp_freq, &afcex_freq, &fOSC, &AFCEX_L, &AFCEX_H);
++ if (rf_val_set(state, fOSC, smrt_d, R) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "rf val set");
++ return -1;
++ }
++ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set");
++ return -1;
++ }
++ wait_t = 200000 / state->master_clk + 40000 / smrt_d;
++ msleep(wait_t);
++ dagcm[3] = dagcm_val_get(state);
++ if (dagcm[3] > dagcm[1])
++ delta_freq = (dagcm[2] - dagcm[0] + dagcm[3] - dagcm[1]) * state->srate / 300;
++ else
++ delta_freq = 0 ;
++
++ } else {
++ delta_freq = 0 ;
++ }
++ dprintk(verbose, MB86A16_INFO, 1, "SWEEP Frequency = %d", swp_freq);
++ swp_freq += delta_freq;
++ dprintk(verbose, MB86A16_INFO, 1, "Adjusting .., DELTA Freq = %d, SWEEP Freq=%d", delta_freq, swp_freq);
++ if (ABS(state->frequency * 1000 - swp_freq) > 3800) {
++ dprintk(verbose, MB86A16_INFO, 1, "NO -- SIGNAL !");
++ } else {
++
++ S1T = 0;
++ S0T = 3;
++ CREN = 1;
++ AFCEN = 0;
++ AFCEXEN = 1;
++
++ if (S01T_set(state, S1T, S0T) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "S01T set error");
++ return -1;
++ }
++ if (DAGC_data_set(state, 0, 0) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "DAGC data set error");
++ return -1;
++ }
++ R = vco_dev_get(state, state->srate);
++ smrt_info_get(state, state->srate);
++ if (smrt_set(state, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "smrt set error");
++ return -1;
++ }
++ if (EN_set(state, CREN, AFCEN) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "EN set error");
++ return -1;
++ }
++ if (AFCEXEN_set(state, AFCEXEN, state->srate) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "AFCEXEN set error");
++ return -1;
++ }
++ swp_info_get2(state, state->srate, R, swp_freq, &afcex_freq, &fOSC, &AFCEX_L, &AFCEX_H);
++ if (rf_val_set(state, fOSC, state->srate, R) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "rf val set error");
++ return -1;
++ }
++ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set error");
++ return -1;
++ }
++ if (srst(state) < 0) {
++ dprintk(verbose, MB86A16_ERROR, 1, "srst error");
++ return -1;
++ }
++ wait_t = 7 + (10000 + state->srate / 2) / state->srate;
++ if (wait_t == 0)
++ wait_t = 1;
++ msleep_interruptible(wait_t);
++ if (mb86a16_read(state, 0x37, &SIG1) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ if (SIG1 > 110) {
++ S2T = 4; S4T = 1; S5T = 6; ETH = 4; VIA = 6;
++ wait_t = 7 + (917504 + state->srate / 2) / state->srate;
++ } else if (SIG1 > 105) {
++ S2T = 4; S4T = 2; S5T = 8; ETH = 7; VIA = 2;
++ wait_t = 7 + (1048576 + state->srate / 2) / state->srate;
++ } else if (SIG1 > 85) {
++ S2T = 5; S4T = 2; S5T = 8; ETH = 7; VIA = 2;
++ wait_t = 7 + (1310720 + state->srate / 2) / state->srate;
++ } else if (SIG1 > 65) {
++ S2T = 6; S4T = 2; S5T = 8; ETH = 7; VIA = 2;
++ wait_t = 7 + (1572864 + state->srate / 2) / state->srate;
++ } else {
++ S2T = 7; S4T = 2; S5T = 8; ETH = 7; VIA = 2;
++ wait_t = 7 + (2097152 + state->srate / 2) / state->srate;
++ }
++ S2T_set(state, S2T);
++ S45T_set(state, S4T, S5T);
++ Vi_set(state, ETH, VIA);
++ srst(state);
++ msleep_interruptible(wait_t);
++ sync = sync_chk(state, &VIRM);
++ dprintk(verbose, MB86A16_INFO, 1, "-------- Viterbi=[%d] SYNC=[%d] ---------", VIRM, sync);
++ if (mb86a16_read(state, 0x0d, &state->signal) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++ if (VIRM) {
++ if (VIRM == 4) { // 5/6
++ if (SIG1 > 110)
++ wait_t = ( 786432 + state->srate / 2) / state->srate;
++ else
++ wait_t = (1572864 + state->srate / 2) / state->srate;
++ if (state->srate < 5000)
++ // FIXME ! , should be a long wait !
++ msleep_interruptible(wait_t);
++ else
++ msleep_interruptible(wait_t);
++
++ if (sync_chk(state, &junk) == 0) {
++ iq_vt_set(state, 1);
++ FEC_srst(state);
++ }
++ if (SIG1 > 110)
++ wait_t = ( 786432 + state->srate / 2) / state->srate;
++ else
++ wait_t = (1572864 + state->srate / 2) / state->srate;
++
++ msleep_interruptible(wait_t);
++ SEQ_set(state, 1);
++ } else { // 1/2, 2/3, 3/4, 7/8
++ if (SIG1 > 110)
++ wait_t = ( 786432 + state->srate / 2) / state->srate;
++ else
++ wait_t = (1572864 + state->srate / 2) / state->srate;
++
++ msleep_interruptible(wait_t);
++ SEQ_set(state, 1);
++ }
++ } else {
++ dprintk(verbose, MB86A16_INFO, 1, "NO -- SIGNAL");
++ SEQ_set(state, 1);
++ }
++ }
++ } else {
++ dprintk (verbose, MB86A16_INFO, 1, "NO -- SIGNAL");
++ }
++
++ sync = sync_chk(state, &junk);
++ if (sync) {
++ dprintk(verbose, MB86A16_INFO, 1, "******* SYNC *******");
++ freqerr_chk(state, state->frequency, state->srate, 1);
++ }
++ }
++
++ mb86a16_read(state, 0x15, &agcval);
++ mb86a16_read(state, 0x26, &cnmval);
++ dprintk(verbose, MB86A16_INFO, 1, "AGC = %02x CNM = %02x", agcval, cnmval);
++
++ return ret;
++}
++
++static int mb86a16_send_diseqc_msg(struct dvb_frontend *fe,
++ struct dvb_diseqc_master_cmd *cmd)
++{
++ struct mb86a16_state *state = fe->demodulator_priv;
++ int i;
++ u8 regs;
++
++ if (mb86a16_write(state, MB86A16_DCC1, MB86A16_DCC1_DISTA) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCCOUT, 0x00) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_TONEOUT2, 0x04) < 0)
++ goto err;
++
++ regs = 0x18;
++
++ if (cmd->msg_len > 5 || cmd->msg_len < 4)
++ return -EINVAL;
++
++ for (i = 0; i < cmd->msg_len; i++) {
++ if (mb86a16_write(state, regs, cmd->msg[i]) < 0)
++ goto err;
++
++ regs++;
++ }
++ i += 0x90;
++
++ msleep_interruptible(10);
++
++ if (mb86a16_write(state, MB86A16_DCC1, i) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCCOUT, MB86A16_DCCOUT_DISEN) < 0)
++ goto err;
++
++ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int mb86a16_send_diseqc_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t burst)
++{
++ struct mb86a16_state *state = fe->demodulator_priv;
++
++ switch (burst) {
++ case SEC_MINI_A:
++ if (mb86a16_write(state, MB86A16_DCC1, MB86A16_DCC1_DISTA |
++ MB86A16_DCC1_TBEN |
++ MB86A16_DCC1_TBO) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCCOUT, MB86A16_DCCOUT_DISEN) < 0)
++ goto err;
++ break;
++ case SEC_MINI_B:
++ if (mb86a16_write(state, MB86A16_DCC1, MB86A16_DCC1_DISTA |
++ MB86A16_DCC1_TBEN) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCCOUT, MB86A16_DCCOUT_DISEN) < 0)
++ goto err;
++ break;
++ }
++
++ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++static int mb86a16_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
++{
++ struct mb86a16_state *state = fe->demodulator_priv;
++
++ switch (tone) {
++ case SEC_TONE_ON:
++ if (mb86a16_write(state, MB86A16_TONEOUT2, 0x00) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCC1, MB86A16_DCC1_DISTA |
++ MB86A16_DCC1_CTOE) < 0)
++
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCCOUT, MB86A16_DCCOUT_DISEN) < 0)
++ goto err;
++ break;
++ case SEC_TONE_OFF:
++ if (mb86a16_write(state, MB86A16_TONEOUT2, 0x04) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCC1, MB86A16_DCC1_DISTA) < 0)
++ goto err;
++ if (mb86a16_write(state, MB86A16_DCCOUT, 0x00) < 0)
++ goto err;
++ break;
++ default:
++ return -EINVAL;
++ }
++ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++}
++
++#define MB86A16_FE_ALGO 1
++
++static int mb86a16_frontend_algo(struct dvb_frontend *fe)
++{
++ return MB86A16_FE_ALGO;
++}
++
++static int mb86a16_set_frontend(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *p,
++ unsigned int mode_flags,
++ int *delay,
++ fe_status_t *status)
++{
++ int ret = 0;
++ struct mb86a16_state *state = fe->demodulator_priv;
++
++ if (p != NULL) {
++ state->frequency = p->frequency / 1000;
++ state->srate = p->u.qpsk.symbol_rate / 1000;
++ ret = mb86a16_set_fe(state);
++ }
++ if (!(mode_flags & FE_TUNE_MODE_ONESHOT))
++ mb86a16_read_status(fe, status);
++
++ *delay = HZ/3000;
++
++ return ret;
++}
++
++static void mb86a16_release(struct dvb_frontend *fe)
++{
++ struct mb86a16_state *state = fe->demodulator_priv;
++ kfree(state);
++}
++
++static int mb86a16_init(struct dvb_frontend *fe)
++{
++ return 0;
++}
++
++static int mb86a16_sleep(struct dvb_frontend *fe)
++{
++ return 0;
++}
++
++static int mb86a16_read_ber(struct dvb_frontend *fe, u32 *ber)
++{
++ return 0;
++}
++
++static int mb86a16_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
++{
++ *strength = 0;
++
++ return 0;
++}
++
++struct cnr {
++ u8 cn_reg;
++ u8 cn_val;
++};
++
++static const struct cnr cnr_tab[] = {
++ { 35, 2 },
++ { 40, 3 },
++ { 50, 4 },
++ { 60, 5 },
++ { 70, 6 },
++ { 80, 7 },
++ { 92, 8 },
++ { 103, 9 },
++ { 115, 10 },
++ { 138, 12 },
++ { 162, 15 },
++ { 180, 18 },
++ { 185, 19 },
++ { 189, 20 },
++ { 195, 22 },
++ { 199, 24 },
++ { 201, 25 },
++ { 202, 26 },
++ { 203, 27 },
++ { 205, 28 },
++ { 208, 30 }
++};
++
++static int mb86a16_read_snr(struct dvb_frontend *fe, u16 *snr)
++{
++ struct mb86a16_state *state = fe->demodulator_priv;
++ int i = 0;
++ int low_tide = 2, high_tide = 30, q_level;
++ u8 cn;
++
++ if (mb86a16_read(state, 0x26, &cn) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ for (i = 0; i < ARRAY_SIZE(cnr_tab); i++) {
++ if (cn < cnr_tab[i].cn_reg) {
++ *snr = cnr_tab[i].cn_val;
++ break;
++ }
++ }
++ q_level = (*snr * 100) / (high_tide - low_tide);
++ dprintk(verbose, MB86A16_ERROR, 1, "SNR (Quality) = [%d dB], Level=%d %%", *snr, q_level);
++
++ return 0;
++}
++
++static int mb86a16_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
++{
++ return 0;
++}
++
++static struct dvb_frontend_ops mb86a16_ops = {
++ .info = {
++ .name = "Fujitsu MB86A16 DVB-S",
++ .type = FE_QPSK,
++ .frequency_min = 950000,
++ .frequency_max = 2150000,
++ .frequency_stepsize = 125,
++ .frequency_tolerance = 0,
++ .symbol_rate_min = 1000000,
++ .symbol_rate_max = 45000000,
++ .symbol_rate_tolerance = 500,
++ .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 |
++ FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 |
++ FE_CAN_FEC_7_8 | FE_CAN_QPSK |
++ FE_CAN_FEC_AUTO
++ },
++ .release = mb86a16_release,
++ .tune = mb86a16_set_frontend,
++ .read_status = mb86a16_read_status,
++ .get_frontend_algo = mb86a16_frontend_algo,
++ .init = mb86a16_init,
++ .sleep = mb86a16_sleep,
++ .read_status = mb86a16_read_status,
++
++ .read_ber = mb86a16_read_ber,
++ .read_signal_strength = mb86a16_read_signal_strength,
++ .read_snr = mb86a16_read_snr,
++ .read_ucblocks = mb86a16_read_ucblocks,
++
++ .diseqc_send_master_cmd = mb86a16_send_diseqc_msg,
++ .diseqc_send_burst = mb86a16_send_diseqc_burst,
++ .set_tone = mb86a16_set_tone,
++};
++
++struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
++ struct i2c_adapter *i2c_adap)
++{
++ u8 dev_id = 0;
++ struct mb86a16_state *state = NULL;
++
++ state = kmalloc(sizeof (struct mb86a16_state), GFP_KERNEL);
++ if (state == NULL)
++ goto error;
++
++ state->config = config;
++ state->i2c_adap = i2c_adap;
++
++ mb86a16_read(state, 0x7f, &dev_id);
++ if (dev_id != 0xfe)
++ goto error;
++
++ memcpy(&state->frontend.ops, &mb86a16_ops, sizeof (struct dvb_frontend_ops));
++ state->frontend.demodulator_priv = state;
++ state->frontend.ops.set_voltage = state->config->set_voltage;
++
++ return &state->frontend;
++error:
++ kfree(state);
++ return NULL;
++}
++EXPORT_SYMBOL(mb86a16_attach);
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Manu Abraham");
+diff --git a/drivers/media/dvb/frontends/mb86a16.h b/drivers/media/dvb/frontends/mb86a16.h
+new file mode 100644
+index 0000000..b7545d0
+--- /dev/null
++++ b/drivers/media/dvb/frontends/mb86a16.h
+@@ -0,0 +1,38 @@
++/*
++ Fujitsu MB86A16 DVB-S/DSS DC Receiver driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MB86A16_H
++#define __MB86A16_H
++
++#include <linux/dvb/frontend.h>
++#include "dvb_frontend.h"
++
++
++struct mb86a16_config {
++ u8 demod_address;
++
++ int (*set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
++};
++
++extern struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
++ struct i2c_adapter *i2c_adap);
++
++
++#endif //__MB86A16_H
+diff --git a/drivers/media/dvb/frontends/mb86a16_priv.h b/drivers/media/dvb/frontends/mb86a16_priv.h
+new file mode 100644
+index 0000000..5de5700
+--- /dev/null
++++ b/drivers/media/dvb/frontends/mb86a16_priv.h
+@@ -0,0 +1,151 @@
++/*
++ Fujitsu MB86A16 DVB-S/DSS DC Receiver driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MB86A16_PRIV_H
++#define __MB86A16_PRIV_H
++
++#define MB86A16_TSOUT 0x00
++#define MB86A16_TSOUT_HIZSEL (0x01 << 5)
++#define MB86A16_TSOUT_HIZCNTI (0x01 << 4)
++#define MB86A16_TSOUT_MODE (0x01 << 3)
++#define MB86A16_TSOUT_ORDER (0x01 << 2)
++#define MB86A16_TSOUT_ERROR (0x01 << 1)
++#define Mb86A16_TSOUT_EDGE (0x01 << 0)
++
++#define MB86A16_FEC 0x01
++#define MB86A16_FEC_FSYNC (0x01 << 5)
++#define MB86A16_FEC_PCKB8 (0x01 << 4)
++#define MB86A16_FEC_DVDS (0x01 << 3)
++#define MB86A16_FEC_EREN (0x01 << 2)
++#define Mb86A16_FEC_RSEN (0x01 << 1)
++#define MB86A16_FEC_DIEN (0x01 << 0)
++
++#define MB86A16_AGC 0x02
++#define MB86A16_AGC_AGMD (0x01 << 6)
++#define MB86A16_AGC_AGCW (0x0f << 2)
++#define MB86A16_AGC_AGCP (0x01 << 1)
++#define MB86A16_AGC_AGCR (0x01 << 0)
++
++#define MB86A16_SRATE1 0x03
++#define MB86A16_SRATE1_DECI (0x07 << 2)
++#define MB86A16_SRATE1_CSEL (0x01 << 1)
++#define MB86A16_SRATE1_RSEL (0x01 << 0)
++
++#define MB86A16_SRATE2 0x04
++#define MB86A16_SRATE2_STOFSL (0xff << 0)
++
++#define MB86A16_SRATE3 0x05
++#define MB86A16_SRATE2_STOFSH (0xff << 0)
++
++#define MB86A16_VITERBI 0x06
++#define MB86A16_FRAMESYNC 0x07
++#define MB86A16_CRLFILTCOEF1 0x08
++#define MB86A16_CRLFILTCOEF2 0x09
++#define MB86A16_STRFILTCOEF1 0x0a
++#define MB86A16_STRFILTCOEF2 0x0b
++#define MB86A16_RESET 0x0c
++#define MB86A16_STATUS 0x0d
++#define MB86A16_AFCML 0x0e
++#define MB86A16_AFCMH 0x0f
++#define MB86A16_BERMON 0x10
++#define MB86A16_BERTAB 0x11
++#define MB86A16_BERLSB 0x12
++#define MB86A16_BERMID 0x13
++#define MB86A16_BERMSB 0x14
++#define MB86A16_AGCM 0x15
++
++#define MB86A16_DCC1 0x16
++#define MB86A16_DCC1_DISTA (0x01 << 7)
++#define MB86A16_DCC1_PRTY (0x01 << 6)
++#define MB86A16_DCC1_CTOE (0x01 << 5)
++#define MB86A16_DCC1_TBEN (0x01 << 4)
++#define MB86A16_DCC1_TBO (0x01 << 3)
++#define MB86A16_DCC1_NUM (0x07 << 0)
++
++#define MB86A16_DCC2 0x17
++#define MB86A16_DCC2_DCBST (0x01 << 0)
++
++#define MB86A16_DCC3 0x18
++#define MB86A16_DCC3_CODE0 (0xff << 0)
++
++#define MB86A16_DCC4 0x19
++#define MB86A16_DCC4_CODE1 (0xff << 0)
++
++#define MB86A16_DCC5 0x1a
++#define MB86A16_DCC5_CODE2 (0xff << 0)
++
++#define MB86A16_DCC6 0x1b
++#define MB86A16_DCC6_CODE3 (0xff << 0)
++
++#define MB86A16_DCC7 0x1c
++#define MB86A16_DCC7_CODE4 (0xff << 0)
++
++#define MB86A16_DCC8 0x1d
++#define MB86A16_DCC8_CODE5 (0xff << 0)
++
++#define MB86A16_DCCOUT 0x1e
++#define MB86A16_DCCOUT_DISEN (0x01 << 0)
++
++#define MB86A16_TONEOUT1 0x1f
++#define MB86A16_TONE_TDIVL (0xff << 0)
++
++#define MB86A16_TONEOUT2 0x20
++#define MB86A16_TONE_TMD (0x03 << 2)
++#define MB86A16_TONE_TDIVH (0x03 << 0)
++
++#define MB86A16_FREQ1 0x21
++#define MB86A16_FREQ2 0x22
++#define MB86A16_FREQ3 0x23
++#define MB86A16_FREQ4 0x24
++#define MB86A16_FREQSET 0x25
++#define MB86A16_CNM 0x26
++#define MB86A16_PORT0 0x27
++#define MB86A16_PORT1 0x28
++#define MB86A16_DRCFILT 0x29
++#define MB86A16_AFC 0x2a
++#define MB86A16_AFCEXL 0x2b
++#define MB86A16_AFCEXH 0x2c
++#define MB86A16_DAGC 0x2d
++#define MB86A16_SEQMODE 0x32
++#define MB86A16_S0S1T 0x33
++#define MB86A16_S2S3T 0x34
++#define MB86A16_S4S5T 0x35
++#define MB86A16_CNTMR 0x36
++#define MB86A16_SIG1 0x37
++#define MB86A16_SIG2 0x38
++#define MB86A16_VIMAG 0x39
++#define MB86A16_VISET1 0x3a
++#define MB86A16_VISET2 0x3b
++#define MB86A16_VISET3 0x3c
++#define MB86A16_FAGCS1 0x3d
++#define MB86A16_FAGCS2 0x3e
++#define MB86A16_FAGCS3 0x3f
++#define MB86A16_FAGCS4 0x40
++#define MB86A16_FAGCS5 0x41
++#define MB86A16_FAGCS6 0x42
++#define MB86A16_CRM 0x43
++#define MB86A16_STRM 0x44
++#define MB86A16_DAGCML 0x45
++#define MB86A16_DAGCMH 0x46
++#define MB86A16_QPSKTST 0x49
++#define MB86A16_DISTMON 0x52
++#define MB86A16_VERSION 0x7f
++
++#endif //__MB86A16_PRIV_H
+diff --git a/drivers/media/dvb/mantis/Kconfig b/drivers/media/dvb/mantis/Kconfig
+new file mode 100644
+index 0000000..4ba16d0
+--- /dev/null
++++ b/drivers/media/dvb/mantis/Kconfig
+@@ -0,0 +1,13 @@
++config DVB_MANTIS
++ tristate "MANTIS based cards"
++ depends on DVB_CORE && PCI && I2C
++ select DVB_MB86A16
++ select DVB_CU1216
++ select DVB_ZL10353
++ select DVB_STV0299
++ select DVB_PLL
++ help
++ Support for PCI cards based on the Mantis PCI bridge.
++ Say Y when you have a Mantis based DVB card and want to use it.
++
++ If unsure say N.
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+new file mode 100644
+index 0000000..a980ff2
+--- /dev/null
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -0,0 +1,7 @@
++mantis-objs = mantis_core.o mantis_dma.o mantis_pci.o mantis_i2c.o \
++ mantis_dvb.o mantis_vp1033.o mantis_vp1034.o mantis_vp2033.o \
++ mantis_vp3030.o
++
++obj-$(CONFIG_DVB_MANTIS) += mantis.o
++
++EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ -Idrivers/media/dvb/frontends/
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+new file mode 100644
+index 0000000..ba360f8
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -0,0 +1,135 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_COMMON_H
++#define __MANTIS_COMMON_H
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/pci.h>
++
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dmxdev.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++#include <linux/i2c.h>
++#include "mantis_reg.h"
++
++#define MANTIS_ERROR 0
++#define MANTIS_NOTICE 1
++#define MANTIS_INFO 2
++#define MANTIS_DEBUG 3
++
++#define dprintk(x, y, z, format, arg...) do { \
++ if (z) { \
++ if ((x > MANTIS_ERROR) && (x > y)) \
++ printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
++ else if ((x > MANTIS_NOTICE) && (x > y)) \
++ printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
++ else if ((x > MANTIS_INFO) && (x > y)) \
++ printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
++ else if ((x > MANTIS_DEBUG) && (x > y)) \
++ printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
++ } else { \
++ if (x > y) \
++ printk(format , ##arg); \
++ } \
++} while(0)
++
++#define mwrite(dat, addr) writel((dat), addr)
++#define mread(addr) readl(addr)
++
++#define mmwrite(dat, addr) mwrite((dat), (mantis->mantis_mmio + (addr)))
++#define mmread(addr) mread(mantis->mantis_mmio + (addr))
++#define mmand(dat, addr) mmwrite((dat) & mmread(addr), addr)
++#define mmor(dat, addr) mmwrite((dat) | mmread(addr), addr)
++#define mmaor(dat, addr) mmwrite((dat) | ((mask) & mmread(addr)), addr)
++
++
++struct mantis_pci {
++ /* PCI stuff */
++ u16 vendor_id;
++ u16 device_id;
++ u8 latency;
++
++ struct pci_dev *pdev;
++
++ unsigned long mantis_addr;
++ volatile void __iomem *mantis_mmio;
++
++ u8 irq;
++ u8 revision;
++
++ unsigned int num;
++ u16 ts_size;
++
++ /* RISC Core */
++ u32 finished_block;
++ u32 last_block;
++ u32 line_bytes;
++ u32 line_count;
++ u32 risc_pos;
++ u8 *buf_cpu;
++ dma_addr_t buf_dma;
++ u32 *risc_cpu;
++ dma_addr_t risc_dma;
++
++ struct tasklet_struct tasklet;
++
++ struct i2c_adapter adapter;
++ int i2c_rc;
++ wait_queue_head_t i2c_wq;
++
++ /* DVB stuff */
++ struct dvb_adapter dvb_adapter;
++ struct dvb_frontend *fe;
++ struct dvb_demux demux;
++ struct dmxdev dmxdev;
++ struct dmx_frontend fe_hw;
++ struct dmx_frontend fe_mem;
++ struct dvb_net dvbnet;
++
++ u8 feeds;
++
++ struct mantis_config *config;
++
++ u32 mantis_int_stat;
++ u32 mantis_int_mask;
++
++ /* board specific */
++ u8 mac_address[8];
++ u32 sub_vendor_id;
++ u32 sub_device_id;
++
++ /* A12 A13 A14 */
++ int gpio_status;};
++
++extern unsigned int verbose;
++extern unsigned int devs;
++extern unsigned int i2c;
++extern int mantis_dvb_init(struct mantis_pci *mantis);
++extern int mantis_frontend_init(struct mantis_pci *mantis);
++extern int mantis_dvb_exit(struct mantis_pci *mantis);
++extern void mantis_dma_xfer(unsigned long data);
++extern void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value);
++
++#endif //__MANTIS_COMMON_H
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+new file mode 100644
+index 0000000..1112277
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -0,0 +1,215 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_core.h"
++
++
++static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
++{
++ int err;
++ struct i2c_msg msg[] = {
++ {
++ .addr = 0x50,
++ .flags = 0,
++ .buf = data,
++ .len = 1
++ },{
++ .addr = 0x50,
++ .flags = I2C_M_RD,
++ .buf = data,
++ .len = length
++ },
++ };
++ if ((err = i2c_transfer(&mantis->adapter, msg, 2)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "ERROR: i2c read: < err=%i d0=0x%02x d1=0x%02x >",
++ err, data[0], data[1]);
++
++ return err;
++ }
++ msleep_interruptible(2);
++
++ return 0;
++}
++
++static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
++{
++ int err;
++
++ struct i2c_msg msg = {
++ .addr = 0x50,
++ .flags = 0,
++ .buf = data,
++ .len = length
++ };
++
++ if ((err = i2c_transfer(&mantis->adapter, &msg, 1)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "ERROR: i2c write: < err=%i length=0x%02x d0=0x%02x, d1=0x%02x >",
++ err, length, data[0], data[1]);
++
++ return err;
++ }
++
++ return 0;
++}
++
++static int get_subdevice_id(struct mantis_pci *mantis)
++{
++ int err;
++ static u8 sub_device_id[2];
++
++ mantis->sub_device_id = 0;
++ sub_device_id[0] = 0xfc;
++ if ((err = read_eeprom_byte(mantis, &sub_device_id[0], 2)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
++ return err;
++ }
++ mantis->sub_device_id = (sub_device_id[0] << 8) | sub_device_id[1];
++ dprintk(verbose, MANTIS_ERROR, 1, "Sub Device ID=[0x%04x]",
++ mantis->sub_device_id);
++
++ return 0;
++}
++
++static int get_subvendor_id(struct mantis_pci *mantis)
++{
++ int err;
++ static u8 sub_vendor_id[2];
++
++ mantis->sub_vendor_id = 0;
++ sub_vendor_id[0] = 0xfe;
++ if ((err = read_eeprom_byte(mantis, &sub_vendor_id[0], 2)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
++ return err;
++ }
++ mantis->sub_vendor_id = (sub_vendor_id[0] << 8) | sub_vendor_id[1];
++ dprintk(verbose, MANTIS_ERROR, 1, "Sub Vendor ID=[0x%04x]",
++ mantis->sub_vendor_id);
++
++ return 0;
++}
++
++static int get_mac_address(struct mantis_pci *mantis)
++{
++ int err;
++
++ mantis->mac_address[0] = 0x08;
++ if ((err = read_eeprom_byte(mantis, &mantis->mac_address[0], 6)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
++
++ return err;
++ }
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]",
++ mantis->mac_address[0], mantis->mac_address[1],
++ mantis->mac_address[2], mantis->mac_address[3],
++ mantis->mac_address[4], mantis->mac_address[5]);
++
++ return 0;
++}
++
++
++int mantis_core_init(struct mantis_pci *mantis)
++{
++ int err = 0;
++
++ if ((err = mantis_i2c_init(mantis)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis I2C init failed");
++ return err;
++ }
++ if ((err = get_mac_address(mantis)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "get MAC address failed");
++ return err;
++ }
++ if ((err = get_subvendor_id(mantis)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "get Sub vendor ID failed");
++ return err;
++ }
++ if ((err = get_subdevice_id(mantis)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "get Sub device ID failed");
++ return err;
++ }
++ if ((err = mantis_dma_init(mantis)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis DMA init failed");
++ return err;
++ }
++ if ((err = mantis_dvb_init(mantis)) < 0) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB init failed");
++ return err;
++ }
++
++ return 0;
++}
++
++int mantis_core_exit(struct mantis_pci *mantis)
++{
++
++ mantis_dma_stop(mantis);
++ dprintk(verbose, MANTIS_ERROR, 1, "DMA engine stopping");
++ if (mantis_dma_exit(mantis) < 0)
++ dprintk(verbose, MANTIS_ERROR, 1, "DMA exit failed");
++ if (mantis_dvb_exit(mantis) < 0)
++ dprintk(verbose, MANTIS_ERROR, 1, "DVB exit failed");
++ if (mantis_i2c_exit(mantis) < 0)
++ dprintk(verbose, MANTIS_ERROR, 1, "I2C adapter delete.. failed");
++
++ return 0;
++}
++
++void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
++{
++ u32 reg;
++
++ if (value)
++ reg = 0x0000;
++ else
++ reg = 0xffff;
++
++ reg = (value << bitpos);
++
++ mmwrite(mmread(MANTIS_GPIF_ADDR) | reg, MANTIS_GPIF_ADDR);
++ mmwrite(0x00, MANTIS_GPIF_DOUT);
++ udelay(100);
++ mmwrite(mmread(MANTIS_GPIF_ADDR) | reg, MANTIS_GPIF_ADDR);
++ mmwrite(0x00, MANTIS_GPIF_DOUT);
++}
++
++
++//direction = 0 , no CI passthrough ; 1 , CI passthrough
++void mantis_set_direction(struct mantis_pci *mantis, int direction)
++{
++ u32 reg;
++
++ reg = mmread(0x28);
++ dprintk(verbose, MANTIS_DEBUG, 1, "TS direction setup");
++ if (direction == 0x01) { //to CI
++ reg |= 0x04;
++ mmwrite(reg, 0x28);
++ reg &= 0xff - 0x04;
++ mmwrite(reg, 0x28);
++ } else {
++ reg &= 0xff - 0x04;
++ mmwrite(reg, 0x28);
++ reg |= 0x04;
++ mmwrite(reg, 0x28);
++ }
++}
+diff --git a/drivers/media/dvb/mantis/mantis_core.h b/drivers/media/dvb/mantis/mantis_core.h
+new file mode 100644
+index 0000000..31b2a75
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_core.h
+@@ -0,0 +1,61 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_CORE_H
++#define __MANTIS_CORE_H
++
++#include "mantis_common.h"
++
++
++#define FE_TYPE_SAT 0
++#define FE_TYPE_CAB 1
++#define FE_TYPE_TER 2
++
++#define FE_TYPE_TS204 0
++#define FE_TYPE_TS188 1
++
++
++struct vendorname {
++ __u8 *sub_vendor_name;
++ __u32 sub_vendor_id;
++};
++
++struct devicetype {
++ __u8 *sub_device_name;
++ __u32 sub_device_id;
++ __u8 device_type;
++ __u32 type_flags;
++};
++
++
++extern int mantis_dma_init(struct mantis_pci *mantis);
++extern int mantis_dma_exit(struct mantis_pci *mantis);
++extern void mantis_dma_start(struct mantis_pci *mantis);
++extern void mantis_dma_stop(struct mantis_pci *mantis);
++extern int mantis_i2c_init(struct mantis_pci *mantis);
++extern int mantis_i2c_exit(struct mantis_pci *mantis);
++extern int mantis_core_init(struct mantis_pci *mantis);
++extern int mantis_core_exit(struct mantis_pci *mantis);
++//extern void mantis_fe_powerup(struct mantis_pci *mantis);
++//extern void mantis_fe_powerdown(struct mantis_pci *mantis);
++//extern void mantis_fe_reset(struct dvb_frontend *fe);
++extern void mantis_set_direction(struct mantis_pci *mantis, int direction);
++
++#endif //__MANTIS_CORE_H
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+new file mode 100644
+index 0000000..9e3aa5e
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -0,0 +1,238 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <asm/page.h>
++#include <linux/vmalloc.h>
++#include "mantis_common.h"
++
++#define RISC_WRITE (0x01 << 28)
++#define RISC_JUMP (0x07 << 28)
++#define RISC_IRQ (0x01 << 24)
++
++#define RISC_STATUS(status) ((((~status) & 0x0f) << 20) | ((status & 0x0f) << 16))
++#define RISC_FLUSH() mantis->risc_pos = 0
++#define RISC_INSTR(opcode) mantis->risc_cpu[mantis->risc_pos++] = cpu_to_le32(opcode)
++
++#define MANTIS_BUF_SIZE 64 * 1024
++#define MANTIS_BLOCK_BYTES (MANTIS_BUF_SIZE >> 4)
++#define MANTIS_BLOCK_COUNT (1 << 4)
++#define MANTIS_RISC_SIZE PAGE_SIZE
++
++int mantis_dma_exit(struct mantis_pci *mantis)
++{
++ if (mantis->buf_cpu) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "DMA=0x%lx cpu=0x%p size=%d",
++ (unsigned long) mantis->buf_dma,
++ mantis->buf_cpu,
++ MANTIS_BUF_SIZE);
++
++ pci_free_consistent(mantis->pdev, MANTIS_BUF_SIZE,
++ mantis->buf_cpu, mantis->buf_dma);
++
++ mantis->buf_cpu = NULL;
++ }
++ if (mantis->risc_cpu) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "RISC=0x%lx cpu=0x%p size=%lx",
++ (unsigned long) mantis->risc_dma,
++ mantis->risc_cpu,
++ MANTIS_RISC_SIZE);
++
++ pci_free_consistent(mantis->pdev, MANTIS_RISC_SIZE,
++ mantis->risc_cpu, mantis->risc_dma);
++
++ mantis->risc_cpu = NULL;
++ }
++
++ return 0;
++}
++
++static inline int mantis_alloc_buffers(struct mantis_pci *mantis)
++{
++ if (!mantis->buf_cpu) {
++ mantis->buf_cpu = pci_alloc_consistent(mantis->pdev,
++ MANTIS_BUF_SIZE,
++ &mantis->buf_dma);
++ if (!mantis->buf_cpu) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "DMA buffer allocation failed");
++
++ goto err;
++ }
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "DMA=0x%lx cpu=0x%p size=%d",
++ (unsigned long) mantis->buf_dma,
++ mantis->buf_cpu, MANTIS_BUF_SIZE);
++ }
++ if (!mantis->risc_cpu) {
++ mantis->risc_cpu = pci_alloc_consistent(mantis->pdev,
++ MANTIS_RISC_SIZE,
++ &mantis->risc_dma);
++
++ if (!mantis->risc_cpu) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "RISC program allocation failed");
++
++ mantis_dma_exit(mantis);
++
++ goto err;
++ }
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "RISC=0x%lx cpu=0x%p size=%lx",
++ (unsigned long) mantis->risc_dma,
++ mantis->risc_cpu, MANTIS_RISC_SIZE);
++ }
++
++ return 0;
++err:
++ dprintk(verbose, MANTIS_ERROR, 1, "Out of memory (?) .....");
++ return -ENOMEM;
++}
++
++static inline int mantis_calc_lines(struct mantis_pci *mantis)
++{
++ mantis->line_bytes = MANTIS_BLOCK_BYTES;
++ mantis->line_count = MANTIS_BLOCK_COUNT;
++
++ while (mantis->line_bytes > 4095) {
++ mantis->line_bytes >>= 1;
++ mantis->line_count <<= 1;
++ }
++
++ dprintk(verbose, MANTIS_DEBUG, 1,
++ "Mantis RISC block bytes=[%d], line bytes=[%d], line count=[%d]",
++ MANTIS_BLOCK_BYTES, mantis->line_bytes, mantis->line_count);
++
++ if (mantis->line_count > 255) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Buffer size error");
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++int mantis_dma_init(struct mantis_pci *mantis)
++{
++ int err = 0;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DMA init");
++ if (mantis_alloc_buffers(mantis) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Error allocating DMA buffer");
++
++ // Stop RISC Engine
++// mmwrite(mmread(MANTIS_DMA_CTL) & ~MANTIS_RISC_EN, MANTIS_DMA_CTL);
++ mmwrite(0, MANTIS_DMA_CTL);
++
++ goto err;
++ }
++ if ((err = mantis_calc_lines(mantis)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis calc lines failed");
++
++ goto err;
++ }
++
++ return 0;
++err:
++ return err;
++}
++
++
++
++static inline void mantis_risc_program(struct mantis_pci *mantis)
++{
++ u32 buf_pos = 0;
++ u32 line;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis create RISC program");
++ RISC_FLUSH();
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "risc len lines %u, bytes per line %u",
++ mantis->line_count, mantis->line_bytes);
++
++ for (line = 0; line < mantis->line_count; line++) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "RISC PROG line=[%d]", line);
++ if (!(buf_pos % MANTIS_BLOCK_BYTES)) {
++ RISC_INSTR(RISC_WRITE |
++ RISC_IRQ |
++ RISC_STATUS(((buf_pos / MANTIS_BLOCK_BYTES) +
++ (MANTIS_BLOCK_COUNT - 1)) %
++ MANTIS_BLOCK_COUNT) |
++ mantis->line_bytes);
++ } else {
++ RISC_INSTR(RISC_WRITE | mantis->line_bytes);
++ }
++ RISC_INSTR(mantis->buf_dma + buf_pos);
++ buf_pos += mantis->line_bytes;
++ }
++ RISC_INSTR(RISC_JUMP);
++ RISC_INSTR(mantis->risc_dma);
++}
++
++void mantis_dma_start(struct mantis_pci *mantis)
++{
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Start DMA engine");
++
++ mantis_risc_program(mantis);
++ mmwrite(cpu_to_le32(mantis->risc_dma), MANTIS_RISC_START);
++ mmwrite(MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
++
++ mmwrite(0, MANTIS_DMA_CTL);
++ mantis->last_block = mantis->finished_block = 0;
++
++ mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_RISCI, MANTIS_INT_MASK);
++
++ mmwrite(MANTIS_FIFO_EN | MANTIS_DCAP_EN
++ | MANTIS_RISC_EN, MANTIS_DMA_CTL);
++
++}
++
++void mantis_dma_stop(struct mantis_pci *mantis)
++{
++ u32 stat = 0, mask = 0;
++
++ stat = mmread(MANTIS_INT_STAT);
++ mask = mmread(MANTIS_INT_MASK);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Stop DMA engine");
++
++ mmwrite((mmread(MANTIS_DMA_CTL) & ~(MANTIS_FIFO_EN |
++ MANTIS_DCAP_EN |
++ MANTIS_RISC_EN)), MANTIS_DMA_CTL);
++
++ mmwrite(mmread(MANTIS_INT_STAT), MANTIS_INT_STAT);
++
++ mmwrite(mmread(MANTIS_INT_MASK) & ~(MANTIS_INT_RISCI |
++ MANTIS_INT_RISCEN), MANTIS_INT_MASK);
++}
++
++
++void mantis_dma_xfer(unsigned long data)
++{
++ struct mantis_pci *mantis = (struct mantis_pci *) data;
++
++ while (mantis->last_block != mantis->finished_block) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "last block=[%d] finished block=[%d]",
++ mantis->last_block, mantis->finished_block);
++
++ (mantis->ts_size ? dvb_dmx_swfilter_204: dvb_dmx_swfilter)
++ (&mantis->demux, &mantis->buf_cpu[mantis->last_block * MANTIS_BLOCK_BYTES], MANTIS_BLOCK_BYTES);
++ mantis->last_block = (mantis->last_block + 1) % MANTIS_BLOCK_COUNT;
++ }
++}
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+new file mode 100644
+index 0000000..5830d4a
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -0,0 +1,304 @@
++/*
++ Mantis PCI bridge driver
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <linux/bitops.h>
++#include "mantis_common.h"
++#include "mantis_core.h"
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "mantis_vp1033.h"
++#include "mantis_vp1034.h"
++#include "mantis_vp2033.h"
++#include "mantis_vp3030.h"
++
++/* Tuner power supply control */
++void mantis_fe_powerup(struct mantis_pci *mantis)
++{
++ dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Power ON");
++ gpio_set_bits(mantis, 0x0c, 1);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 0x0c, 1);
++ msleep_interruptible(100);
++}
++
++void mantis_fe_powerdown(struct mantis_pci *mantis)
++{
++ dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Power OFF");
++ gpio_set_bits(mantis, 0x0c, 0);
++}
++
++static int mantis_fe_reset(struct dvb_frontend *fe)
++{
++ struct mantis_pci *mantis = fe->dvb->priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Reset");
++ gpio_set_bits(mantis, 13, 0);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 13, 0);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 13, 1);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 13, 1);
++
++ return 0;
++}
++
++static int mantis_frontend_reset(struct mantis_pci *mantis)
++{
++ dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Reset");
++ gpio_set_bits(mantis, 13, 0);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 13, 0);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 13, 1);
++ msleep_interruptible(100);
++ gpio_set_bits(mantis, 13, 1);
++
++ return 0;
++}
++
++static int mantis_dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
++{
++ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
++ struct mantis_pci *mantis = dvbdmx->priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB Start feed");
++ if (!dvbdmx->dmx.frontend) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "no frontend ?");
++ return -EINVAL;
++ }
++ mantis->feeds++;
++ dprintk(verbose, MANTIS_DEBUG, 1,
++ "mantis start feed, feeds=%d",
++ mantis->feeds);
++
++ if (mantis->feeds == 1) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "mantis start feed & dma");
++ printk("mantis start feed & dma\n");
++ mantis_dma_start(mantis);
++ }
++
++ return mantis->feeds;
++}
++
++static int mantis_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
++{
++ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
++ struct mantis_pci *mantis = dvbdmx->priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB Stop feed");
++ if (!dvbdmx->dmx.frontend) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "no frontend ?");
++ return -EINVAL;
++ }
++ mantis->feeds--;
++ if (mantis->feeds == 0) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "mantis stop feed and dma");
++ printk("mantis stop feed and dma\n");
++ mantis_dma_stop(mantis);
++ }
++ return 0;
++}
++
++int __devinit mantis_dvb_init(struct mantis_pci *mantis)
++{
++ int result;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "dvb_register_adapter");
++ if (dvb_register_adapter(&mantis->dvb_adapter,
++ "Mantis dvb adapter", THIS_MODULE,
++ &mantis->pdev->dev) < 0) {
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Error registering adapter");
++ return -ENODEV;
++ }
++ mantis->dvb_adapter.priv = mantis;
++ mantis->demux.dmx.capabilities = DMX_TS_FILTERING |
++ DMX_SECTION_FILTERING |
++ DMX_MEMORY_BASED_FILTERING;
++
++ mantis->demux.priv = mantis;
++ mantis->demux.filternum = 256;
++ mantis->demux.feednum = 256;
++ mantis->demux.start_feed = mantis_dvb_start_feed;
++ mantis->demux.stop_feed = mantis_dvb_stop_feed;
++ mantis->demux.write_to_decoder = NULL;
++ mantis->ts_size = 1; //188
++ dprintk(verbose, MANTIS_DEBUG, 1, "dvb_dmx_init");
++ if ((result = dvb_dmx_init(&mantis->demux)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "dvb_dmx_init failed, ERROR=%d", result);
++
++ goto err0;
++ }
++ mantis->dmxdev.filternum = 256;
++ mantis->dmxdev.demux = &mantis->demux.dmx;
++ mantis->dmxdev.capabilities = 0;
++ dprintk(verbose, MANTIS_DEBUG, 1, "dvb_dmxdev_init");
++ if ((result = dvb_dmxdev_init(&mantis->dmxdev,
++ &mantis->dvb_adapter)) < 0) {
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "dvb_dmxdev_init failed, ERROR=%d", result);
++ goto err1;
++ }
++ mantis->fe_hw.source = DMX_FRONTEND_0;
++ if ((result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx,
++ &mantis->fe_hw)) < 0) {
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "dvb_dmx_init failed, ERROR=%d", result);
++
++ goto err2;
++ }
++ mantis->fe_mem.source = DMX_MEMORY_FE;
++ if ((result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx,
++ &mantis->fe_mem)) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "dvb_dmx_init failed, ERROR=%d", result);
++
++ goto err3;
++ }
++ if ((result = mantis->demux.dmx.connect_frontend(&mantis->demux.dmx,
++ &mantis->fe_hw)) < 0) {
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "dvb_dmx_init failed, ERROR=%d", result);
++
++ goto err4;
++ }
++ dvb_net_init(&mantis->dvb_adapter, &mantis->dvbnet, &mantis->demux.dmx);
++ tasklet_init(&mantis->tasklet, mantis_dma_xfer, (unsigned long) mantis);
++ mantis_frontend_init(mantis);
++ return 0;
++
++ /* Error conditions .. */
++err4:
++ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
++err3:
++ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_hw);
++err2:
++ dvb_dmxdev_release(&mantis->dmxdev);
++err1:
++ dvb_dmx_release(&mantis->demux);
++err0:
++ dvb_unregister_adapter(&mantis->dvb_adapter);
++
++ return result;
++}
++
++#define MANTIS_VP_1027_DVB_S 0x0013
++#define MANTIS_VP_1033_DVB_S 0x0016
++#define MANTIS_VP_1034_DVB_S 0x0014
++#define MANTIS_VP_1040_DVB_S2
++#define MANTIS_VP_1041_DVB_S2
++#define MANTIS_VP_2033_DVB_C 0x0008
++#define MANTIS_VP_3024_DVB_T 0x0009
++#define MANTIS_VP_3030_DVB_T 0x0024
++
++int __devinit mantis_frontend_init(struct mantis_pci *mantis)
++{
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis frontend Init");
++ mantis_fe_powerup(mantis);
++ mantis_frontend_reset(mantis);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Device ID=%02x", mantis->sub_device_id);
++ switch (mantis->sub_device_id) {
++ case MANTIS_VP_1033_DVB_S: // VP-1033
++ dprintk(verbose, MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
++ mantis->fe = stv0299_attach(&lgtdqcs001f_config,
++ &mantis->adapter);
++
++ if (mantis->fe) {
++ mantis->fe->ops.tuner_ops.set_params = lgtdqcs001f_tuner_set;
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found STV0299 DVB-S frontend @ 0x%02x",
++ lgtdqcs001f_config.demod_address);
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "Mantis DVB-S STV0299 frontend attach success");
++ }
++ break;
++ case MANTIS_VP_1034_DVB_S: // VP-1034
++ dprintk(verbose, MANTIS_ERROR, 1, "Probing for MB86A16 (DVB-S/DSS)");
++ mantis->fe = mb86a16_attach(&vp1034_config, &mantis->adapter);
++ if (mantis->fe) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found MB86A16 DVB-S/DSS frontend @0x%02x",
++ vp1034_config.demod_address);
++
++ }
++ break;
++ case MANTIS_VP_2033_DVB_C: // VP-2033
++ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ mantis->fe = cu1216_attach(&philips_cu1216_config, &mantis->adapter);
++ if (mantis->fe) {
++ mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend @ 0x%02x",
++ philips_cu1216_config.demod_address);
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "Mantis DVB-C Philips CU1216 frontend attach success");
++
++ }
++ break;
++ default:
++ dprintk(verbose, MANTIS_DEBUG, 1, "Unknown frontend:[0x%02x]",
++ mantis->sub_device_id);
++
++ return -ENODEV;
++ }
++ if (mantis->fe == NULL) {
++ dprintk(verbose, MANTIS_ERROR, 1, "!!! NO Frontends found !!!");
++ return -ENODEV;
++ } else {
++ if (dvb_register_frontend(&mantis->dvb_adapter, mantis->fe)) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "ERROR: Frontend registration failed");
++
++ if (mantis->fe->ops.release)
++ mantis->fe->ops.release(mantis->fe);
++
++ mantis->fe = NULL;
++ return -ENODEV;
++ }
++ }
++
++ return 0;
++}
++
++int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
++{
++ tasklet_kill(&mantis->tasklet);
++ dvb_net_release(&mantis->dvbnet);
++ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
++ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_hw);
++ dvb_dmxdev_release(&mantis->dmxdev);
++ dvb_dmx_release(&mantis->demux);
++
++ if (mantis->fe)
++ dvb_unregister_frontend(mantis->fe);
++ dprintk(verbose, MANTIS_DEBUG, 1, "dvb_unregister_adapter");
++ dvb_unregister_adapter(&mantis->dvb_adapter);
++
++ return 0;
++}
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+new file mode 100644
+index 0000000..cfecb34
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -0,0 +1,189 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++#include <asm/io.h>
++#include <linux/ioport.h>
++#include <asm/pgtable.h>
++#include <asm/page.h>
++#include "mantis_common.h"
++
++#define I2C_HW_B_MANTIS 0x1c
++
++static int mantis_ack_wait(struct mantis_pci *mantis)
++{
++ int rc = 0;
++
++ if (wait_event_interruptible_timeout(mantis->i2c_wq,
++ mantis->mantis_int_stat & MANTIS_INT_I2CRACK,
++ msecs_to_jiffies(50)) == -ERESTARTSYS)
++
++ rc = -EREMOTEIO;
++/*
++ // Wait till we are done
++ while (mantis->mantis_int_stat & MANTIS_INT_I2CRACK){
++ if (mantis->mantis_int_stat & MANTIS_INT_I2CDONE) {
++ mantis->mantis_int_stat &= ~MANTIS_INT_I2CRACK;
++// dprintk(verbose, MANTIS_DEBUG, 1, "SLAVE RACK 'ed .. Waiting for I2CDONE");
++ break;
++ }
++ }
++
++ if (mantis->mantis_int_stat & MANTIS_INT_I2CDONE) {
++// dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Int I2CDONE");
++ rc = 1;
++ }
++
++ mantis->mantis_int_stat &= ~MANTIS_INT_I2CDONE;
++*/
++ // ..
++ if (mantis->mantis_int_stat & MANTIS_INT_I2CRACK)
++ msleep_interruptible(10);
++
++ return rc;
++}
++
++static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
++{
++ u32 rxd, i;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Address=[0x%02x]", msg->addr);
++ for (i = 0; i < msg->len; i++) {
++ rxd = (msg->addr << 25) | (1 << 24)
++ | MANTIS_I2C_RATE_3
++ | MANTIS_I2C_STOP
++ | MANTIS_I2C_PGMODE;
++
++ if (i == (msg->len - 1))
++ rxd &= ~MANTIS_I2C_STOP;
++
++ mmwrite(rxd, MANTIS_I2CDATA_CTL);
++ if (mantis_ack_wait(mantis) < 0) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<R>");
++ return -EIO;
++ }
++ rxd = mmread(MANTIS_I2CDATA_CTL);
++ msg->buf[i] = (u8)((rxd >> 8) & 0xFF);
++ dprintk(verbose, MANTIS_DEBUG, 1,
++ "Data<R[%d]>=[0x%02x]", i, msg->buf[i]);
++
++ msleep_interruptible(2);
++ }
++
++ return 0;
++}
++
++static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg)
++{
++ int i;
++ u32 txd = 0;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Address=[0x%02x]", msg->addr);
++ for (i = 0; i < msg->len; i++) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "Data<W[%d]>=[0x%02x]", i, msg->buf[i]);
++ txd = (msg->addr << 25) | (msg->buf[i] << 8)
++ | MANTIS_I2C_RATE_3
++ | MANTIS_I2C_STOP
++ | MANTIS_I2C_PGMODE;
++
++ if (i == (msg->len - 1))
++ txd &= ~MANTIS_I2C_STOP;
++
++ mmwrite(txd, MANTIS_I2CDATA_CTL);
++ if (mantis_ack_wait(mantis) < 0) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<W>");
++ return -1;
++ }
++ udelay(500);
++ }
++
++ return 0;
++}
++
++static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
++{
++ int ret = 0, i;
++ struct mantis_pci *mantis;
++
++ mantis = i2c_get_adapdata(adapter);
++ for (i = 0; i < num; i++) {
++ if (msgs[i].flags & I2C_M_RD)
++ ret = mantis_i2c_read(mantis, &msgs[i]);
++ else
++ ret = mantis_i2c_write(mantis, &msgs[i]);
++
++ if (ret < 0)
++ return ret;
++ }
++
++ return num;
++}
++
++static u32 mantis_i2c_func(struct i2c_adapter *adapter)
++{
++ return I2C_FUNC_SMBUS_EMUL;
++}
++
++static struct i2c_algorithm mantis_algo = {
++ .master_xfer = mantis_i2c_xfer,
++ .functionality = mantis_i2c_func,
++};
++
++static struct i2c_adapter mantis_i2c_adapter = {
++ .owner = THIS_MODULE,
++ .name = "Mantis I2C",
++ .id = I2C_HW_B_MANTIS,
++ .class = I2C_CLASS_TV_DIGITAL,
++ .algo = &mantis_algo,
++};
++
++int __devinit mantis_i2c_init(struct mantis_pci *mantis)
++{
++ u32 intstat;
++
++ memcpy(&mantis->adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
++ i2c_set_adapdata(&mantis->adapter, mantis);
++ mantis->i2c_rc = i2c_add_adapter(&mantis->adapter);
++ if (mantis->i2c_rc < 0)
++ return mantis->i2c_rc;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Initializing I2C ..");
++
++ // Clear all interrupts
++ intstat = mmread(MANTIS_INT_STAT);
++ mmwrite(intstat, MANTIS_INT_STAT);
++
++ mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_I2CDONE,
++ MANTIS_INT_MASK);
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "[0x%08x/%08x]",
++ mmread(MANTIS_INT_STAT), mmread(MANTIS_INT_MASK));
++
++ return 0;
++}
++
++int __devexit mantis_i2c_exit(struct mantis_pci *mantis)
++{
++ dprintk(verbose, MANTIS_DEBUG, 1, "Removing I2C adapter");
++ return i2c_del_adapter(&mantis->adapter);
++}
+diff --git a/drivers/media/dvb/mantis/mantis_reg.h b/drivers/media/dvb/mantis/mantis_reg.h
+new file mode 100644
+index 0000000..1b54e09
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_reg.h
+@@ -0,0 +1,109 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_REG_H
++#define __MANTIS_REG_H
++
++// Interrupts
++#define MANTIS_INT_STAT 0x00
++#define MANTIS_INT_MASK 0x04
++
++#define MANTIS_INT_RISCSTAT (0x0f << 28)
++#define MANTIS_INT_RISCEN (0x01 << 27)
++#define MANTIS_INT_I2CRACK (0x01 << 26)
++
++//#define MANTIS_INT_GPIF (0xff << 12)
++
++#define MANTIS_INT_PCMCIA7 (0x01 << 19)
++#define MANTIS_INT_PCMCIA6 (0x01 << 18)
++#define MANTIS_INT_PCMCIA5 (0x01 << 17)
++#define MANTIS_INT_PCMCIA4 (0x01 << 16)
++#define MANTIS_INT_PCMCIA3 (0x01 << 15)
++#define MANTIS_INT_PCMCIA2 (0x01 << 14)
++#define MANTIS_INT_PCMCIA1 (0x01 << 13)
++#define MANTIS_INT_PCMCIA0 (0x01 << 12)
++#define MANTIS_INT_IRQ1 (0x01 << 11)
++#define MANTIS_INT_IRQ0 (0x01 << 10)
++#define MANTIS_INT_OCERR (0x01 << 8)
++#define MANTIS_INT_PABORT (0x01 << 7)
++#define MANTIS_INT_RIPERR (0x01 << 6)
++#define MANTIS_INT_PPERR (0x01 << 5)
++#define MANTIS_INT_FTRGT (0x01 << 3)
++#define MANTIS_INT_RISCI (0x01 << 1)
++#define MANTIS_INT_I2CDONE (0x01 << 0)
++
++// DMA
++#define MANTIS_DMA_CTL 0x08
++#define MANTIS_I2C_RD (0x01 << 7)
++#define MANTIS_I2C_WR (0x01 << 6)
++#define MANTIS_DCAP_MODE (0x01 << 5)
++#define MANTIS_FIFO_TP_4 (0x00 << 3)
++#define MANTIS_FIFO_TP_8 (0x01 << 3)
++#define MANTIS_FIFO_TP_16 (0x02 << 3)
++#define MANTIS_FIFO_EN (0x01 << 2)
++#define MANTIS_DCAP_EN (0x01 << 1)
++#define MANTIS_RISC_EN (0x01 << 0)
++
++#define MANTIS_RISC_START 0x10
++#define MANTIS_RISC_PC 0x14
++
++// I2C
++#define MANTIS_I2CDATA_CTL 0x18
++#define MANTIS_I2C_RATE_1 (0x00 << 6)
++#define MANTIS_I2C_RATE_2 (0x01 << 6)
++#define MANTIS_I2C_RATE_3 (0x02 << 6)
++#define MANTIS_I2C_RATE_4 (0x03 << 6)
++#define MANTIS_I2C_STOP (0x01 << 5)
++#define MANTIS_I2C_PGMODE (0x01 << 3)
++
++#define MANTIS_GPIF_IRQCFG 0x98
++#define MANTIS_GPIF_IRQPOL (0x01 << 8)
++#define MANTIS_MASK_WRACK (0x01 << 7)
++#define MANTIS_MASK_BRRDY (0x01 << 6)
++#define MANTIS_MASK_OVFLW (0x01 << 5)
++#define MANTIS_MASK_OTHERR (0x01 << 4)
++#define MANTIS_MASK_WSTO (0x01 << 3)
++#define MANTIS_MASK_EXTIRQ (0x01 << 2)
++#define MANTIS_MASK_PLUGIN (0x01 << 1)
++#define MANTIS_MASK_PLUGOUT (0x01 << 0)
++
++#define MANTIS_GPIF_STATUS 0x9c
++#define MANTIS_SBUF_KILLOP (0x01 << 15)
++#define MANTIS_SBUF_OPDONE (0x01 << 14)
++#define MANTIS_SBUF_EMPTY (0x01 << 13)
++#define MANTIS_GPIF_DETSTAT (0x01 << 9)
++#define MANTIS_GPIF_INTSTAT (0x01 << 8)
++#define MANTIS_GPIF_WRACK (0x01 << 7)
++#define MANTIS_GPIF_BRRDY (0x01 << 6)
++#define MANTIS_SBUF_OVFLW (0x01 << 5)
++#define MANTIS_GPIF_OTHERR (0x01 << 4)
++#define MANTIS_SBUF_WSTO (0x01 << 3)
++#define MANTIS_GPIF_EXTIRQ (0x01 << 2)
++#define MANTIS_CARD_PLUGIN (0x01 << 1)
++#define MANTIS_CARD_PLUGOUT (0x01 << 0)
++
++#define MANTIS_GPIF_ADDR 0xb0
++#define MANTIS_GPIF_RDWRN (0x01 << 31)
++
++#define MANTIS_GPIF_DOUT 0xb4
++#define MANTIS_GPIF_DIN 0xb8
++
++
++#endif //__MANTIS_REG_H
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+new file mode 100644
+index 0000000..720f4fb
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -0,0 +1,151 @@
++/*
++ Mantis VP-1033 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp1033.h"
++
++u8 lgtdqcs001f_inittab[] = {
++ 0x01, 0x15,
++ 0x02, 0x00,
++ 0x03, 0x00,
++ 0x04, 0x2a,
++ 0x05, 0x85,
++ 0x06, 0x02,
++ 0x07, 0x00,
++ 0x08, 0x00,
++ 0x0c, 0x01,
++ 0x0d, 0x81,
++ 0x0e, 0x44,
++ 0x0f, 0x94,
++ 0x10, 0x3c,
++ 0x11, 0x84,
++ 0x12, 0xb9,
++ 0x13, 0xb5,
++ 0x14, 0x4f,
++ 0x15, 0xc9,
++ 0x16, 0x80,
++ 0x17, 0x36,
++ 0x18, 0xfb,
++ 0x19, 0xcf,
++ 0x1a, 0xbc,
++ 0x1c, 0x2b,
++ 0x1d, 0x27,
++ 0x1e, 0x00,
++ 0x1f, 0x0b,
++ 0x20, 0xa1,
++ 0x21, 0x60,
++ 0x22, 0x00,
++ 0x23, 0x00,
++ 0x28, 0x00,
++ 0x29, 0x28,
++ 0x2a, 0x14,
++ 0x2b, 0x0f,
++ 0x2c, 0x09,
++ 0x2d, 0x05,
++ 0x31, 0x1f,
++ 0x32, 0x19,
++ 0x33, 0xfc,
++ 0x34, 0x13,
++ 0xff, 0xff,
++};
++
++struct stv0299_config lgtdqcs001f_config = {
++ .demod_address = 0x68,
++ .inittab = lgtdqcs001f_inittab,
++ .mclk = 88000000UL,
++// .invert = 0,
++ .invert = 1,
++// .enhanced_tuning = 0,
++ .skip_reinit = 0,
++ .lock_output = STV0229_LOCKOUTPUT_0,
++ .volt13_op0_op1 = STV0299_VOLT13_OP0,
++ .min_delay_ms = 100,
++ .set_symbol_rate = lgtdqcs001f_set_symbol_rate,
++// .pll_set = lgtdqcs001f_pll_set,
++};
++
++int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *params)
++{
++ u8 buf[4];
++ u32 div;
++
++ struct mantis_pci *mantis = fe->dvb->priv;
++
++ struct i2c_msg msg = {
++ .addr = 0x61,
++ .flags = 0,
++ .buf = buf,
++ .len = sizeof (buf)
++ };
++ div = params->frequency / 250;
++
++ buf[0] = (div >> 8) & 0x7f;
++ buf[1] = div & 0xff;
++ buf[2] = 0x83;
++ buf[3] = 0xc0;
++
++ if (params->frequency < 1531000)
++ buf[3] |= 0x04;
++ else
++ buf[3] &= ~0x04;
++ if (i2c_transfer(&mantis->adapter, &msg, 1) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Write: I2C Transfer failed");
++ return -EIO;
++ }
++ msleep_interruptible(100);
++
++ return 0;
++}
++
++int lgtdqcs001f_set_symbol_rate(struct dvb_frontend *fe,
++ u32 srate, u32 ratio)
++{
++ u8 aclk = 0;
++ u8 bclk = 0;
++
++ if (srate < 1500000) {
++ aclk = 0xb7;
++ bclk = 0x47;
++ } else if (srate < 3000000) {
++ aclk = 0xb7;
++ bclk = 0x4b;
++ } else if (srate < 7000000) {
++ aclk = 0xb7;
++ bclk = 0x4f;
++ } else if (srate < 14000000) {
++ aclk = 0xb7;
++ bclk = 0x53;
++ } else if (srate < 30000000) {
++ aclk = 0xb6;
++ bclk = 0x53;
++ } else if (srate < 45000000) {
++ aclk = 0xb4;
++ bclk = 0x51;
++ }
++ stv0299_writereg (fe, 0x13, aclk);
++ stv0299_writereg (fe, 0x14, bclk);
++
++ stv0299_writereg (fe, 0x1f, (ratio >> 16) & 0xff);
++ stv0299_writereg (fe, 0x20, (ratio >> 8) & 0xff);
++ stv0299_writereg (fe, 0x21, (ratio ) & 0xf0);
++
++ return 0;
++}
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.h b/drivers/media/dvb/mantis/mantis_vp1033.h
+new file mode 100644
+index 0000000..d50f092
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp1033.h
+@@ -0,0 +1,35 @@
++/*
++ Mantis VP-1033 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_VP1033_H
++#define __MANTIS_VP1033_H
++
++#include "stv0299.h"
++#include "dvb_frontend.h"
++
++extern struct stv0299_config lgtdqcs001f_config;
++
++extern int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *params);
++
++extern int lgtdqcs001f_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio);
++
++
++#endif // __MANTIS_VP1033_H
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+new file mode 100644
+index 0000000..b85ac29
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -0,0 +1,52 @@
++/*
++ Mantis VP-1034 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp1034.h"
++
++struct mb86a16_config vp1034_config = {
++ .demod_address = 0x08,
++ .set_voltage = vp1034_set_voltage,
++};
++
++int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
++{
++ struct mantis_pci *mantis = fe->dvb->priv;
++
++ switch (voltage) {
++ case SEC_VOLTAGE_13:
++ mmwrite((mmread(MANTIS_GPIF_ADDR)) | voltage, MANTIS_GPIF_ADDR);
++ dprintk(verbose, MANTIS_ERROR, 1, "Polarization=[13V]");
++ break;
++ case SEC_VOLTAGE_18:
++ mmwrite((mmread(MANTIS_GPIF_ADDR)) & voltage, MANTIS_GPIF_ADDR);
++ dprintk(verbose, MANTIS_ERROR, 1, "Polarization=[18V]");
++ break;
++ case SEC_VOLTAGE_OFF:
++ dprintk(verbose, MANTIS_ERROR, 1, "Frontend (dummy) POWERDOWN");
++ break;
++ default:
++ dprintk(verbose, MANTIS_ERROR, 1, "Invalid = (%d)", (u32 ) voltage);
++ return -EINVAL;
++ }
++ mmwrite(0x00, MANTIS_GPIF_DOUT);
++
++ return 0;
++}
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.h b/drivers/media/dvb/mantis/mantis_vp1034.h
+new file mode 100644
+index 0000000..2324dad
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp1034.h
+@@ -0,0 +1,30 @@
++/*
++ Mantis VP-1034 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_VP1034_H
++#define __MANTIS_VP1034_H
++
++#include "mb86a16.h"
++#include "dvb_frontend.h"
++
++extern struct mb86a16_config vp1034_config;
++extern int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
++
++#endif // __MANTIS_VP1034_H
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+new file mode 100644
+index 0000000..bca9eba
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -0,0 +1,73 @@
++/*
++ Mantis VP-2033 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp2033.h"
++
++struct tda10021_state {
++ struct i2c_adapter *i2c;
++ struct dvb_frontend_ops ops;
++ /* configuration settings */
++ const struct tda10021_config *config;
++ struct dvb_frontend frontend;
++
++ u8 pwm;
++ u8 reg0;
++};
++
++struct cu1216_config philips_cu1216_config = {
++ .demod_address = 0x18 >> 1,
++ .pll_set = philips_cu1216_tuner_set,
++// .fe_reset = mantis_fe_reset,
++};
++
++int philips_cu1216_tuner_set(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *params)
++{
++// struct tda10021_state *state = fe->demodulator_priv;
++ struct mantis_pci *mantis = fe->dvb->priv;
++
++ u8 buf[4];
++
++ struct i2c_msg msg = {
++ .addr = 0xc0 >> 1,
++ .flags = 0,
++ .buf = buf,
++ .len = sizeof (buf)
++ };
++
++#define TUNER_MUL 62500
++
++ u32 div = (params->frequency + 36125000 + TUNER_MUL / 2) / TUNER_MUL;
++
++ buf[0] = (div >> 8) & 0x7f;
++ buf[1] = div & 0xff;
++ buf[2] = 0x86;
++ buf[3] = (params->frequency < 150000000 ? 0xA1 :
++ params->frequency < 445000000 ? 0x92 : 0x34);
++
++// if (i2c_transfer(state->i2c, &msg, 1) < 0) {
++ if (i2c_transfer(&mantis->adapter, &msg, 1) < 0) {
++ printk("%s tuner not ack!\n", __FUNCTION__);
++ return -EIO;
++ }
++ msleep(100);
++ return 0;
++}
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+new file mode 100644
+index 0000000..29baba1
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -0,0 +1,33 @@
++/*
++ Mantis VP-2033 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_VP2033_H
++#define __MANTIS_VP2033_H
++
++#include "cu1216.h"
++#include "dvb_frontend.h"
++
++extern struct cu1216_config philips_cu1216_config;
++
++extern int philips_cu1216_tuner_set(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *params);
++
++
++#endif // __MANTIS_VP2033_H
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+new file mode 100644
+index 0000000..f44f226
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -0,0 +1,53 @@
++/*
++ Mantis VP-3030 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp3030.h"
++
++struct zl10353_config mantis_vp3030_config = {
++ .demod_address = 0x0f,
++};
++
++int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *params)
++{
++ u8 buf[4];
++ int rc;
++ struct mantis_pci *mantis = fe->dvb->priv;
++
++ struct i2c_msg tuner_msg = {
++ .addr = 0x60,
++ .flags = 0,
++ .buf = buf,
++ .len = sizeof (buf)
++ };
++
++ if ((params->frequency < 950000) || (params->frequency > 2150000))
++ return -EINVAL;
++ rc = i2c_transfer(&mantis->adapter, &tuner_msg, 1);
++ if (rc != 1) {
++ printk("%s: I2C Transfer returned [%d]\n", __func__, rc);
++ return -EIO;
++ }
++ msleep_interruptible(1);
++ printk("%s: Send params to tuner ok!!!\n", __func__);
++
++ return 0;
++}
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.h b/drivers/media/dvb/mantis/mantis_vp3030.h
+new file mode 100644
+index 0000000..f8e72cc
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp3030.h
+@@ -0,0 +1,30 @@
++/*
++ Mantis VP-3030 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_VP3030_H
++#define __MANTIS_VP3030_H
++
++#include "zl10353.h"
++#include "dvb-pll.h"
++#include "dvb_frontend.h"
++
++extern struct zl10353_config mantis_vp3030_config;
++
++#endif // __MANTIS_VP3030_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0002-V4L-DVB-13700-MB86A16-Need-a-bit-of-settling-time.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0002-V4L-DVB-13700-MB86A16-Need-a-bit-of-settling-time.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,55 @@
+From fe35ee5ef79e1cd1342634fa1500a0421988b3b6 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 21:58:38 -0300
+Subject: [PATCH 002/120] V4L/DVB (13700): [MB86A16] Need a bit of settling time
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit a890cce595c86013ca1fba644c25c01b86149b23)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 8 +++++++-
+ 1 files changed, 7 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 6a78a0c..e8fa908 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -243,11 +243,16 @@ static int initial_set(struct mb86a16_state *state)
+ {
+ if (stlp_set(state, 5, 7))
+ goto err;
++
++ udelay(100);
+ if (afcex_data_set(state, 0, 0))
+ goto err;
++
++ udelay(100);
+ if (afcofs_data_set(state, 0, 0))
+ goto err;
+
++ udelay(100);
+ if (mb86a16_write(state, MB86A16_CRLFILTCOEF1, 0x16) < 0)
+ goto err;
+ if (mb86a16_write(state, 0x2f, 0x21) < 0)
+@@ -1149,11 +1154,12 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ v, R, swp_ofs, &fOSC,
+ &afcex_freq, &AFCEX_L, &AFCEX_H);
+
++ udelay(100);
+ if (rf_val_set(state, fOSC, state->srate, R) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "rf val set error");
+ return -1;
+ }
+-
++ udelay(100);
+ if (afcex_data_set(state, AFCEX_L, AFCEX_H) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "afcex data set error");
+ return -1;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0003-V4L-DVB-13701-MB86A16-Reduce-Carrier-Recovery-range-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0003-V4L-DVB-13701-MB86A16-Reduce-Carrier-Recovery-range-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From fbf94c261a933ab3acd5497a1159816045c26eef Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 21:59:20 -0300
+Subject: [PATCH 003/120] V4L/DVB (13701): [MB86A16] Reduce Carrier Recovery range to 3Mhz
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b05c90de08b582172b8f63dd751ac0a1aee421e9)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index e8fa908..47c0d57 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -1036,8 +1036,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+
+ dprintk(verbose, MB86A16_INFO, 1, "freq=%d Mhz, symbrt=%d Ksps", state->frequency, state->srate);
+
+- fcp = 5000; // (carrier recovery [kHz])
+-// fcp = 3000;
++ fcp = 3000;
+ swp_ofs = state->srate / 4;
+
+ for (i = 0; i < 60; i++)
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0004-V4L-DVB-13702-MB86A16-need-to-wait-a-bit-more-than-t.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0004-V4L-DVB-13702-MB86A16-need-to-wait-a-bit-more-than-t.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,42 @@
+From b35828c55f84e1508afad74323fdb0550e381bd3 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:00:50 -0300
+Subject: [PATCH 004/120] V4L/DVB (13702): [MB86A16] need to wait a bit more than the computed time for a Factor of safety
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit e15c7ccd31faa0618478ad78e11423891919a87e)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 47c0d57..ad03b11 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -417,7 +417,8 @@ static int signal_det(struct mb86a16_state *state,
+ int ret ;
+ int smrtd ;
+ int wait_sym ;
+- int wait_t ;
++
++ u32 wait_t;
+ unsigned char S[3] ;
+ int i ;
+
+@@ -1429,6 +1430,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ S2T = 7; S4T = 2; S5T = 8; ETH = 7; VIA = 2;
+ wait_t = 7 + (2097152 + state->srate / 2) / state->srate;
+ }
++ wait_t *= 2; /* FOS */
+ S2T_set(state, S2T);
+ S45T_set(state, S4T, S5T);
+ Vi_set(state, ETH, VIA);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0005-V4L-DVB-13703-MB86A16-Fix-wrong-message-printed-out.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0005-V4L-DVB-13703-MB86A16-Fix-wrong-message-printed-out.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,33 @@
+From 31aae7389d036427f3b20a84dec73a2118c75304 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:01:39 -0300
+Subject: [PATCH 005/120] V4L/DVB (13703): [MB86A16] Fix wrong message printed out
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 776c3ebe9678f86b9b0e72d541208bb39f9551c6)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index ad03b11..82b1271 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -1475,7 +1475,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ SEQ_set(state, 1);
+ }
+ } else {
+- dprintk(verbose, MB86A16_INFO, 1, "NO -- SIGNAL");
++ dprintk(verbose, MB86A16_INFO, 1, "NO -- SYNC");
+ SEQ_set(state, 1);
+ }
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0006-V4L-DVB-13704-MB86A16-FIX-Don-t-loop-again-if-we-hav.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0006-V4L-DVB-13704-MB86A16-FIX-Don-t-loop-again-if-we-hav.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,32 @@
+From 4844107b6f8acb246ce82630bcfb6e92e94b8e7c Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:02:19 -0300
+Subject: [PATCH 006/120] V4L/DVB (13704): [MB86A16] FIX: Don't loop again, if we have SYNC
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 071e3060a5f482e5948608d55e28bc7f5dd759cd)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 82b1271..361e476 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -1487,6 +1487,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ if (sync) {
+ dprintk(verbose, MB86A16_INFO, 1, "******* SYNC *******");
+ freqerr_chk(state, state->frequency, state->srate, 1);
++ break;
+ }
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0007-V4L-DVB-13705-Mantis-FIX-Do-not-return-IRQ_HANDLED-i.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0007-V4L-DVB-13705-Mantis-FIX-Do-not-return-IRQ_HANDLED-i.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,355 @@
+From 2ac08a99c42cdf87914cfb844e4a7bbdd5a9c40d Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:06:15 -0300
+Subject: [PATCH 007/120] V4L/DVB (13705): [Mantis] FIX: Do not return IRQ_HANDLED in the unlikely case
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit bd1fcac0148fb4a44395227edb0ff8ee31e09de1)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pci.c | 328 +++++++++++++++++++++++++++++++++
+ 1 files changed, 328 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_pci.c
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+new file mode 100644
+index 0000000..68ff1b2
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -0,0 +1,328 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <asm/io.h>
++#include <asm/pgtable.h>
++#include <asm/page.h>
++#include <linux/kmod.h>
++#include <linux/vmalloc.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include "mantis_common.h"
++#include "mantis_core.h"
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++unsigned int verbose = 1;
++module_param(verbose, int, 0644);
++MODULE_PARM_DESC(verbose, "verbose startup messages, default is 1 (yes)");
++
++unsigned int devs;
++
++#define PCI_VENDOR_ID_MANTIS 0x1822
++#define PCI_DEVICE_ID_MANTIS_R11 0x4e35
++#define DRIVER_NAME "Mantis"
++
++static struct pci_device_id mantis_pci_table[] = {
++ { PCI_DEVICE(PCI_VENDOR_ID_MANTIS, PCI_DEVICE_ID_MANTIS_R11) },
++ { 0 },
++};
++
++MODULE_DEVICE_TABLE(pci, mantis_pci_table);
++
++static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
++{
++ int i = 0, interrupts = 0;
++ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
++ struct mantis_pci *mantis;
++
++ mantis = (struct mantis_pci *) dev_id;
++ if (unlikely(mantis == NULL)) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis == NULL");
++ return IRQ_NONE;
++ }
++ stat = mmread(MANTIS_INT_STAT);
++ mask = mmread(MANTIS_INT_MASK);
++ mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
++
++ if (!(stat & mask)) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "Not ours !");
++ return IRQ_NONE;
++ }
++ mmwrite(lstat, MANTIS_INT_STAT);
++ interrupts = hweight32(stat);
++ dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]=%d [", stat, mask, interrupts);
++
++ while (lstat) {
++ if (lstat & MANTIS_INT_RISCEN) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
++ lstat &= ~MANTIS_INT_RISCEN;
++
++ } else if (lstat & MANTIS_INT_I2CRACK) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
++ mantis->mantis_int_stat = stat;
++ mantis->mantis_int_mask = mask;
++ wake_up(&mantis->i2c_wq);
++ lstat &= ~MANTIS_INT_I2CRACK;
++
++ } else if (lstat & MANTIS_INT_PCMCIA7) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
++ lstat &= ~MANTIS_INT_PCMCIA7;
++
++ } else if (lstat & MANTIS_INT_PCMCIA6) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-06 *");
++ lstat &= ~MANTIS_INT_PCMCIA6;
++
++ } else if (lstat & MANTIS_INT_PCMCIA5) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-05 *");
++ lstat &= ~MANTIS_INT_PCMCIA5;
++
++ } else if (lstat & MANTIS_INT_PCMCIA4) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-04 *");
++ lstat &= ~MANTIS_INT_PCMCIA4;
++
++ } else if (lstat & MANTIS_INT_PCMCIA3) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-03 *");
++ lstat &= ~MANTIS_INT_PCMCIA3;
++
++ } else if (lstat & MANTIS_INT_PCMCIA2) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-02 *");
++ lstat &= ~MANTIS_INT_PCMCIA2;
++
++ } else if (lstat & MANTIS_INT_PCMCIA1) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-01 *");
++ lstat &= ~MANTIS_INT_PCMCIA1;
++
++ } else if (lstat & MANTIS_INT_PCMCIA0) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-00 *");
++ lstat &= ~MANTIS_INT_PCMCIA0;
++
++ } else if (lstat & MANTIS_INT_IRQ0) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
++ lstat &= ~MANTIS_INT_IRQ0;
++
++ } else if (lstat & MANTIS_INT_IRQ1) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
++ lstat &= ~MANTIS_INT_IRQ1;
++
++ } else if (lstat & MANTIS_INT_OCERR) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
++ lstat &= ~MANTIS_INT_OCERR;
++
++ } else if (lstat & MANTIS_INT_PABORT) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT PABRT *");
++ lstat &= ~MANTIS_INT_PABORT;
++
++ } else if (lstat & MANTIS_INT_RIPERR) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT RIPRR *");
++ lstat &= ~MANTIS_INT_RIPERR;
++
++ } else if (lstat & MANTIS_INT_PPERR) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT PPERR *");
++ lstat &= ~MANTIS_INT_PPERR;
++
++ } else if (lstat & MANTIS_INT_FTRGT) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT FTRGT *");
++ lstat &= ~MANTIS_INT_FTRGT;
++
++ } else if (lstat & MANTIS_INT_RISCI) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT RISCI *");
++ mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
++ tasklet_schedule(&mantis->tasklet);
++ lstat &= ~MANTIS_INT_RISCI;
++
++ } else if (lstat & MANTIS_INT_I2CDONE) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* I2C DONE *");
++ mantis->mantis_int_stat = stat;
++ mantis->mantis_int_mask = mask;
++ lstat &= ~MANTIS_INT_I2CDONE;
++ } else {
++ dprintk(verbose, MANTIS_DEBUG, 0,
++ "* Unknown [%04x/%04x] *", stat, mask);
++ break;
++ }
++ i++;
++ if (i > interrupts) {
++ dprintk(verbose, MANTIS_ERROR, 1, "going Loopy ! -- BREAK --");
++ break;
++ }
++ }
++ dprintk(verbose, MANTIS_DEBUG, 0, "] ===\n");
++
++ return IRQ_HANDLED;
++}
++
++
++static int __devinit mantis_pci_probe(struct pci_dev *pdev,
++ const struct pci_device_id *mantis_pci_table)
++{
++ u8 revision, latency;
++ struct mantis_pci *mantis;
++ int ret = 0;
++
++ devs++;
++
++ mantis = kmalloc(sizeof (struct mantis_pci), GFP_KERNEL);
++ if (mantis == NULL) {
++ printk("%s: Out of memory\n", __func__);
++ ret = -ENOMEM;
++ goto err;
++ }
++ memset(mantis, 0, sizeof (struct mantis_pci));
++ mantis->num = devs;
++ if (pci_enable_device(pdev)) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis PCI enable failed");
++ ret = -ENODEV;
++ goto err;
++ }
++ mantis->mantis_addr = pci_resource_start(pdev, 0);
++ if (!request_mem_region(pci_resource_start(pdev, 0),
++ pci_resource_len(pdev, 0), DRIVER_NAME)) {
++ ret = -ENODEV;
++ goto err0;
++ }
++
++ if ((mantis->mantis_mmio = ioremap(mantis->mantis_addr, 0x1000)) == NULL) {
++ dprintk(verbose, MANTIS_ERROR, 1, "IO remap failed");
++ ret = -ENODEV;
++ goto err1;
++ }
++
++ // Clear and disable all interrupts at startup
++ // to avoid lockup situations
++ mmwrite(0x00, MANTIS_INT_MASK);
++ if (request_irq(pdev->irq, mantis_pci_irq, IRQF_SHARED | IRQF_DISABLED,
++ DRIVER_NAME, mantis) < 0) {
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis IRQ reg failed");
++ ret = -ENODEV;
++ goto err2;
++ }
++ pci_set_master(pdev);
++ pci_set_drvdata(pdev, mantis);
++ pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &latency);
++ pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
++ mantis->latency = latency;
++ mantis->revision = revision;
++ mantis->pdev = pdev;
++ init_waitqueue_head(&mantis->i2c_wq);
++
++ // CAM bypass
++ //mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_IRQ1, MANTIS_INT_MASK);
++ dprintk(verbose, MANTIS_INFO, 1, "gpif status: %04x irqcfg: %04x", mmread(0x9c), mmread(0x98));
++ if ((mmread(0x9c) & 0x200) != 0) { //CAM inserted
++ msleep_interruptible(1);
++ if ((mmread(0x9c) & 0x200) != 0)
++ mmwrite(((mmread(0x98) | 0x01) & ~0x02), 0x98);
++ else
++ mmwrite(((mmread(0x98) | 0x02) & ~0x01), 0x98);
++
++ } else {
++ mmwrite(((mmread(0x98) | 0x02) & ~0x01), 0x98);
++ }
++ mantis_set_direction(mantis, 0);
++
++ // default latency if none specified
++ if (!latency)
++ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 32);
++ dprintk(verbose, MANTIS_ERROR, 0, "Mantis Rev %d, ",
++ mantis->revision);
++
++ dprintk(verbose, MANTIS_ERROR, 0,
++ "irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
++ pdev->irq, mantis->latency,
++ mantis->mantis_addr, mantis->mantis_mmio);
++
++ // No more PCI specific stuff !
++ if (mantis_core_init(mantis) < 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Mantis core init failed");
++ ret = -ENODEV;
++ goto err2;
++ }
++
++ return 0;
++
++ // Error conditions ..
++err2:
++ dprintk(verbose, MANTIS_DEBUG, 1, "Err: IO Unmap");
++ if (mantis->mantis_mmio)
++ iounmap(mantis->mantis_mmio);
++err1:
++ dprintk(verbose, MANTIS_DEBUG, 1, "Err: Release regions");
++ release_mem_region(pci_resource_start(pdev, 0),
++ pci_resource_len(pdev, 0));
++ pci_disable_device(pdev);
++err0:
++ dprintk(verbose, MANTIS_DEBUG, 1, "Err: Free");
++ kfree(mantis);
++err:
++ dprintk(verbose, MANTIS_DEBUG, 1, "Err:");
++ return ret;
++}
++
++static void __devexit mantis_pci_remove(struct pci_dev *pdev)
++{
++ struct mantis_pci *mantis = pci_get_drvdata(pdev);
++
++ if (mantis == NULL) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Aeio, Mantis NULL ptr");
++ return;
++ }
++ mantis_core_exit(mantis);
++ dprintk(verbose, MANTIS_ERROR, 1, "Removing -->Mantis irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p",
++ pdev->irq, mantis->latency, mantis->mantis_addr,
++ mantis->mantis_mmio);
++
++ free_irq(pdev->irq, mantis);
++ pci_release_regions(pdev);
++ if (mantis_dma_exit(mantis) < 0)
++ dprintk(verbose, MANTIS_ERROR, 1, "DMA exit failed");
++
++ pci_set_drvdata(pdev, NULL);
++ pci_disable_device(pdev);
++ kfree(mantis);
++}
++
++static struct pci_driver mantis_pci_driver = {
++ .name = DRIVER_NAME,
++ .id_table = mantis_pci_table,
++ .probe = mantis_pci_probe,
++ .remove = mantis_pci_remove,
++};
++
++static int __devinit mantis_pci_init(void)
++{
++ return pci_register_driver(&mantis_pci_driver);
++}
++
++static void __devexit mantis_pci_exit(void)
++{
++ pci_unregister_driver(&mantis_pci_driver);
++}
++
++module_init(mantis_pci_init);
++module_exit(mantis_pci_exit);
++
++MODULE_DESCRIPTION("Mantis PCI DTV bridge driver");
++MODULE_AUTHOR("Manu Abraham");
++MODULE_LICENSE("GPL");
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0008-V4L-DVB-13706-MB86A16-Overhaul.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0008-V4L-DVB-13706-MB86A16-Overhaul.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,807 @@
+From e3f2c48d4b2eabd87147855967d5dadccda8dc3c Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:07:24 -0300
+Subject: [PATCH 008/120] V4L/DVB (13706): [MB86A16] Overhaul
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+ * better ISR handling
+ * I2C fixes
+ * better handling of configurations
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit df0cca174b4d85ea041509a13e5e68b377758bf1)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 14 ++-
+ drivers/media/dvb/mantis/mantis_core.c | 95 ++++++++---------
+ drivers/media/dvb/mantis/mantis_dvb.c | 13 +--
+ drivers/media/dvb/mantis/mantis_i2c.c | 68 +++++-------
+ drivers/media/dvb/mantis/mantis_pci.c | 170 +++++++++++-------------------
+ drivers/media/dvb/mantis/mantis_vp1033.c | 8 ++
+ drivers/media/dvb/mantis/mantis_vp1033.h | 6 +-
+ drivers/media/dvb/mantis/mantis_vp1034.c | 8 ++
+ drivers/media/dvb/mantis/mantis_vp1034.h | 7 +-
+ drivers/media/dvb/mantis/mantis_vp2033.c | 20 +++-
+ drivers/media/dvb/mantis/mantis_vp2033.h | 6 +-
+ drivers/media/dvb/mantis/mantis_vp3030.c | 10 ++-
+ drivers/media/dvb/mantis/mantis_vp3030.h | 8 +-
+ 13 files changed, 215 insertions(+), 218 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index ba360f8..60a7457 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -65,10 +65,19 @@
+ #define mmaor(dat, addr) mmwrite((dat) | ((mask) & mmread(addr)), addr)
+
+
++struct mantis_hwconfig {
++ char *model_name;
++ char *dev_type;
++};
++
++
+ struct mantis_pci {
+ /* PCI stuff */
+ u16 vendor_id;
+ u16 device_id;
++ u16 subsystem_vendor;
++ u16 subsystem_device;
++
+ u8 latency;
+
+ struct pci_dev *pdev;
+@@ -110,7 +119,7 @@ struct mantis_pci {
+
+ u8 feeds;
+
+- struct mantis_config *config;
++ struct mantis_hwconfig *hwconfig;
+
+ u32 mantis_int_stat;
+ u32 mantis_int_mask;
+@@ -121,7 +130,8 @@ struct mantis_pci {
+ u32 sub_device_id;
+
+ /* A12 A13 A14 */
+- int gpio_status;};
++ int gpio_status;
++};
+
+ extern unsigned int verbose;
+ extern unsigned int devs;
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 1112277..1012959 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -20,7 +20,10 @@
+
+ #include "mantis_common.h"
+ #include "mantis_core.h"
+-
++#include "mantis_vp1033.h"
++#include "mantis_vp1034.h"
++#include "mantis_vp2033.h"
++#include "mantis_vp3030.h"
+
+ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+ {
+@@ -45,7 +48,7 @@ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+
+ return err;
+ }
+- msleep_interruptible(2);
++// msleep_interruptible(2);
+
+ return 0;
+ }
+@@ -72,41 +75,6 @@ static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+ return 0;
+ }
+
+-static int get_subdevice_id(struct mantis_pci *mantis)
+-{
+- int err;
+- static u8 sub_device_id[2];
+-
+- mantis->sub_device_id = 0;
+- sub_device_id[0] = 0xfc;
+- if ((err = read_eeprom_byte(mantis, &sub_device_id[0], 2)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
+- return err;
+- }
+- mantis->sub_device_id = (sub_device_id[0] << 8) | sub_device_id[1];
+- dprintk(verbose, MANTIS_ERROR, 1, "Sub Device ID=[0x%04x]",
+- mantis->sub_device_id);
+-
+- return 0;
+-}
+-
+-static int get_subvendor_id(struct mantis_pci *mantis)
+-{
+- int err;
+- static u8 sub_vendor_id[2];
+-
+- mantis->sub_vendor_id = 0;
+- sub_vendor_id[0] = 0xfe;
+- if ((err = read_eeprom_byte(mantis, &sub_vendor_id[0], 2)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
+- return err;
+- }
+- mantis->sub_vendor_id = (sub_vendor_id[0] << 8) | sub_vendor_id[1];
+- dprintk(verbose, MANTIS_ERROR, 1, "Sub Vendor ID=[0x%04x]",
+- mantis->sub_vendor_id);
+-
+- return 0;
+-}
+
+ static int get_mac_address(struct mantis_pci *mantis)
+ {
+@@ -118,8 +86,8 @@ static int get_mac_address(struct mantis_pci *mantis)
+
+ return err;
+ }
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]",
++ dprintk(verbose, MANTIS_ERROR, 0,
++ " MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]\n",
+ mantis->mac_address[0], mantis->mac_address[1],
+ mantis->mac_address[2], mantis->mac_address[3],
+ mantis->mac_address[4], mantis->mac_address[5]);
+@@ -127,11 +95,51 @@ static int get_mac_address(struct mantis_pci *mantis)
+ return 0;
+ }
+
++#define MANTIS_MODEL_UNKNOWN "UNKNOWN"
++#define MANTIS_DEV_UNKNOWN "UNKNOWN"
++
++struct mantis_hwconfig unknown_device = {
++ .model_name = MANTIS_MODEL_UNKNOWN,
++ .dev_type = MANTIS_DEV_UNKNOWN,
++};
++
++static void mantis_load_config(struct mantis_pci *mantis)
++{
++ switch (mantis->subsystem_device) {
++ case MANTIS_VP_1033_DVB_S: // VP-1033
++ mantis->hwconfig = &vp1033_mantis_config;
++ break;
++ case MANTIS_VP_1034_DVB_S: // VP-1034
++ mantis->hwconfig = &vp1034_mantis_config;
++ break;
++ case MANTIS_VP_2033_DVB_C: // VP-2033
++ mantis->hwconfig = &vp2033_mantis_config;
++ break;
++ case MANTIS_VP_3030_DVB_T: // VP-3030
++ mantis->hwconfig = &vp3030_mantis_config;
++ break;
++ default:
++ mantis->hwconfig = &unknown_device;
++ break;
++ }
++}
+
+ int mantis_core_init(struct mantis_pci *mantis)
+ {
+ int err = 0;
+
++ mantis_load_config(mantis);
++ dprintk(verbose, MANTIS_ERROR, 0, "found a %s PCI %s device on (%02x:%02x.%x),\n",
++ mantis->hwconfig->model_name, mantis->hwconfig->dev_type,
++ mantis->pdev->bus->number, PCI_SLOT(mantis->pdev->devfn), PCI_FUNC(mantis->pdev->devfn));
++ dprintk(verbose, MANTIS_ERROR, 0, " Mantis Rev %d [%04x:%04x], ",
++ mantis->revision,
++ mantis->subsystem_vendor, mantis->subsystem_device);
++ dprintk(verbose, MANTIS_ERROR, 0,
++ "irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
++ mantis->pdev->irq, mantis->latency,
++ mantis->mantis_addr, mantis->mantis_mmio);
++
+ if ((err = mantis_i2c_init(mantis)) < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis I2C init failed");
+ return err;
+@@ -140,14 +148,6 @@ int mantis_core_init(struct mantis_pci *mantis)
+ dprintk(verbose, MANTIS_ERROR, 1, "get MAC address failed");
+ return err;
+ }
+- if ((err = get_subvendor_id(mantis)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "get Sub vendor ID failed");
+- return err;
+- }
+- if ((err = get_subdevice_id(mantis)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "get Sub device ID failed");
+- return err;
+- }
+ if ((err = mantis_dma_init(mantis)) < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis DMA init failed");
+ return err;
+@@ -162,7 +162,6 @@ int mantis_core_init(struct mantis_pci *mantis)
+
+ int mantis_core_exit(struct mantis_pci *mantis)
+ {
+-
+ mantis_dma_stop(mantis);
+ dprintk(verbose, MANTIS_ERROR, 1, "DMA engine stopping");
+ if (mantis_dma_exit(mantis) < 0)
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 5830d4a..319bb8b 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -206,22 +206,13 @@ err0:
+ return result;
+ }
+
+-#define MANTIS_VP_1027_DVB_S 0x0013
+-#define MANTIS_VP_1033_DVB_S 0x0016
+-#define MANTIS_VP_1034_DVB_S 0x0014
+-#define MANTIS_VP_1040_DVB_S2
+-#define MANTIS_VP_1041_DVB_S2
+-#define MANTIS_VP_2033_DVB_C 0x0008
+-#define MANTIS_VP_3024_DVB_T 0x0009
+-#define MANTIS_VP_3030_DVB_T 0x0024
+-
+ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+ {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis frontend Init");
+ mantis_fe_powerup(mantis);
+ mantis_frontend_reset(mantis);
+- dprintk(verbose, MANTIS_DEBUG, 1, "Device ID=%02x", mantis->sub_device_id);
+- switch (mantis->sub_device_id) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "Device ID=%02x", mantis->subsystem_device);
++ switch (mantis->subsystem_device) {
+ case MANTIS_VP_1033_DVB_S: // VP-1033
+ dprintk(verbose, MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
+ mantis->fe = stv0299_attach(&lgtdqcs001f_config,
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index cfecb34..8b90a2a 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -33,32 +33,27 @@
+ static int mantis_ack_wait(struct mantis_pci *mantis)
+ {
+ int rc = 0;
++ u32 timeout = 0;
+
+ if (wait_event_interruptible_timeout(mantis->i2c_wq,
+- mantis->mantis_int_stat & MANTIS_INT_I2CRACK,
+- msecs_to_jiffies(50)) == -ERESTARTSYS)
++ mantis->mantis_int_stat & MANTIS_INT_I2CDONE,
++ msecs_to_jiffies(50)) == -ERESTARTSYS) {
+
++ dprintk(verbose, MANTIS_DEBUG, 1, "I2C Transfer failed, Master !I2CDONE");
+ rc = -EREMOTEIO;
+-/*
+- // Wait till we are done
+- while (mantis->mantis_int_stat & MANTIS_INT_I2CRACK){
+- if (mantis->mantis_int_stat & MANTIS_INT_I2CDONE) {
+- mantis->mantis_int_stat &= ~MANTIS_INT_I2CRACK;
+-// dprintk(verbose, MANTIS_DEBUG, 1, "SLAVE RACK 'ed .. Waiting for I2CDONE");
++ }
++ while (!(mantis->mantis_int_stat & MANTIS_INT_I2CRACK)) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "Waiting for Slave RACK");
++ mantis->mantis_int_stat = mmread(MANTIS_INT_STAT);
++ msleep(5);
++ timeout++;
++ if (timeout > 500) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Slave RACK Fail !");
++ rc = -EREMOTEIO;
+ break;
+ }
+ }
+-
+- if (mantis->mantis_int_stat & MANTIS_INT_I2CDONE) {
+-// dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Int I2CDONE");
+- rc = 1;
+- }
+-
+- mantis->mantis_int_stat &= ~MANTIS_INT_I2CDONE;
+-*/
+- // ..
+- if (mantis->mantis_int_stat & MANTIS_INT_I2CRACK)
+- msleep_interruptible(10);
++ udelay(350);
+
+ return rc;
+ }
+@@ -67,7 +62,7 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ {
+ u32 rxd, i;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Address=[0x%02x]", msg->addr);
++ dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ", __func__, msg->addr);
+ for (i = 0; i < msg->len; i++) {
+ rxd = (msg->addr << 25) | (1 << 24)
+ | MANTIS_I2C_RATE_3
+@@ -77,18 +72,17 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ if (i == (msg->len - 1))
+ rxd &= ~MANTIS_I2C_STOP;
+
++ mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
+ mmwrite(rxd, MANTIS_I2CDATA_CTL);
+- if (mantis_ack_wait(mantis) < 0) {
++ if (mantis_ack_wait(mantis) != 0) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<R>");
+- return -EIO;
++ return -EREMOTEIO;
+ }
+ rxd = mmread(MANTIS_I2CDATA_CTL);
+ msg->buf[i] = (u8)((rxd >> 8) & 0xFF);
+- dprintk(verbose, MANTIS_DEBUG, 1,
+- "Data<R[%d]>=[0x%02x]", i, msg->buf[i]);
+-
+- msleep_interruptible(2);
++ dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+ }
++ dprintk(verbose, MANTIS_INFO, 0, "]\n");
+
+ return 0;
+ }
+@@ -98,9 +92,9 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ int i;
+ u32 txd = 0;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Address=[0x%02x]", msg->addr);
++ dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ", __func__, msg->addr);
+ for (i = 0; i < msg->len; i++) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Data<W[%d]>=[0x%02x]", i, msg->buf[i]);
++ dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+ txd = (msg->addr << 25) | (msg->buf[i] << 8)
+ | MANTIS_I2C_RATE_3
+ | MANTIS_I2C_STOP
+@@ -109,13 +103,14 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ if (i == (msg->len - 1))
+ txd &= ~MANTIS_I2C_STOP;
+
++ mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
+ mmwrite(txd, MANTIS_I2CDATA_CTL);
+- if (mantis_ack_wait(mantis) < 0) {
++ if (mantis_ack_wait(mantis) != 0) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<W>");
+- return -1;
++ return -EREMOTEIO;
+ }
+- udelay(500);
+ }
++ dprintk(verbose, MANTIS_INFO, 0, "]\n");
+
+ return 0;
+ }
+@@ -159,7 +154,7 @@ static struct i2c_adapter mantis_i2c_adapter = {
+
+ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ {
+- u32 intstat;
++ u32 intstat, intmask;
+
+ memcpy(&mantis->adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
+ i2c_set_adapdata(&mantis->adapter, mantis);
+@@ -169,15 +164,12 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Initializing I2C ..");
+
+- // Clear all interrupts
+ intstat = mmread(MANTIS_INT_STAT);
++ intmask = mmread(MANTIS_INT_MASK);
+ mmwrite(intstat, MANTIS_INT_STAT);
++ mmwrite(intmask | MANTIS_INT_I2CDONE, MANTIS_INT_MASK);
+
+- mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_I2CDONE,
+- MANTIS_INT_MASK);
+-
+- dprintk(verbose, MANTIS_DEBUG, 1, "[0x%08x/%08x]",
+- mmread(MANTIS_INT_STAT), mmread(MANTIS_INT_MASK));
++ dprintk(verbose, MANTIS_DEBUG, 1, "[0x%08x/%08x]", intstat, intmask);
+
+ return 0;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 68ff1b2..0bc25d2 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -52,7 +52,6 @@ MODULE_DEVICE_TABLE(pci, mantis_pci_table);
+
+ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ {
+- int i = 0, interrupts = 0;
+ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
+ struct mantis_pci *mantis;
+
+@@ -64,109 +63,67 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ stat = mmread(MANTIS_INT_STAT);
+ mask = mmread(MANTIS_INT_MASK);
+ mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
+-
+- if (!(stat & mask)) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Not ours !");
++ if (!(stat & mask))
+ return IRQ_NONE;
++
++ mantis->mantis_int_stat = stat;
++ mantis->mantis_int_mask = mask;
++ dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]= [", stat, mask);
++ if (stat & MANTIS_INT_RISCEN) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
++ }
++ if (stat & MANTIS_INT_I2CRACK) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
++// wake_up(&mantis->i2c_wq);
++ }
++ if (stat & MANTIS_INT_PCMCIA7) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
++ }
++ if (stat & MANTIS_INT_IRQ0) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
++ }
++ if (stat & MANTIS_INT_IRQ1) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
++ }
++ if (stat & MANTIS_INT_OCERR) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
++ }
++ if (stat & MANTIS_INT_PABORT) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT PABRT *");
++ }
++ if (stat & MANTIS_INT_RIPERR) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT RIPRR *");
+ }
+- mmwrite(lstat, MANTIS_INT_STAT);
+- interrupts = hweight32(stat);
+- dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]=%d [", stat, mask, interrupts);
+-
+- while (lstat) {
+- if (lstat & MANTIS_INT_RISCEN) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
+- lstat &= ~MANTIS_INT_RISCEN;
+-
+- } else if (lstat & MANTIS_INT_I2CRACK) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
+- mantis->mantis_int_stat = stat;
+- mantis->mantis_int_mask = mask;
+- wake_up(&mantis->i2c_wq);
+- lstat &= ~MANTIS_INT_I2CRACK;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA7) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
+- lstat &= ~MANTIS_INT_PCMCIA7;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA6) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-06 *");
+- lstat &= ~MANTIS_INT_PCMCIA6;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA5) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-05 *");
+- lstat &= ~MANTIS_INT_PCMCIA5;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA4) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-04 *");
+- lstat &= ~MANTIS_INT_PCMCIA4;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA3) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-03 *");
+- lstat &= ~MANTIS_INT_PCMCIA3;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA2) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-02 *");
+- lstat &= ~MANTIS_INT_PCMCIA2;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA1) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-01 *");
+- lstat &= ~MANTIS_INT_PCMCIA1;
+-
+- } else if (lstat & MANTIS_INT_PCMCIA0) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-00 *");
+- lstat &= ~MANTIS_INT_PCMCIA0;
+-
+- } else if (lstat & MANTIS_INT_IRQ0) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
+- lstat &= ~MANTIS_INT_IRQ0;
+-
+- } else if (lstat & MANTIS_INT_IRQ1) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
+- lstat &= ~MANTIS_INT_IRQ1;
+-
+- } else if (lstat & MANTIS_INT_OCERR) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
+- lstat &= ~MANTIS_INT_OCERR;
+-
+- } else if (lstat & MANTIS_INT_PABORT) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT PABRT *");
+- lstat &= ~MANTIS_INT_PABORT;
+-
+- } else if (lstat & MANTIS_INT_RIPERR) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT RIPRR *");
+- lstat &= ~MANTIS_INT_RIPERR;
+-
+- } else if (lstat & MANTIS_INT_PPERR) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT PPERR *");
+- lstat &= ~MANTIS_INT_PPERR;
+-
+- } else if (lstat & MANTIS_INT_FTRGT) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT FTRGT *");
+- lstat &= ~MANTIS_INT_FTRGT;
+-
+- } else if (lstat & MANTIS_INT_RISCI) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT RISCI *");
+- mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
+- tasklet_schedule(&mantis->tasklet);
+- lstat &= ~MANTIS_INT_RISCI;
+-
+- } else if (lstat & MANTIS_INT_I2CDONE) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* I2C DONE *");
+- mantis->mantis_int_stat = stat;
+- mantis->mantis_int_mask = mask;
+- lstat &= ~MANTIS_INT_I2CDONE;
+- } else {
+- dprintk(verbose, MANTIS_DEBUG, 0,
+- "* Unknown [%04x/%04x] *", stat, mask);
+- break;
+- }
+- i++;
+- if (i > interrupts) {
+- dprintk(verbose, MANTIS_ERROR, 1, "going Loopy ! -- BREAK --");
+- break;
+- }
++ if (stat & MANTIS_INT_PPERR) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT PPERR *");
+ }
++ if (stat & MANTIS_INT_FTRGT) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT FTRGT *");
++ }
++ if (stat & MANTIS_INT_RISCI) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* INT RISCI *");
++ mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
++ tasklet_schedule(&mantis->tasklet);
++ }
++ if (stat & MANTIS_INT_I2CDONE) {
++ dprintk(verbose, MANTIS_DEBUG, 0, "* I2C DONE *");
++ wake_up(&mantis->i2c_wq);
++ }
++ mmwrite(stat, MANTIS_INT_STAT);
++ stat &= ~(MANTIS_INT_RISCEN | MANTIS_INT_I2CDONE |
++ MANTIS_INT_I2CRACK | MANTIS_INT_PCMCIA7 |
++ MANTIS_INT_PCMCIA6 | MANTIS_INT_PCMCIA5 |
++ MANTIS_INT_PCMCIA4 | MANTIS_INT_PCMCIA3 |
++ MANTIS_INT_PCMCIA2 | MANTIS_INT_PCMCIA1 |
++ MANTIS_INT_PCMCIA0 | MANTIS_INT_IRQ1 |
++ MANTIS_INT_IRQ0 | MANTIS_INT_OCERR |
++ MANTIS_INT_PABORT | MANTIS_INT_RIPERR |
++ MANTIS_INT_PPERR | MANTIS_INT_FTRGT |
++ MANTIS_INT_RISCI);
++
++ if (stat)
++ dprintk(verbose, MANTIS_DEBUG, 0, "* Unknown [%04x] *", stat);
++
+ dprintk(verbose, MANTIS_DEBUG, 0, "] ===\n");
+
+ return IRQ_HANDLED;
+@@ -180,8 +137,6 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ struct mantis_pci *mantis;
+ int ret = 0;
+
+- devs++;
+-
+ mantis = kmalloc(sizeof (struct mantis_pci), GFP_KERNEL);
+ if (mantis == NULL) {
+ printk("%s: Out of memory\n", __func__);
+@@ -190,6 +145,8 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ }
+ memset(mantis, 0, sizeof (struct mantis_pci));
+ mantis->num = devs;
++ devs++;
++
+ if (pci_enable_device(pdev)) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis PCI enable failed");
+ ret = -ENODEV;
+@@ -225,11 +182,13 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ mantis->latency = latency;
+ mantis->revision = revision;
+ mantis->pdev = pdev;
++ mantis->subsystem_vendor = pdev->subsystem_vendor;
++ mantis->subsystem_device = pdev->subsystem_device;
+ init_waitqueue_head(&mantis->i2c_wq);
+
+ // CAM bypass
+ //mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_IRQ1, MANTIS_INT_MASK);
+- dprintk(verbose, MANTIS_INFO, 1, "gpif status: %04x irqcfg: %04x", mmread(0x9c), mmread(0x98));
++ dprintk(verbose, MANTIS_INFO, 0, "\ngpif status: %04x irqcfg: %04x\n", mmread(0x9c), mmread(0x98));
+ if ((mmread(0x9c) & 0x200) != 0) { //CAM inserted
+ msleep_interruptible(1);
+ if ((mmread(0x9c) & 0x200) != 0)
+@@ -242,11 +201,8 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ }
+ mantis_set_direction(mantis, 0);
+
+- // default latency if none specified
+ if (!latency)
+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 32);
+- dprintk(verbose, MANTIS_ERROR, 0, "Mantis Rev %d, ",
+- mantis->revision);
+
+ dprintk(verbose, MANTIS_ERROR, 0,
+ "irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index 720f4fb..07fcc45 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -81,6 +81,14 @@ struct stv0299_config lgtdqcs001f_config = {
+ // .pll_set = lgtdqcs001f_pll_set,
+ };
+
++#define MANTIS_MODEL_NAME "VP-1033"
++#define MANTIS_DEV_TYPE "DVB-S/DSS"
++
++struct mantis_hwconfig vp1033_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++};
++
+ int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params)
+ {
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.h b/drivers/media/dvb/mantis/mantis_vp1033.h
+index d50f092..e245706 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.h
++++ b/drivers/media/dvb/mantis/mantis_vp1033.h
+@@ -21,10 +21,14 @@
+ #ifndef __MANTIS_VP1033_H
+ #define __MANTIS_VP1033_H
+
+-#include "stv0299.h"
+ #include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "stv0299.h"
++
++#define MANTIS_VP_1033_DVB_S 0x0016
+
+ extern struct stv0299_config lgtdqcs001f_config;
++extern struct mantis_hwconfig vp1033_mantis_config;
+
+ extern int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params);
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index b85ac29..c9c9479 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -26,6 +26,14 @@ struct mb86a16_config vp1034_config = {
+ .set_voltage = vp1034_set_voltage,
+ };
+
++#define MANTIS_MODEL_NAME "VP-1034"
++#define MANTIS_DEV_TYPE "DVB-S/DSS"
++
++struct mantis_hwconfig vp1034_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++};
++
+ int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+ {
+ struct mantis_pci *mantis = fe->dvb->priv;
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.h b/drivers/media/dvb/mantis/mantis_vp1034.h
+index 2324dad..2194857 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.h
++++ b/drivers/media/dvb/mantis/mantis_vp1034.h
+@@ -21,9 +21,14 @@
+ #ifndef __MANTIS_VP1034_H
+ #define __MANTIS_VP1034_H
+
+-#include "mb86a16.h"
+ #include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "mb86a16.h"
++
++
++#define MANTIS_VP_1034_DVB_S 0x0014
+
++extern struct mantis_hwconfig vp1034_mantis_config;
+ extern struct mb86a16_config vp1034_config;
+ extern int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
+
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index bca9eba..e989597 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -32,9 +32,17 @@ struct tda10021_state {
+ u8 reg0;
+ };
+
++#define MANTIS_MODEL_NAME "VP-2033"
++#define MANTIS_DEV_TYPE "DVB-C"
++
++struct mantis_hwconfig vp2033_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++};
++
+ struct cu1216_config philips_cu1216_config = {
+- .demod_address = 0x18 >> 1,
+- .pll_set = philips_cu1216_tuner_set,
++ .demod_address = 0x18 >> 1,
++ .pll_set = philips_cu1216_tuner_set,
+ // .fe_reset = mantis_fe_reset,
+ };
+
+@@ -47,10 +55,10 @@ int philips_cu1216_tuner_set(struct dvb_frontend *fe,
+ u8 buf[4];
+
+ struct i2c_msg msg = {
+- .addr = 0xc0 >> 1,
+- .flags = 0,
+- .buf = buf,
+- .len = sizeof (buf)
++ .addr = 0xc0 >> 1,
++ .flags = 0,
++ .buf = buf,
++ .len = sizeof (buf)
+ };
+
+ #define TUNER_MUL 62500
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+index 29baba1..513c491 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.h
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -21,10 +21,14 @@
+ #ifndef __MANTIS_VP2033_H
+ #define __MANTIS_VP2033_H
+
+-#include "cu1216.h"
+ #include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "cu1216.h"
++
++#define MANTIS_VP_2033_DVB_C 0x0008
+
+ extern struct cu1216_config philips_cu1216_config;
++extern struct mantis_hwconfig vp2033_mantis_config;
+
+ extern int philips_cu1216_tuner_set(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params);
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index f44f226..8043e5d 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -22,7 +22,15 @@
+ #include "mantis_vp3030.h"
+
+ struct zl10353_config mantis_vp3030_config = {
+- .demod_address = 0x0f,
++ .demod_address = 0x0f,
++};
++
++#define MANTIS_MODEL_NAME "VP-3030"
++#define MANTIS_DEV_TYPE "DVB-T"
++
++struct mantis_hwconfig vp3030_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
+ };
+
+ int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.h b/drivers/media/dvb/mantis/mantis_vp3030.h
+index f8e72cc..acc50a4 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.h
++++ b/drivers/media/dvb/mantis/mantis_vp3030.h
+@@ -21,10 +21,14 @@
+ #ifndef __MANTIS_VP3030_H
+ #define __MANTIS_VP3030_H
+
+-#include "zl10353.h"
+-#include "dvb-pll.h"
+ #include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "dvb-pll.h"
++#include "zl10353.h"
++
++#define MANTIS_VP_3030_DVB_T 0x0024
+
+ extern struct zl10353_config mantis_vp3030_config;
++extern struct mantis_hwconfig vp3030_mantis_config;
+
+ #endif // __MANTIS_VP3030_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0009-V4L-DVB-13707-Mantis-Whitespace-cleanup.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0009-V4L-DVB-13707-Mantis-Whitespace-cleanup.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,44 @@
+From e550152089a3e43bcfd98b77e3277fe9011818aa Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:09:53 -0300
+Subject: [PATCH 009/120] V4L/DVB (13707): [Mantis] Whitespace cleanup
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 55172773c57221c7c81e445d04f811f2f0478c3e)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 60a7457..d39cbe0 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -83,7 +83,7 @@ struct mantis_pci {
+ struct pci_dev *pdev;
+
+ unsigned long mantis_addr;
+- volatile void __iomem *mantis_mmio;
++ volatile void __iomem *mantis_mmio;
+
+ u8 irq;
+ u8 revision;
+@@ -121,8 +121,8 @@ struct mantis_pci {
+
+ struct mantis_hwconfig *hwconfig;
+
+- u32 mantis_int_stat;
+- u32 mantis_int_mask;
++ u32 mantis_int_stat;
++ u32 mantis_int_mask;
+
+ /* board specific */
+ u8 mac_address[8];
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0010-V4L-DVB-13708-Mantis-Remove-some-dead-code.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0010-V4L-DVB-13708-Mantis-Remove-some-dead-code.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,97 @@
+From 1642e6b7ccf673805e3d7eb09c4f91f7e3b5563e Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 2 Dec 2009 22:11:00 -0300
+Subject: [PATCH 010/120] V4L/DVB (13708): [Mantis] Remove some dead code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit da7365f46607207c8166167ba497e3cb3e02270d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 2 --
+ drivers/media/dvb/mantis/mantis_pci.c | 1 -
+ drivers/media/dvb/mantis/mantis_vp2033.c | 14 +-------------
+ 3 files changed, 1 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 1012959..d159ad6 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -48,7 +48,6 @@ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+
+ return err;
+ }
+-// msleep_interruptible(2);
+
+ return 0;
+ }
+@@ -75,7 +74,6 @@ static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+ return 0;
+ }
+
+-
+ static int get_mac_address(struct mantis_pci *mantis)
+ {
+ int err;
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 0bc25d2..402f866 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -74,7 +74,6 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ }
+ if (stat & MANTIS_INT_I2CRACK) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
+-// wake_up(&mantis->i2c_wq);
+ }
+ if (stat & MANTIS_INT_PCMCIA7) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index e989597..853b558 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -21,17 +21,6 @@
+ #include "mantis_common.h"
+ #include "mantis_vp2033.h"
+
+-struct tda10021_state {
+- struct i2c_adapter *i2c;
+- struct dvb_frontend_ops ops;
+- /* configuration settings */
+- const struct tda10021_config *config;
+- struct dvb_frontend frontend;
+-
+- u8 pwm;
+- u8 reg0;
+-};
+-
+ #define MANTIS_MODEL_NAME "VP-2033"
+ #define MANTIS_DEV_TYPE "DVB-C"
+
+@@ -49,7 +38,6 @@ struct cu1216_config philips_cu1216_config = {
+ int philips_cu1216_tuner_set(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params)
+ {
+-// struct tda10021_state *state = fe->demodulator_priv;
+ struct mantis_pci *mantis = fe->dvb->priv;
+
+ u8 buf[4];
+@@ -71,11 +59,11 @@ int philips_cu1216_tuner_set(struct dvb_frontend *fe,
+ buf[3] = (params->frequency < 150000000 ? 0xA1 :
+ params->frequency < 445000000 ? 0x92 : 0x34);
+
+-// if (i2c_transfer(state->i2c, &msg, 1) < 0) {
+ if (i2c_transfer(&mantis->adapter, &msg, 1) < 0) {
+ printk("%s tuner not ack!\n", __FUNCTION__);
+ return -EIO;
+ }
+ msleep(100);
++
+ return 0;
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0011-V4L-DVB-13709-Mantis-VP-1034-Switch-13-18v-for-the-V.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0011-V4L-DVB-13709-Mantis-VP-1034-Switch-13-18v-for-the-V.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,77 @@
+From 1ba7c3f04e2d1804a7ccb3874e68459fc50a8865 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 3 Dec 2009 05:37:51 -0300
+Subject: [PATCH 011/120] V4L/DVB (13709): [Mantis/VP-1034] Switch 13/18v for the VP-1034 properly
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 715d341c59d2563940ae07b12f949555ccbe3efb)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_i2c.c | 10 +++++++---
+ drivers/media/dvb/mantis/mantis_vp1034.c | 6 ++++--
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 8b90a2a..53c5f88 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -39,7 +39,7 @@ static int mantis_ack_wait(struct mantis_pci *mantis)
+ mantis->mantis_int_stat & MANTIS_INT_I2CDONE,
+ msecs_to_jiffies(50)) == -ERESTARTSYS) {
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "I2C Transfer failed, Master !I2CDONE");
++ dprintk(verbose, MANTIS_DEBUG, 1, "Master !I2CDONE");
+ rc = -EREMOTEIO;
+ }
+ while (!(mantis->mantis_int_stat & MANTIS_INT_I2CRACK)) {
+@@ -62,7 +62,9 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ {
+ u32 rxd, i;
+
+- dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ", __func__, msg->addr);
++ dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ",
++ __func__, msg->addr);
++
+ for (i = 0; i < msg->len; i++) {
+ rxd = (msg->addr << 25) | (1 << 24)
+ | MANTIS_I2C_RATE_3
+@@ -92,7 +94,9 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ int i;
+ u32 txd = 0;
+
+- dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ", __func__, msg->addr);
++ dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ",
++ __func__, msg->addr);
++
+ for (i = 0; i < msg->len; i++) {
+ dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+ txd = (msg->addr << 25) | (msg->buf[i] << 8)
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index c9c9479..f6766d0 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -40,12 +40,14 @@ int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+
+ switch (voltage) {
+ case SEC_VOLTAGE_13:
+- mmwrite((mmread(MANTIS_GPIF_ADDR)) | voltage, MANTIS_GPIF_ADDR);
+ dprintk(verbose, MANTIS_ERROR, 1, "Polarization=[13V]");
++ gpio_set_bits(mantis, 13, 1);
++ gpio_set_bits(mantis, 14, 0);
+ break;
+ case SEC_VOLTAGE_18:
+- mmwrite((mmread(MANTIS_GPIF_ADDR)) & voltage, MANTIS_GPIF_ADDR);
+ dprintk(verbose, MANTIS_ERROR, 1, "Polarization=[18V]");
++ gpio_set_bits(mantis, 13, 1);
++ gpio_set_bits(mantis, 14, 1);
+ break;
+ case SEC_VOLTAGE_OFF:
+ dprintk(verbose, MANTIS_ERROR, 1, "Frontend (dummy) POWERDOWN");
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0012-V4L-DVB-13710-Mantis-FIX-Use-swfilter-188-204-accord.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0012-V4L-DVB-13710-Mantis-FIX-Use-swfilter-188-204-accord.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,107 @@
+From 8a21c066cd6ca5cbbfc16ac463889ba0b291ef7f Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 3 Dec 2009 05:38:33 -0300
+Subject: [PATCH 012/120] V4L/DVB (13710): [Mantis] FIX: Use swfilter (188/204) accordingly
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 01a8c3eebb3c83df337f88332756f16154cecc0f)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 4 +++-
+ drivers/media/dvb/mantis/mantis_dma.c | 2 --
+ drivers/media/dvb/mantis/mantis_vp1033.c | 1 +
+ drivers/media/dvb/mantis/mantis_vp1034.c | 1 +
+ drivers/media/dvb/mantis/mantis_vp2033.c | 1 +
+ drivers/media/dvb/mantis/mantis_vp3030.c | 1 +
+ 6 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index d39cbe0..197393e 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -64,13 +64,15 @@
+ #define mmor(dat, addr) mmwrite((dat) | mmread(addr), addr)
+ #define mmaor(dat, addr) mmwrite((dat) | ((mask) & mmread(addr)), addr)
+
++#define MANTIS_TS_188 0
++#define MANTIS_TS_204 1
+
+ struct mantis_hwconfig {
+ char *model_name;
+ char *dev_type;
++ u32 ts_size;
+ };
+
+-
+ struct mantis_pci {
+ /* PCI stuff */
+ u16 vendor_id;
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index 9e3aa5e..b8fd1c7 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -154,8 +154,6 @@ err:
+ return err;
+ }
+
+-
+-
+ static inline void mantis_risc_program(struct mantis_pci *mantis)
+ {
+ u32 buf_pos = 0;
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index 07fcc45..daf02c1 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -87,6 +87,7 @@ struct stv0299_config lgtdqcs001f_config = {
+ struct mantis_hwconfig vp1033_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_204,
+ };
+
+ int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index f6766d0..a2fe9d4 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -32,6 +32,7 @@ struct mb86a16_config vp1034_config = {
+ struct mantis_hwconfig vp1034_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_204,
+ };
+
+ int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 853b558..15772fe 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -27,6 +27,7 @@
+ struct mantis_hwconfig vp2033_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
+ };
+
+ struct cu1216_config philips_cu1216_config = {
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index 8043e5d..cab092c 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -31,6 +31,7 @@ struct zl10353_config mantis_vp3030_config = {
+ struct mantis_hwconfig vp3030_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
+ };
+
+ int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0013-V4L-DVB-13711-Mantis-FIX-Do-nor-toggle-GPIF-status.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0013-V4L-DVB-13711-Mantis-FIX-Do-nor-toggle-GPIF-status.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,44 @@
+From 891a939f0043167db8a735c2a5d0b90734b22147 Mon Sep 17 00:00:00 2001
+From: Marko Ristola <marko.ristola at kolumbus.fi>
+Date: Thu, 3 Dec 2009 05:39:22 -0300
+Subject: [PATCH 013/120] V4L/DVB (13711): [Mantis] FIX: Do nor toggle GPIF status
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Marko Ristola <marko.ristola at kolumbus.fi>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit e4deee04ffda9b44f367a40dbad8306ab88cb321)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dma.c | 5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index b8fd1c7..e207870 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -190,7 +190,8 @@ void mantis_dma_start(struct mantis_pci *mantis)
+
+ mantis_risc_program(mantis);
+ mmwrite(cpu_to_le32(mantis->risc_dma), MANTIS_RISC_START);
+- mmwrite(MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
++// mmwrite(MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
++ mmwrite(mmread(MANTIS_GPIF_ADDR) | MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
+
+ mmwrite(0, MANTIS_DMA_CTL);
+ mantis->last_block = mantis->finished_block = 0;
+@@ -210,6 +211,8 @@ void mantis_dma_stop(struct mantis_pci *mantis)
+ mask = mmread(MANTIS_INT_MASK);
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Stop DMA engine");
+
++ mmwrite((mmread(MANTIS_GPIF_ADDR) & (~(MANTIS_GPIF_RDWRN))), MANTIS_GPIF_ADDR);
++
+ mmwrite((mmread(MANTIS_DMA_CTL) & ~(MANTIS_FIFO_EN |
+ MANTIS_DCAP_EN |
+ MANTIS_RISC_EN)), MANTIS_DMA_CTL);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0014-V4L-DVB-13712-Mantis-Add-locking-for-concurrent-acce.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0014-V4L-DVB-13712-Mantis-Add-locking-for-concurrent-acce.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,69 @@
+From 18bf84a35a0b9ea89c4262125457c2938b37f149 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 3 Dec 2009 05:42:10 -0300
+Subject: [PATCH 014/120] V4L/DVB (13712): [Mantis] Add locking for concurrent access
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit e2f67e4fb931b975058b3bd48eaac43780c92c88)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 2 ++
+ drivers/media/dvb/mantis/mantis_i2c.c | 3 +++
+ 2 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 197393e..e354e76 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -25,6 +25,7 @@
+ #include <linux/moduleparam.h>
+ #include <linux/kernel.h>
+ #include <linux/pci.h>
++#include <linux/mutex.h>
+
+ #include "dvbdev.h"
+ #include "dvb_demux.h"
+@@ -109,6 +110,7 @@ struct mantis_pci {
+ struct i2c_adapter adapter;
+ int i2c_rc;
+ wait_queue_head_t i2c_wq;
++ struct mutex i2c_lock;
+
+ /* DVB stuff */
+ struct dvb_adapter dvb_adapter;
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 53c5f88..39fabe5 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -125,6 +125,7 @@ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, in
+ struct mantis_pci *mantis;
+
+ mantis = i2c_get_adapdata(adapter);
++ mutex_lock(&mantis->i2c_lock);
+ for (i = 0; i < num; i++) {
+ if (msgs[i].flags & I2C_M_RD)
+ ret = mantis_i2c_read(mantis, &msgs[i]);
+@@ -134,6 +135,7 @@ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, in
+ if (ret < 0)
+ return ret;
+ }
++ mutex_unlock(&mantis->i2c_lock);
+
+ return num;
+ }
+@@ -160,6 +162,7 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ {
+ u32 intstat, intmask;
+
++ mutex_init(&mantis->i2c_lock);
+ memcpy(&mantis->adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
+ i2c_set_adapdata(&mantis->adapter, mantis);
+ mantis->i2c_rc = i2c_add_adapter(&mantis->adapter);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0015-V4L-DVB-13713-MB86A16-Fix-Initialize-SNR-STATUS.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0015-V4L-DVB-13713-MB86A16-Fix-Initialize-SNR-STATUS.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,41 @@
+From 7966bbe3618b2095cd5534ac88d80e7a189b0ccf Mon Sep 17 00:00:00 2001
+From: Sigmund Augdal <sigmund at snap.tv>
+Date: Thu, 3 Dec 2009 05:44:00 -0300
+Subject: [PATCH 015/120] V4L/DVB (13713): [MB86A16] Fix: Initialize SNR/STATUS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Sigmund Augdal <sigmund at snap.tv>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 1fa1f107852484157c5453cc6c4a60c792f06c35)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 361e476..4f8ef2e 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -595,6 +595,7 @@ static int mb86a16_read_status(struct dvb_frontend *fe, fe_status_t *status)
+ {
+ struct mb86a16_state *state = fe->demodulator_priv;
+
++ *status = 0;
+ if (state->signal & 0x02)
+ *status |= FE_HAS_VITERBI;
+ if (state->signal & 0x01)
+@@ -1693,6 +1694,7 @@ static int mb86a16_read_snr(struct dvb_frontend *fe, u16 *snr)
+ int low_tide = 2, high_tide = 30, q_level;
+ u8 cn;
+
++ *snr = 0;
+ if (mb86a16_read(state, 0x26, &cn) != 2) {
+ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
+ return -EREMOTEIO;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0016-V4L-DVB-13714-MB86A16-FIX-Code-simplification-use-hw.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0016-V4L-DVB-13714-MB86A16-FIX-Code-simplification-use-hw.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,75 @@
+From fb7e4ac1badaa9f12f3825caeb391dcb95b3bd9b Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 3 Dec 2009 05:44:38 -0300
+Subject: [PATCH 016/120] V4L/DVB (13714): [MB86A16] FIX/Code simplification: use hwconfig->ts_size instead of ts_size
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+thanks to Marko Ristola for pointing it out
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 33c79630dd9fb7658dbb885a22e3a8127b16a38a)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 1 -
+ drivers/media/dvb/mantis/mantis_dma.c | 4 ++--
+ drivers/media/dvb/mantis/mantis_dvb.c | 1 -
+ 3 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index e354e76..d4865e4 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -92,7 +92,6 @@ struct mantis_pci {
+ u8 revision;
+
+ unsigned int num;
+- u16 ts_size;
+
+ /* RISC Core */
+ u32 finished_block;
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index e207870..ea23a89 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -190,7 +190,6 @@ void mantis_dma_start(struct mantis_pci *mantis)
+
+ mantis_risc_program(mantis);
+ mmwrite(cpu_to_le32(mantis->risc_dma), MANTIS_RISC_START);
+-// mmwrite(MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
+ mmwrite(mmread(MANTIS_GPIF_ADDR) | MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
+
+ mmwrite(0, MANTIS_DMA_CTL);
+@@ -227,12 +226,13 @@ void mantis_dma_stop(struct mantis_pci *mantis)
+ void mantis_dma_xfer(unsigned long data)
+ {
+ struct mantis_pci *mantis = (struct mantis_pci *) data;
++ struct mantis_hwconfig *config = mantis->hwconfig;
+
+ while (mantis->last_block != mantis->finished_block) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "last block=[%d] finished block=[%d]",
+ mantis->last_block, mantis->finished_block);
+
+- (mantis->ts_size ? dvb_dmx_swfilter_204: dvb_dmx_swfilter)
++ (config->ts_size ? dvb_dmx_swfilter_204: dvb_dmx_swfilter)
+ (&mantis->demux, &mantis->buf_cpu[mantis->last_block * MANTIS_BLOCK_BYTES], MANTIS_BLOCK_BYTES);
+ mantis->last_block = (mantis->last_block + 1) % MANTIS_BLOCK_COUNT;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 319bb8b..7fe8541 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -142,7 +142,6 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ mantis->demux.start_feed = mantis_dvb_start_feed;
+ mantis->demux.stop_feed = mantis_dvb_stop_feed;
+ mantis->demux.write_to_decoder = NULL;
+- mantis->ts_size = 1; //188
+ dprintk(verbose, MANTIS_DEBUG, 1, "dvb_dmx_init");
+ if ((result = dvb_dmx_init(&mantis->demux)) < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0017-V4L-DVB-13715-Mantis-Kernel-I2C-changes-use-PCI-pare.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0017-V4L-DVB-13715-Mantis-Kernel-I2C-changes-use-PCI-pare.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,57 @@
+From 229bcc82455f75e57609caab078bba2b94c4db4e Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 3 Dec 2009 05:46:06 -0300
+Subject: [PATCH 017/120] V4L/DVB (13715): [Mantis] Kernel I2C changes: use PCI parent device
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 8154bad4c488c1a23fb504a6e751d71a39733b76)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 2 +-
+ drivers/media/dvb/mantis/mantis_i2c.c | 10 +++++++---
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index d4865e4..34d2389 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -83,7 +83,7 @@ struct mantis_pci {
+
+ u8 latency;
+
+- struct pci_dev *pdev;
++ struct pci_dev *pdev;
+
+ unsigned long mantis_addr;
+ volatile void __iomem *mantis_mmio;
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 39fabe5..005df1e 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -161,11 +161,15 @@ static struct i2c_adapter mantis_i2c_adapter = {
+ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ {
+ u32 intstat, intmask;
++ struct i2c_adapter *i2c_adapter = &mantis->adapter;
++ struct pci_dev *pdev = mantis->pdev;
+
+ mutex_init(&mantis->i2c_lock);
+- memcpy(&mantis->adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
+- i2c_set_adapdata(&mantis->adapter, mantis);
+- mantis->i2c_rc = i2c_add_adapter(&mantis->adapter);
++ memcpy(i2c_adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
++ i2c_set_adapdata(i2c_adapter, mantis);
++
++ i2c_adapter->dev.parent = &pdev->dev;
++ mantis->i2c_rc = i2c_add_adapter(i2c_adapter);
+ if (mantis->i2c_rc < 0)
+ return mantis->i2c_rc;
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0018-V4L-DVB-13716-Mantis-Bug-incorrect-byte-swap.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0018-V4L-DVB-13716-Mantis-Bug-incorrect-byte-swap.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,39 @@
+From f0fb46cca3273252efbb9671e781f6d0b31f05fb Mon Sep 17 00:00:00 2001
+From: David Woodhouse <dwmw2 at infradead.org>
+Date: Thu, 3 Dec 2009 05:47:11 -0300
+Subject: [PATCH 018/120] V4L/DVB (13716): [Mantis] Bug: incorrect byte swap
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+You know, the worst endianness errors are not the cases where
+people forget to byte-swap, but the cases where they either byte-swap
+with the wrong size, or byte-swap when they shouldn't have done so at
+all. Those ones defeat the casual reader of the code.
+
+Signed-off-by: David Woodhouse <dwmw2 at infradead.org>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 417036844823313901d7f7d7b963f215cc3b0641)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dma.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index ea23a89..f685992 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -189,7 +189,7 @@ void mantis_dma_start(struct mantis_pci *mantis)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Start DMA engine");
+
+ mantis_risc_program(mantis);
+- mmwrite(cpu_to_le32(mantis->risc_dma), MANTIS_RISC_START);
++ mmwrite(mantis->risc_dma, MANTIS_RISC_START);
+ mmwrite(mmread(MANTIS_GPIF_ADDR) | MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
+
+ mmwrite(0, MANTIS_DMA_CTL);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0019-V4L-DVB-13717-MB86A16-Statistics-Updates.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0019-V4L-DVB-13717-MB86A16-Statistics-Updates.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,243 @@
+From 084ae03964c65b3c484533ca43c6c2cadab7795c Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 3 Dec 2009 05:48:13 -0300
+Subject: [PATCH 019/120] V4L/DVB (13717): [MB86A16] Statistics Updates
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* Demodulator status check made reliable
+* Code simplification for Viterbi Sync check, makes
+ acquisition more reliable
+
+* Implement a BER monitor
+* Implement a Signal strength monitor
+* Implement a "simple" UCB monitor, no real UCB monitor
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 77557abef0de3f1f1e8f563db6df8710a9e930fe)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 142 +++++++++++++++++++++++++++------
+ 1 files changed, 117 insertions(+), 25 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 4f8ef2e..eddb35b 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -36,7 +36,6 @@ struct mb86a16_state {
+ struct i2c_adapter *i2c_adap;
+ const struct mb86a16_config *config;
+ struct dvb_frontend frontend;
+- u8 signal;
+
+ // tuning parameters
+ int frequency;
+@@ -593,17 +592,39 @@ err:
+
+ static int mb86a16_read_status(struct dvb_frontend *fe, fe_status_t *status)
+ {
++ u8 stat, stat2;
+ struct mb86a16_state *state = fe->demodulator_priv;
+
+ *status = 0;
+- if (state->signal & 0x02)
+- *status |= FE_HAS_VITERBI;
+- if (state->signal & 0x01)
++
++ if (mb86a16_read(state, MB86A16_SIG1, &stat) != 2)
++ goto err;
++ if (mb86a16_read(state, MB86A16_SIG2, &stat2) != 2)
++ goto err;
++ if ((stat > 25) && (stat2 > 25))
++ *status |= FE_HAS_SIGNAL;
++ if ((stat > 45) && (stat2 > 45))
++ *status |= FE_HAS_CARRIER;
++
++ if (mb86a16_read(state, MB86A16_STATUS, &stat) != 2)
++ goto err;
++
++ if (stat & 0x01)
+ *status |= FE_HAS_SYNC;
+- if (state->signal & 0x03)
++ if (stat & 0x01)
++ *status |= FE_HAS_VITERBI;
++
++ if (mb86a16_read(state, MB86A16_FRAMESYNC, &stat) != 2)
++ goto err;
++
++ if ((stat & 0x0f) && (*status & FE_HAS_VITERBI))
+ *status |= FE_HAS_LOCK;
+
+ return 0;
++
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
+ }
+
+ static int sync_chk(struct mb86a16_state *state,
+@@ -1439,10 +1460,6 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ msleep_interruptible(wait_t);
+ sync = sync_chk(state, &VIRM);
+ dprintk(verbose, MB86A16_INFO, 1, "-------- Viterbi=[%d] SYNC=[%d] ---------", VIRM, sync);
+- if (mb86a16_read(state, 0x0d, &state->signal) != 2) {
+- dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
+- return -EREMOTEIO;
+- }
+ if (VIRM) {
+ if (VIRM == 4) { // 5/6
+ if (SIG1 > 110)
+@@ -1459,22 +1476,14 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ iq_vt_set(state, 1);
+ FEC_srst(state);
+ }
+- if (SIG1 > 110)
+- wait_t = ( 786432 + state->srate / 2) / state->srate;
+- else
+- wait_t = (1572864 + state->srate / 2) / state->srate;
+-
+- msleep_interruptible(wait_t);
+- SEQ_set(state, 1);
+- } else { // 1/2, 2/3, 3/4, 7/8
+- if (SIG1 > 110)
+- wait_t = ( 786432 + state->srate / 2) / state->srate;
+- else
+- wait_t = (1572864 + state->srate / 2) / state->srate;
+-
+- msleep_interruptible(wait_t);
+- SEQ_set(state, 1);
+ }
++ // 1/2, 2/3, 3/4, 7/8
++ if (SIG1 > 110)
++ wait_t = ( 786432 + state->srate / 2) / state->srate;
++ else
++ wait_t = (1572864 + state->srate / 2) / state->srate;
++ msleep_interruptible(wait_t);
++ SEQ_set(state, 1);
+ } else {
+ dprintk(verbose, MB86A16_INFO, 1, "NO -- SYNC");
+ SEQ_set(state, 1);
+@@ -1648,12 +1657,85 @@ static int mb86a16_sleep(struct dvb_frontend *fe)
+
+ static int mb86a16_read_ber(struct dvb_frontend *fe, u32 *ber)
+ {
++ u8 ber_mon, ber_tab, ber_lsb, ber_mid, ber_msb, ber_tim, ber_rst;
++ u32 timer;
++
++ struct mb86a16_state *state = fe->demodulator_priv;
++
++ *ber = 0;
++ if (mb86a16_read(state, MB86A16_BERMON, &ber_mon) != 2)
++ goto err;
++ if (mb86a16_read(state, MB86A16_BERTAB, &ber_tab) != 2)
++ goto err;
++ if (mb86a16_read(state, MB86A16_BERLSB, &ber_lsb) != 2)
++ goto err;
++ if (mb86a16_read(state, MB86A16_BERMID, &ber_mid) != 2)
++ goto err;
++ if (mb86a16_read(state, MB86A16_BERMSB, &ber_msb) != 2)
++ goto err;
++ /* BER monitor invalid when BER_EN = 0 */
++ if (ber_mon & 0x04) {
++ /* coarse, fast calculation */
++ *ber = ber_tab & 0x1f;
++ dprintk(verbose, MB86A16_DEBUG, 1, "BER coarse=[0x%02x]", *ber);
++ if (ber_mon & 0x01) {
++ /*
++ * BER_SEL = 1, The monitored BER is the estimated
++ * value with a Reed-Solomon decoder error amount at
++ * the deinterleaver output.
++ * monitored BER is expressed as a 20 bit output in total
++ */
++ ber_rst = ber_mon >> 3;
++ *ber = (((ber_msb << 8) | ber_mid) << 8) | ber_lsb;
++ if (ber_rst == 0)
++ timer = 12500000;
++ if (ber_rst == 1)
++ timer = 25000000;
++ if (ber_rst == 2)
++ timer = 50000000;
++ if (ber_rst == 3)
++ timer = 100000000;
++
++ *ber /= timer;
++ dprintk(verbose, MB86A16_DEBUG, 1, "BER fine=[0x%02x]", *ber);
++ } else {
++ /*
++ * BER_SEL = 0, The monitored BER is the estimated
++ * value with a Viterbi decoder error amount at the
++ * QPSK demodulator output.
++ * monitored BER is expressed as a 24 bit output in total
++ */
++ ber_tim = ber_mon >> 1;
++ *ber = (((ber_msb << 8) | ber_mid) << 8) | ber_lsb;
++ if (ber_tim == 0)
++ timer = 16;
++ if (ber_tim == 1)
++ timer = 24;
++
++ *ber /= 2 ^ timer;
++ dprintk(verbose, MB86A16_DEBUG, 1, "BER fine=[0x%02x]", *ber);
++ }
++ }
+ return 0;
++err:
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
+ }
+
+ static int mb86a16_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
+ {
++ u8 agcm = 0;
++ struct mb86a16_state *state = fe->demodulator_priv;
++
+ *strength = 0;
++ if (mb86a16_read(state, MB86A16_AGCM, &agcm) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++
++ *strength = ((0xff - agcm) * 100) / 256;
++ dprintk(verbose, MB86A16_DEBUG, 1, "Signal strength=[%d %%]", (u8) *strength);
++ *strength = (0xffff - 0xff) + agcm;
+
+ return 0;
+ }
+@@ -1708,12 +1790,22 @@ static int mb86a16_read_snr(struct dvb_frontend *fe, u16 *snr)
+ }
+ q_level = (*snr * 100) / (high_tide - low_tide);
+ dprintk(verbose, MB86A16_ERROR, 1, "SNR (Quality) = [%d dB], Level=%d %%", *snr, q_level);
++ *snr = (0xffff - 0xff) + *snr;
+
+ return 0;
+ }
+
+ static int mb86a16_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
+ {
++ u8 dist;
++ struct mb86a16_state *state = fe->demodulator_priv;
++
++ if (mb86a16_read(state, MB86A16_DISTMON, &dist) != 2) {
++ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
++ return -EREMOTEIO;
++ }
++ *ucblocks = dist;
++
+ return 0;
+ }
+
+@@ -1723,7 +1815,7 @@ static struct dvb_frontend_ops mb86a16_ops = {
+ .type = FE_QPSK,
+ .frequency_min = 950000,
+ .frequency_max = 2150000,
+- .frequency_stepsize = 125,
++ .frequency_stepsize = 3000,
+ .frequency_tolerance = 0,
+ .symbol_rate_min = 1000000,
+ .symbol_rate_max = 45000000,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0020-V4L-DVB-13718-Mantis-Use-gpio_set_bits-to-turn-OFF-t.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0020-V4L-DVB-13718-Mantis-Use-gpio_set_bits-to-turn-OFF-t.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,58 @@
+From 4f0ee023bddd9630a8ed5ba19c249bbea3a21682 Mon Sep 17 00:00:00 2001
+From: Marko Ristola <marko.ristola at kolumbus.fi>
+Date: Fri, 4 Dec 2009 04:35:35 -0300
+Subject: [PATCH 020/120] V4L/DVB (13718): [Mantis] Use gpio_set_bits to turn OFF the bits as well
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Marko Ristola <marko.ristola at kolumbus.fi>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit f8e26cdec5ac25ae8d73e278e21033292de5430b)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 16 +++++++---------
+ 1 files changed, 7 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index d159ad6..16d693e 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -172,25 +172,23 @@ int mantis_core_exit(struct mantis_pci *mantis)
+ return 0;
+ }
+
++// Turn the given bit on or off.
+ void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
+ {
+- u32 reg;
++ u32 currVal, newVal;
++
++ currVal = mmread(MANTIS_GPIF_ADDR);
+
+ if (value)
+- reg = 0x0000;
++ newVal = currVal | (1 << bitpos);
+ else
+- reg = 0xffff;
+-
+- reg = (value << bitpos);
++ newVal = currVal & (~(1 << bitpos));
+
+- mmwrite(mmread(MANTIS_GPIF_ADDR) | reg, MANTIS_GPIF_ADDR);
++ mmwrite(newVal, MANTIS_GPIF_ADDR);
+ mmwrite(0x00, MANTIS_GPIF_DOUT);
+ udelay(100);
+- mmwrite(mmread(MANTIS_GPIF_ADDR) | reg, MANTIS_GPIF_ADDR);
+- mmwrite(0x00, MANTIS_GPIF_DOUT);
+ }
+
+-
+ //direction = 0 , no CI passthrough ; 1 , CI passthrough
+ void mantis_set_direction(struct mantis_pci *mantis, int direction)
+ {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0021-V4L-DVB-13719-Mantis-VP-2033-Initial-test-switch-to-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0021-V4L-DVB-13719-Mantis-VP-2033-Initial-test-switch-to-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,166 @@
+From 9c53a416608b8ad355793252d21146cb656f3d83 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:39:14 -0300
+Subject: [PATCH 021/120] V4L/DVB (13719): [Mantis/VP-2033] Initial test switch to the tda10021, from the cu1216
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 2687d832fe0141015e2391f3755d9499e6efb83e)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dvb.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp2033.c | 80 +++++++++++++++++++++--------
+ drivers/media/dvb/mantis/mantis_vp2033.h | 8 ++--
+ 3 files changed, 63 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 7fe8541..f255695 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -239,7 +239,7 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- mantis->fe = cu1216_attach(&philips_cu1216_config, &mantis->adapter);
++ mantis->fe = tda10021_attach(&philips_cu1216_config, &mantis->adapter, read_pwm(mantis));
+ if (mantis->fe) {
+ mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
+ dprintk(verbose, MANTIS_ERROR, 1,
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 15772fe..4664d29 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -27,44 +27,80 @@
+ struct mantis_hwconfig vp2033_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+- .ts_size = MANTIS_TS_188,
++ .ts_size = MANTIS_TS_204,
+ };
+
+-struct cu1216_config philips_cu1216_config = {
+- .demod_address = 0x18 >> 1,
+- .pll_set = philips_cu1216_tuner_set,
+-// .fe_reset = mantis_fe_reset,
++struct tda1002x_config philips_cu1216_config = {
++ .demod_address = 0x18 >> 1,
++ .invert = 1,
+ };
+
+-int philips_cu1216_tuner_set(struct dvb_frontend *fe,
+- struct dvb_frontend_parameters *params)
++u8 read_pwm(struct mantis_pci *mantis)
+ {
+- struct mantis_pci *mantis = fe->dvb->priv;
++ u8 b = 0xff;
++ u8 pwm;
++ struct i2c_msg msg[] = {
++ {.addr = 0x50,.flags = 0,.buf = &b,.len = 1},
++ {.addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1}
++ };
+
+- u8 buf[4];
++ if ((i2c_transfer(&mantis->adapter, msg, 2) != 2)
++ || (pwm == 0xff))
++ pwm = 0x48;
+
+- struct i2c_msg msg = {
+- .addr = 0xc0 >> 1,
+- .flags = 0,
+- .buf = buf,
+- .len = sizeof (buf)
+- };
++ return pwm;
++}
++
++int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
++{
++ struct mantis_pci *mantis = fe->dvb->priv;
++
++ u8 buf[6];
++ struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = buf,.len = sizeof(buf) };
++ int i;
+
++#define CU1216_IF 36125000
+ #define TUNER_MUL 62500
+
+- u32 div = (params->frequency + 36125000 + TUNER_MUL / 2) / TUNER_MUL;
++ u32 div = (params->frequency + CU1216_IF + TUNER_MUL / 2) / TUNER_MUL;
+
+ buf[0] = (div >> 8) & 0x7f;
+ buf[1] = div & 0xff;
+- buf[2] = 0x86;
+- buf[3] = (params->frequency < 150000000 ? 0xA1 :
+- params->frequency < 445000000 ? 0x92 : 0x34);
++ buf[2] = 0xce;
++ buf[3] = (params->frequency < 150000000 ? 0x01 :
++ params->frequency < 445000000 ? 0x02 : 0x04);
++ buf[4] = 0xde;
++ buf[5] = 0x20;
+
+- if (i2c_transfer(&mantis->adapter, &msg, 1) < 0) {
+- printk("%s tuner not ack!\n", __FUNCTION__);
++ if (fe->ops.i2c_gate_ctrl)
++ fe->ops.i2c_gate_ctrl(fe, 1);
++
++ if (i2c_transfer(&mantis->adapter, &msg, 1) != 1)
+ return -EIO;
++
++ /* wait for the pll lock */
++ msg.flags = I2C_M_RD;
++ msg.len = 1;
++ for (i = 0; i < 20; i++) {
++ if (fe->ops.i2c_gate_ctrl)
++ fe->ops.i2c_gate_ctrl(fe, 1);
++
++ if (i2c_transfer(&mantis->adapter, &msg, 1) == 1 && (buf[0] & 0x40))
++ break;
++
++ msleep(10);
+ }
+- msleep(100);
++
++ /* switch the charge pump to the lower current */
++ msg.flags = 0;
++ msg.len = 2;
++ msg.buf = &buf[2];
++ buf[2] &= ~0x40;
++ if (fe->ops.i2c_gate_ctrl)
++ fe->ops.i2c_gate_ctrl(fe, 1);
++
++ if (i2c_transfer(&mantis->adapter, &msg, 1) != 1)
++ return -EIO;
+
+ return 0;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+index 513c491..fcf8b85 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.h
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -23,15 +23,15 @@
+
+ #include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "cu1216.h"
++#include "tda1002x.h"
+
+ #define MANTIS_VP_2033_DVB_C 0x0008
+
+-extern struct cu1216_config philips_cu1216_config;
++extern struct tda1002x_config philips_cu1216_config;
+ extern struct mantis_hwconfig vp2033_mantis_config;
+
+-extern int philips_cu1216_tuner_set(struct dvb_frontend *fe,
+- struct dvb_frontend_parameters *params);
++extern int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params);
+
++extern u8 read_pwm(struct mantis_pci *mantis);
+
+ #endif // __MANTIS_VP2033_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0022-V4L-DVB-13720-Mantis-Terratec-Cinergy-C-Add-support-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0022-V4L-DVB-13720-Mantis-Terratec-Cinergy-C-Add-support-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,70 @@
+From 0183b53c0988827e62d106f984f36752ec0ac2fd Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:39:48 -0300
+Subject: [PATCH 022/120] V4L/DVB (13720): [Mantis/Terratec Cinergy C] Add support for the Terratec Cinergy C PCI
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 51d20db8bb9c5a14ac2320664289f13bd52625c6)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 1 +
+ drivers/media/dvb/mantis/mantis_dvb.c | 13 +++++++++++++
+ drivers/media/dvb/mantis/mantis_vp2033.h | 1 +
+ 3 files changed, 15 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 16d693e..3b5fea7 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -111,6 +111,7 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ mantis->hwconfig = &vp1034_mantis_config;
+ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
++ case TERRATEC_CINERGY_C_PCI: // Terratec Cinergy C PCI
+ mantis->hwconfig = &vp2033_mantis_config;
+ break;
+ case MANTIS_VP_3030_DVB_T: // VP-3030
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index f255695..e2aec0c 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -251,6 +251,19 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+
+ }
+ break;
++ case TERRATEC_CINERGY_C_PCI:
++ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ mantis->fe = tda10023_attach(&philips_cu1216_config, &mantis->adapter, read_pwm(mantis));
++ if (mantis->fe) {
++ mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend 0x%02x",
++ philips_cu1216_config.demod_address);
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "Mantis DVB-C Philips CU1216 frontend attach success");
++ }
++ break;
+ default:
+ dprintk(verbose, MANTIS_DEBUG, 1, "Unknown frontend:[0x%02x]",
+ mantis->sub_device_id);
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+index fcf8b85..0a753f7 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.h
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -26,6 +26,7 @@
+ #include "tda1002x.h"
+
+ #define MANTIS_VP_2033_DVB_C 0x0008
++#define TERRATEC_CINERGY_C_PCI 0x1178
+
+ extern struct tda1002x_config philips_cu1216_config;
+ extern struct mantis_hwconfig vp2033_mantis_config;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0023-V4L-DVB-13721-Mantis-Bug-Before-bailing-out-Unlock.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0023-V4L-DVB-13721-Mantis-Bug-Before-bailing-out-Unlock.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,43 @@
+From f8100ec2b738717d465ffefe3f5f0a65703c4a49 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:40:16 -0300
+Subject: [PATCH 023/120] V4L/DVB (13721): [Mantis] Bug! Before bailing out, Unlock
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to hotwings <user.vdr at gmail.com> for pointing out the bug
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 99d96e4e9202aa046e3e2be1813ff59c84e67608)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_i2c.c | 6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 005df1e..45d9e6b 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -133,11 +133,15 @@ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, in
+ ret = mantis_i2c_write(mantis, &msgs[i]);
+
+ if (ret < 0)
+- return ret;
++ goto bail_out;
+ }
+ mutex_unlock(&mantis->i2c_lock);
+
+ return num;
++
++bail_out:
++ mutex_unlock(&mantis->i2c_lock);
++ return ret;
+ }
+
+ static u32 mantis_i2c_func(struct i2c_adapter *adapter)
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0024-V4L-DVB-13722-Mantis-Revert-13560.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0024-V4L-DVB-13722-Mantis-Revert-13560.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,70 @@
+From f828198b4e3907591098362a2896925f84ba7c55 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:40:50 -0300
+Subject: [PATCH 024/120] V4L/DVB (13722): [Mantis] Revert 13560
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 5e68b0aedaa34447d86ae5cc6d071251c62bef37)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 1 -
+ drivers/media/dvb/mantis/mantis_dvb.c | 13 -------------
+ drivers/media/dvb/mantis/mantis_vp2033.h | 1 -
+ 3 files changed, 0 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 3b5fea7..16d693e 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -111,7 +111,6 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ mantis->hwconfig = &vp1034_mantis_config;
+ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+- case TERRATEC_CINERGY_C_PCI: // Terratec Cinergy C PCI
+ mantis->hwconfig = &vp2033_mantis_config;
+ break;
+ case MANTIS_VP_3030_DVB_T: // VP-3030
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index e2aec0c..f255695 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -251,19 +251,6 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+
+ }
+ break;
+- case TERRATEC_CINERGY_C_PCI:
+- dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- mantis->fe = tda10023_attach(&philips_cu1216_config, &mantis->adapter, read_pwm(mantis));
+- if (mantis->fe) {
+- mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend 0x%02x",
+- philips_cu1216_config.demod_address);
+-
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "Mantis DVB-C Philips CU1216 frontend attach success");
+- }
+- break;
+ default:
+ dprintk(verbose, MANTIS_DEBUG, 1, "Unknown frontend:[0x%02x]",
+ mantis->sub_device_id);
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+index 0a753f7..fcf8b85 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.h
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -26,7 +26,6 @@
+ #include "tda1002x.h"
+
+ #define MANTIS_VP_2033_DVB_C 0x0008
+-#define TERRATEC_CINERGY_C_PCI 0x1178
+
+ extern struct tda1002x_config philips_cu1216_config;
+ extern struct mantis_hwconfig vp2033_mantis_config;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0025-V4L-DVB-13723-Mantis-VP-2040-Terratec-Cinergy-C-Add-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0025-V4L-DVB-13723-Mantis-VP-2040-Terratec-Cinergy-C-Add-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,191 @@
+From 4cd0ecb27fcee453c4b435d6bb5fd4e5994f5d2a Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:42:22 -0300
+Subject: [PATCH 025/120] V4L/DVB (13723): [Mantis/VP-2040, Terratec Cinergy C] Add support for the Cinergy C, VP-2040 clone
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b2eb1312faa26703e71b7b3945c8773213e9ee49)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 13 ++++++++--
+ drivers/media/dvb/mantis/mantis_core.c | 4 +++
+ drivers/media/dvb/mantis/mantis_dvb.c | 16 ++++++++++++-
+ drivers/media/dvb/mantis/mantis_vp2040.c | 36 ++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_vp2040.h | 33 +++++++++++++++++++++++++++
+ 5 files changed, 98 insertions(+), 4 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp2040.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp2040.h
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index a980ff2..2be21bf 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -1,6 +1,13 @@
+-mantis-objs = mantis_core.o mantis_dma.o mantis_pci.o mantis_i2c.o \
+- mantis_dvb.o mantis_vp1033.o mantis_vp1034.o mantis_vp2033.o \
+- mantis_vp3030.o
++mantis-objs = mantis_core.o \
++ mantis_dma.o \
++ mantis_pci.o \
++ mantis_i2c.o \
++ mantis_dvb.o \
++ mantis_vp1033.o \
++ mantis_vp1034.o \
++ mantis_vp2033.o \
++ mantis_vp2040.o \
++ mantis_vp3030.o
+
+ obj-$(CONFIG_DVB_MANTIS) += mantis.o
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 16d693e..96b9392 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -23,6 +23,7 @@
+ #include "mantis_vp1033.h"
+ #include "mantis_vp1034.h"
+ #include "mantis_vp2033.h"
++#include "mantis_vp2040.h"
+ #include "mantis_vp3030.h"
+
+ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+@@ -113,6 +114,9 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+ mantis->hwconfig = &vp2033_mantis_config;
+ break;
++ case TERRATEC_CINERGY_C_PCI: // VP-2040 clone
++ mantis->hwconfig = &vp2040_mantis_config;
++ break;
+ case MANTIS_VP_3030_DVB_T: // VP-3030
+ mantis->hwconfig = &vp3030_mantis_config;
+ break;
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index f255695..15012ea 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -28,6 +28,7 @@
+ #include "mantis_vp1033.h"
+ #include "mantis_vp1034.h"
+ #include "mantis_vp2033.h"
++#include "mantis_vp2040.h"
+ #include "mantis_vp3030.h"
+
+ /* Tuner power supply control */
+@@ -243,7 +244,7 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+ if (mantis->fe) {
+ mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
+ dprintk(verbose, MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend @ 0x%02x",
++ "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+ philips_cu1216_config.demod_address);
+
+ dprintk(verbose, MANTIS_ERROR, 1,
+@@ -251,6 +252,19 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+
+ }
+ break;
++ case TERRATEC_CINERGY_C_PCI:
++ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ mantis->fe = tda10023_attach(&tda10023_cu1216_config, &mantis->adapter, read_pwm(mantis));
++ if (mantis->fe) {
++ mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ philips_cu1216_config.demod_address);
++
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "Mantis DVB-C Philips CU1216 frontend attach success");
++ }
++ break;
+ default:
+ dprintk(verbose, MANTIS_DEBUG, 1, "Unknown frontend:[0x%02x]",
+ mantis->sub_device_id);
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+new file mode 100644
+index 0000000..07da738
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -0,0 +1,36 @@
++/*
++ Mantis VP-2040 driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp2040.h"
++
++#define MANTIS_MODEL_NAME "VP-2040"
++#define MANTIS_DEV_TYPE "DVB-C"
++
++struct mantis_hwconfig vp2040_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_204,
++};
++
++struct tda1002x_config tda10023_cu1216_config = {
++ .demod_address = 0x18 >> 1,
++ .invert = 1,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.h b/drivers/media/dvb/mantis/mantis_vp2040.h
+new file mode 100644
+index 0000000..825ccbb
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp2040.h
+@@ -0,0 +1,33 @@
++/*
++ Mantis VP-2040 driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_VP2040_H
++#define __MANTIS_VP2040_H
++
++#include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "tda1002x.h"
++
++#define TERRATEC_CINERGY_C_PCI 0x1178
++
++extern struct tda1002x_config tda10023_cu1216_config;
++extern struct mantis_hwconfig vp2040_mantis_config;
++
++#endif //__MANTIS_VP2040_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0026-V4L-DVB-13724-Mantis-VP-1041-Initial-support-for-Man.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0026-V4L-DVB-13724-Mantis-VP-1041-Initial-support-for-Man.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,439 @@
+From 420fe00706948d2e6ce0f71d253a17b1023f263f Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:43:04 -0300
+Subject: [PATCH 026/120] V4L/DVB (13724): [Mantis/VP-1041] Initial support for Mantis VP-1041
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 873c8c25ebca50bd60e21784c4d442c4fecb8658)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 1 +
+ drivers/media/dvb/mantis/mantis_core.c | 4 +
+ drivers/media/dvb/mantis/mantis_dvb.c | 18 ++
+ drivers/media/dvb/mantis/mantis_vp1041.c | 295 ++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_vp1041.h | 36 ++++
+ 5 files changed, 354 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp1041.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp1041.h
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index 2be21bf..bdf3e36 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -5,6 +5,7 @@ mantis-objs = mantis_core.o \
+ mantis_dvb.o \
+ mantis_vp1033.o \
+ mantis_vp1034.o \
++ mantis_vp1041.o \
+ mantis_vp2033.o \
+ mantis_vp2040.o \
+ mantis_vp3030.o
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 96b9392..47cfb75 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -22,6 +22,7 @@
+ #include "mantis_core.h"
+ #include "mantis_vp1033.h"
+ #include "mantis_vp1034.h"
++#include "mantis_vp1041.h"
+ #include "mantis_vp2033.h"
+ #include "mantis_vp2040.h"
+ #include "mantis_vp3030.h"
+@@ -111,6 +112,9 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ case MANTIS_VP_1034_DVB_S: // VP-1034
+ mantis->hwconfig = &vp1034_mantis_config;
+ break;
++ case MANTIS_VP_1041_DVB_S2: // VP-1041
++ mantis->hwconfig = &vp1041_mantis_config;
++ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+ mantis->hwconfig = &vp2033_mantis_config;
+ break;
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 15012ea..a4750bb 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -27,6 +27,7 @@
+ #include "dvb_frontend.h"
+ #include "mantis_vp1033.h"
+ #include "mantis_vp1034.h"
++#include "mantis_vp1041.h"
+ #include "mantis_vp2033.h"
+ #include "mantis_vp2040.h"
+ #include "mantis_vp3030.h"
+@@ -238,6 +239,23 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+
+ }
+ break;
++ case MANTIS_VP_1041_DVB_S2:
++ mantis->fe = stb0899_attach(&vp1041_config, &mantis->adapter);
++ if (mantis->fe) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found STB0899 DVB-S/DVB-S2 frontend @0x%02x",
++ vp1041_config.demod_address);
++
++ if (stb6100_attach(mantis->fe, &vp1041_stb6100_config, &mantis->adapter)) {
++ if (!lnbp21_attach(mantis->fe, &mantis->adapter, 0, 0)) {
++ printk("%s: No LNBP21 found!\n", __FUNCTION__);
++ mantis->fe = NULL;
++ }
++ } else {
++ mantis->fe = NULL;
++ }
++ }
++ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+ mantis->fe = tda10021_attach(&philips_cu1216_config, &mantis->adapter, read_pwm(mantis));
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+new file mode 100644
+index 0000000..a3279f0
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -0,0 +1,295 @@
++/*
++ Mantis VP-1041 driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp1041.h"
++#include "stb0899_reg.h"
++#include "stb0899_cfg.h"
++#include "stb6100_cfg.h"
++
++#define MANTIS_MODEL_NAME "VP-1041"
++#define MANTIS_DEV_TYPE "DSS/DVB-S/DVB-S2"
++
++struct mantis_hwconfig vp1041_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
++};
++
++static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
++
++// 0x0000000b , /* SYSREG */
++ { STB0899_DEV_ID , 0x30 },
++ { STB0899_DISCNTRL1 , 0x32 },
++ { STB0899_DISCNTRL2 , 0x80 },
++ { STB0899_DISRX_ST0 , 0x04 },
++ { STB0899_DISRX_ST1 , 0x00 },
++ { STB0899_DISPARITY , 0x00 },
++ { STB0899_DISFIFO , 0x00 },
++ { STB0899_DISSTATUS , 0x20 },
++ { STB0899_DISF22 , 0x99 },
++ { STB0899_DISF22RX , 0xa8 },
++ //SYSREG ?
++ { STB0899_ACRPRESC , 0x11 },
++ { STB0899_ACRDIV1 , 0x0a },
++ { STB0899_ACRDIV2 , 0x05 },
++ { STB0899_DACR1 , 0x00 },
++ { STB0899_DACR2 , 0x00 },
++ { STB0899_OUTCFG , 0x00 },
++ { STB0899_MODECFG , 0x00 },
++ { STB0899_IRQSTATUS_3 , 0xfe },
++ { STB0899_IRQSTATUS_2 , 0x03 },
++ { STB0899_IRQSTATUS_1 , 0x7c },
++ { STB0899_IRQSTATUS_0 , 0xf4 },
++ { STB0899_IRQMSK_3 , 0xf3 },
++ { STB0899_IRQMSK_2 , 0xfc },
++ { STB0899_IRQMSK_1 , 0xff },
++ { STB0899_IRQMSK_0 , 0xff },
++ { STB0899_IRQCFG , 0x00 },
++ { STB0899_I2CCFG , 0x88 },
++ { STB0899_I2CRPT , 0x5c },
++ { STB0899_IOPVALUE5 , 0x00 },
++ { STB0899_IOPVALUE4 , 0x33 },
++ { STB0899_IOPVALUE3 , 0x6d },
++ { STB0899_IOPVALUE2 , 0x90 },
++ { STB0899_IOPVALUE1 , 0x60 },
++ { STB0899_IOPVALUE0 , 0x00 },
++ { STB0899_GPIO00CFG , 0x82 },
++ { STB0899_GPIO01CFG , 0x82 },
++ { STB0899_GPIO02CFG , 0x82 },
++ { STB0899_GPIO03CFG , 0x82 },
++ { STB0899_GPIO04CFG , 0x82 },
++ { STB0899_GPIO05CFG , 0x82 },
++ { STB0899_GPIO06CFG , 0x82 },
++ { STB0899_GPIO07CFG , 0x82 },
++ { STB0899_GPIO08CFG , 0x82 },
++ { STB0899_GPIO09CFG , 0x82 },
++ { STB0899_GPIO10CFG , 0x82 },
++ { STB0899_GPIO11CFG , 0x82 },
++ { STB0899_GPIO12CFG , 0x82 },
++ { STB0899_GPIO13CFG , 0x82 },
++ { STB0899_GPIO14CFG , 0x82 },
++ { STB0899_GPIO15CFG , 0x82 },
++ { STB0899_GPIO16CFG , 0x82 },
++ { STB0899_GPIO17CFG , 0x82 },
++ { STB0899_GPIO18CFG , 0x82 },
++ { STB0899_GPIO19CFG , 0x82 },
++ { STB0899_GPIO20CFG , 0x82 },
++ { STB0899_SDATCFG , 0xb8 },
++ { STB0899_SCLTCFG , 0xba },
++ { STB0899_AGCRFCFG , 0x1c }, /* 0x11 */
++ { STB0899_GPIO22 , 0x82 }, /* AGCBB2CFG */
++ { STB0899_GPIO21 , 0x91 }, /* AGCBB1CFG */
++ { STB0899_DIRCLKCFG , 0x82 },
++ { STB0899_CLKOUT27CFG , 0x7e },
++ { STB0899_STDBYCFG , 0x82 },
++ { STB0899_CS0CFG , 0x82 },
++ { STB0899_CS1CFG , 0x82 },
++ { STB0899_DISEQCOCFG , 0x20 },
++ { STB0899_GPIO32CFG , 0x82 },
++ { STB0899_GPIO33CFG , 0x82 },
++ { STB0899_GPIO34CFG , 0x82 },
++ { STB0899_GPIO35CFG , 0x82 },
++ { STB0899_GPIO36CFG , 0x82 },
++ { STB0899_GPIO37CFG , 0x82 },
++ { STB0899_GPIO38CFG , 0x82 },
++ { STB0899_GPIO39CFG , 0x82 },
++ { STB0899_NCOARSE , 0x17 }, /* 0x15 = 27 Mhz Clock, F/3 = 198MHz, F/6 = 99MHz */
++ { STB0899_SYNTCTRL , 0x02 }, /* 0x00 = CLK from CLKI, 0x02 = CLK from XTALI */
++ { STB0899_FILTCTRL , 0x00 },
++ { STB0899_SYSCTRL , 0x01 },
++ { STB0899_STOPCLK1 , 0x20 },
++ { STB0899_STOPCLK2 , 0x00 },
++ { STB0899_INTBUFSTATUS , 0x00 },
++ { STB0899_INTBUFCTRL , 0x0a },
++ { 0xffff , 0xff },
++};
++
++static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
++ { STB0899_DEMOD , 0x00 },
++ { STB0899_RCOMPC , 0xc9 },
++ { STB0899_AGC1CN , 0x41 },
++ { STB0899_AGC1REF , 0x10 },
++ { STB0899_RTC , 0x7a },
++ { STB0899_TMGCFG , 0x4e },
++ { STB0899_AGC2REF , 0x34 },
++ { STB0899_TLSR , 0x84 },
++ { STB0899_CFD , 0xc7 },
++ { STB0899_ACLC , 0x87 },
++ { STB0899_BCLC , 0x94 },
++ { STB0899_EQON , 0x41 },
++ { STB0899_LDT , 0xdd },
++ { STB0899_LDT2 , 0xc9 },
++ { STB0899_EQUALREF , 0xb4 },
++ { STB0899_TMGRAMP , 0x10 },
++ { STB0899_TMGTHD , 0x30 },
++ { STB0899_IDCCOMP , 0xfb },
++ { STB0899_QDCCOMP , 0x03 },
++ { STB0899_POWERI , 0x3b },
++ { STB0899_POWERQ , 0x3d },
++ { STB0899_RCOMP , 0x81 },
++ { STB0899_AGCIQIN , 0x80 },
++ { STB0899_AGC2I1 , 0x04 },
++ { STB0899_AGC2I2 , 0xf5 },
++ { STB0899_TLIR , 0x25 },
++ { STB0899_RTF , 0x80 },
++ { STB0899_DSTATUS , 0x00 },
++ { STB0899_LDI , 0xca },
++ { STB0899_CFRM , 0xf1 },
++ { STB0899_CFRL , 0xf3 },
++ { STB0899_NIRM , 0x2a },
++ { STB0899_NIRL , 0x05 },
++ { STB0899_ISYMB , 0x17 },
++ { STB0899_QSYMB , 0xfa },
++ { STB0899_SFRH , 0x2f },
++ { STB0899_SFRM , 0x68 },
++ { STB0899_SFRL , 0x40 },
++ { STB0899_SFRUPH , 0x2f },
++ { STB0899_SFRUPM , 0x68 },
++ { STB0899_SFRUPL , 0x40 },
++ { STB0899_EQUAI1 , 0xfd },
++ { STB0899_EQUAQ1 , 0x04 },
++ { STB0899_EQUAI2 , 0x0f },
++ { STB0899_EQUAQ2 , 0xff },
++ { STB0899_EQUAI3 , 0xdf },
++ { STB0899_EQUAQ3 , 0xfa },
++ { STB0899_EQUAI4 , 0x37 },
++ { STB0899_EQUAQ4 , 0x0d },
++ { STB0899_EQUAI5 , 0xbd },
++ { STB0899_EQUAQ5 , 0xf7 },
++ { STB0899_DSTATUS2 , 0x00 },
++ { STB0899_VSTATUS , 0x00 },
++ { STB0899_VERROR , 0xff },
++ { STB0899_IQSWAP , 0x2a },
++ { STB0899_ECNT1M , 0x00 },
++ { STB0899_ECNT1L , 0x00 },
++ { STB0899_ECNT2M , 0x00 },
++ { STB0899_ECNT2L , 0x00 },
++ { STB0899_ECNT3M , 0x00 },
++ { STB0899_ECNT3L , 0x00 },
++ { STB0899_FECAUTO1 , 0x06 },
++ { STB0899_FECM , 0x01 },
++ { STB0899_VTH12 , 0xf0 },
++ { STB0899_VTH23 , 0xa0 },
++ { STB0899_VTH34 , 0x78 },
++ { STB0899_VTH56 , 0x4e },
++ { STB0899_VTH67 , 0x48 },
++ { STB0899_VTH78 , 0x38 },
++ { STB0899_PRVIT , 0xff },
++ { STB0899_VITSYNC , 0x19 },
++ { STB0899_RSULC , 0xb1 }, /* DVB = 0xb1, DSS = 0xa1 */
++ { STB0899_TSULC , 0x42 },
++ { STB0899_RSLLC , 0x40 },
++ { STB0899_TSLPL , 0x12 },
++ { STB0899_TSCFGH , 0x0c },
++ { STB0899_TSCFGM , 0x00 },
++ { STB0899_TSCFGL , 0x0c },
++ { STB0899_TSOUT , 0x0d }, /* 0x0d for CAM */
++ { STB0899_RSSYNCDEL , 0x00 },
++ { STB0899_TSINHDELH , 0x02 },
++ { STB0899_TSINHDELM , 0x00 },
++ { STB0899_TSINHDELL , 0x00 },
++ { STB0899_TSLLSTKM , 0x00 },
++ { STB0899_TSLLSTKL , 0x00 },
++ { STB0899_TSULSTKM , 0x00 },
++ { STB0899_TSULSTKL , 0xab },
++ { STB0899_PCKLENUL , 0x00 },
++ { STB0899_PCKLENLL , 0xcc },
++ { STB0899_RSPCKLEN , 0xcc },
++ { STB0899_TSSTATUS , 0x80 },
++ { STB0899_ERRCTRL1 , 0xb6 },
++ { STB0899_ERRCTRL2 , 0x96 },
++ { STB0899_ERRCTRL3 , 0x89 },
++ { STB0899_DMONMSK1 , 0x27 },
++ { STB0899_DMONMSK0 , 0x03 },
++ { STB0899_DEMAPVIT , 0x5c },
++ { STB0899_PLPARM , 0x1f },
++ { STB0899_PDELCTRL , 0x48 },
++ { STB0899_PDELCTRL2 , 0x00 },
++ { STB0899_BBHCTRL1 , 0x00 },
++ { STB0899_BBHCTRL2 , 0x00 },
++ { STB0899_HYSTTHRESH , 0x77 },
++ { STB0899_MATCSTM , 0x00 },
++ { STB0899_MATCSTL , 0x00 },
++ { STB0899_UPLCSTM , 0x00 },
++ { STB0899_UPLCSTL , 0x00 },
++ { STB0899_DFLCSTM , 0x00 },
++ { STB0899_DFLCSTL , 0x00 },
++ { STB0899_SYNCCST , 0x00 },
++ { STB0899_SYNCDCSTM , 0x00 },
++ { STB0899_SYNCDCSTL , 0x00 },
++ { STB0899_ISI_ENTRY , 0x00 },
++ { STB0899_ISI_BIT_EN , 0x00 },
++ { STB0899_MATSTRM , 0x00 },
++ { STB0899_MATSTRL , 0x00 },
++ { STB0899_UPLSTRM , 0x00 },
++ { STB0899_UPLSTRL , 0x00 },
++ { STB0899_DFLSTRM , 0x00 },
++ { STB0899_DFLSTRL , 0x00 },
++ { STB0899_SYNCSTR , 0x00 },
++ { STB0899_SYNCDSTRM , 0x00 },
++ { STB0899_SYNCDSTRL , 0x00 },
++ { STB0899_CFGPDELSTATUS1 , 0x10 },
++ { STB0899_CFGPDELSTATUS2 , 0x00 },
++ { STB0899_BBFERRORM , 0x00 },
++ { STB0899_BBFERRORL , 0x00 },
++ { STB0899_UPKTERRORM , 0x00 },
++ { STB0899_UPKTERRORL , 0x00 },
++ { 0xffff , 0xff },
++};
++
++struct stb0899_config vp1041_config = {
++ .init_dev = vp1041_stb0899_s1_init_1,
++ .init_s2_demod = stb0899_s2_init_2,
++ .init_s1_demod = vp1041_stb0899_s1_init_3,
++ .init_s2_fec = stb0899_s2_init_4,
++ .init_tst = stb0899_s1_init_5,
++
++ .demod_address = 0x68, /* 0xd0 >> 1 */
++
++ .xtal_freq = 27000000,
++ .inversion = IQ_SWAP_ON, /* 1 */
++
++ .esno_ave = STB0899_DVBS2_ESNO_AVE,
++ .esno_quant = STB0899_DVBS2_ESNO_QUANT,
++ .avframes_coarse = STB0899_DVBS2_AVFRAMES_COARSE,
++ .avframes_fine = STB0899_DVBS2_AVFRAMES_FINE,
++ .miss_threshold = STB0899_DVBS2_MISS_THRESHOLD,
++ .uwp_threshold_acq = STB0899_DVBS2_UWP_THRESHOLD_ACQ,
++ .uwp_threshold_track = STB0899_DVBS2_UWP_THRESHOLD_TRACK,
++ .uwp_threshold_sof = STB0899_DVBS2_UWP_THRESHOLD_SOF,
++ .sof_search_timeout = STB0899_DVBS2_SOF_SEARCH_TIMEOUT,
++
++ .btr_nco_bits = STB0899_DVBS2_BTR_NCO_BITS,
++ .btr_gain_shift_offset = STB0899_DVBS2_BTR_GAIN_SHIFT_OFFSET,
++ .crl_nco_bits = STB0899_DVBS2_CRL_NCO_BITS,
++ .ldpc_max_iter = STB0899_DVBS2_LDPC_MAX_ITER,
++
++ .tuner_get_frequency = stb6100_get_frequency,
++ .tuner_set_frequency = stb6100_set_frequency,
++ .tuner_set_bandwidth = stb6100_set_bandwidth,
++ .tuner_get_bandwidth = stb6100_get_bandwidth,
++ .tuner_set_rfsiggain = NULL,
++};
++
++struct stb6100_config vp1041_stb6100_config = {
++ .tuner_address = 0x60,
++ .refclock = 27000000,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.h b/drivers/media/dvb/mantis/mantis_vp1041.h
+new file mode 100644
+index 0000000..53f4cb1
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp1041.h
+@@ -0,0 +1,36 @@
++/*
++ Mantis VP-1041 driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_VP1041_H
++#define __MANTIS_VP1041_H
++
++#include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "stb0899_drv.h"
++#include "stb6100.h"
++#include "lnbp21.h"
++
++#define MANTIS_VP_1041_DVB_S2 0x0031
++
++extern struct mantis_hwconfig vp1041_mantis_config;
++extern struct stb0899_config vp1041_config;
++extern struct stb6100_config vp1041_stb6100_config;
++
++#endif // __MANTIS_VP1041_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0027-V4L-DVB-13725-Mantis-VP-1041-Revert-to-old-register-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0027-V4L-DVB-13725-Mantis-VP-1041-Revert-to-old-register-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,212 @@
+From 10b2d83487ca10de1738257dbe3277dffe572776 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:44:55 -0300
+Subject: [PATCH 027/120] V4L/DVB (13725): [Mantis/VP-1041] Revert to old register initialization parameters, for now.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to eso46 for pointing it out
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 0131258ba7a5f776627da953b4cef775568026ea)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_vp1041.c | 126 +++++++++++++++---------------
+ 1 files changed, 63 insertions(+), 63 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index a3279f0..8854ef3 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -125,102 +125,102 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
+ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
+ { STB0899_DEMOD , 0x00 },
+ { STB0899_RCOMPC , 0xc9 },
+- { STB0899_AGC1CN , 0x41 },
++ { STB0899_AGC1CN , 0x01 },
+ { STB0899_AGC1REF , 0x10 },
+- { STB0899_RTC , 0x7a },
++ { STB0899_RTC , 0x23 },
+ { STB0899_TMGCFG , 0x4e },
+ { STB0899_AGC2REF , 0x34 },
+ { STB0899_TLSR , 0x84 },
+- { STB0899_CFD , 0xc7 },
++ { STB0899_CFD , 0xf7 },
+ { STB0899_ACLC , 0x87 },
+ { STB0899_BCLC , 0x94 },
+ { STB0899_EQON , 0x41 },
+- { STB0899_LDT , 0xdd },
+- { STB0899_LDT2 , 0xc9 },
++ { STB0899_LDT , 0xf1 },
++ { STB0899_LDT2 , 0xe3 },
+ { STB0899_EQUALREF , 0xb4 },
+ { STB0899_TMGRAMP , 0x10 },
+ { STB0899_TMGTHD , 0x30 },
+- { STB0899_IDCCOMP , 0xfb },
+- { STB0899_QDCCOMP , 0x03 },
+- { STB0899_POWERI , 0x3b },
+- { STB0899_POWERQ , 0x3d },
+- { STB0899_RCOMP , 0x81 },
++ { STB0899_IDCCOMP , 0xfd },
++ { STB0899_QDCCOMP , 0xff },
++ { STB0899_POWERI , 0x0c },
++ { STB0899_POWERQ , 0x0f },
++ { STB0899_RCOMP , 0x6c },
+ { STB0899_AGCIQIN , 0x80 },
+- { STB0899_AGC2I1 , 0x04 },
+- { STB0899_AGC2I2 , 0xf5 },
+- { STB0899_TLIR , 0x25 },
+- { STB0899_RTF , 0x80 },
++ { STB0899_AGC2I1 , 0x06 },
++ { STB0899_AGC2I2 , 0x00 },
++ { STB0899_TLIR , 0x30 },
++ { STB0899_RTF , 0x7f },
+ { STB0899_DSTATUS , 0x00 },
+- { STB0899_LDI , 0xca },
+- { STB0899_CFRM , 0xf1 },
+- { STB0899_CFRL , 0xf3 },
+- { STB0899_NIRM , 0x2a },
+- { STB0899_NIRL , 0x05 },
+- { STB0899_ISYMB , 0x17 },
+- { STB0899_QSYMB , 0xfa },
++ { STB0899_LDI , 0xbc },
++ { STB0899_CFRM , 0xea },
++ { STB0899_CFRL , 0x31 },
++ { STB0899_NIRM , 0x2b },
++ { STB0899_NIRL , 0x80 },
++ { STB0899_ISYMB , 0x1d },
++ { STB0899_QSYMB , 0xa6 },
+ { STB0899_SFRH , 0x2f },
+ { STB0899_SFRM , 0x68 },
+ { STB0899_SFRL , 0x40 },
+ { STB0899_SFRUPH , 0x2f },
+ { STB0899_SFRUPM , 0x68 },
+ { STB0899_SFRUPL , 0x40 },
+- { STB0899_EQUAI1 , 0xfd },
+- { STB0899_EQUAQ1 , 0x04 },
+- { STB0899_EQUAI2 , 0x0f },
+- { STB0899_EQUAQ2 , 0xff },
+- { STB0899_EQUAI3 , 0xdf },
+- { STB0899_EQUAQ3 , 0xfa },
+- { STB0899_EQUAI4 , 0x37 },
+- { STB0899_EQUAQ4 , 0x0d },
+- { STB0899_EQUAI5 , 0xbd },
+- { STB0899_EQUAQ5 , 0xf7 },
++ { STB0899_EQUAI1 , 0x02 },
++ { STB0899_EQUAQ1 , 0xff },
++ { STB0899_EQUAI2 , 0x04 },
++ { STB0899_EQUAQ2 , 0x05 },
++ { STB0899_EQUAI3 , 0x02 },
++ { STB0899_EQUAQ3 , 0xfd },
++ { STB0899_EQUAI4 , 0x03 },
++ { STB0899_EQUAQ4 , 0x07 },
++ { STB0899_EQUAI5 , 0x08 },
++ { STB0899_EQUAQ5 , 0xf5 },
+ { STB0899_DSTATUS2 , 0x00 },
+ { STB0899_VSTATUS , 0x00 },
+- { STB0899_VERROR , 0xff },
++ { STB0899_VERROR , 0x86 },
+ { STB0899_IQSWAP , 0x2a },
+ { STB0899_ECNT1M , 0x00 },
+ { STB0899_ECNT1L , 0x00 },
+ { STB0899_ECNT2M , 0x00 },
+ { STB0899_ECNT2L , 0x00 },
+- { STB0899_ECNT3M , 0x00 },
+- { STB0899_ECNT3L , 0x00 },
++ { STB0899_ECNT3M , 0x0a },
++ { STB0899_ECNT3L , 0xad },
+ { STB0899_FECAUTO1 , 0x06 },
+ { STB0899_FECM , 0x01 },
+- { STB0899_VTH12 , 0xf0 },
+- { STB0899_VTH23 , 0xa0 },
+- { STB0899_VTH34 , 0x78 },
+- { STB0899_VTH56 , 0x4e },
+- { STB0899_VTH67 , 0x48 },
+- { STB0899_VTH78 , 0x38 },
++ { STB0899_VTH12 , 0xb0 },
++ { STB0899_VTH23 , 0x7a },
++ { STB0899_VTH34 , 0x58 },
++ { STB0899_VTH56 , 0x38 },
++ { STB0899_VTH67 , 0x34 },
++ { STB0899_VTH78 , 0x24 },
+ { STB0899_PRVIT , 0xff },
+ { STB0899_VITSYNC , 0x19 },
+ { STB0899_RSULC , 0xb1 }, /* DVB = 0xb1, DSS = 0xa1 */
+ { STB0899_TSULC , 0x42 },
+- { STB0899_RSLLC , 0x40 },
++ { STB0899_RSLLC , 0x41 },
+ { STB0899_TSLPL , 0x12 },
+ { STB0899_TSCFGH , 0x0c },
+ { STB0899_TSCFGM , 0x00 },
+- { STB0899_TSCFGL , 0x0c },
+- { STB0899_TSOUT , 0x0d }, /* 0x0d for CAM */
++ { STB0899_TSCFGL , 0x00 },
++ { STB0899_TSOUT , 0x69 }, /* 0x0d for CAM */
+ { STB0899_RSSYNCDEL , 0x00 },
+ { STB0899_TSINHDELH , 0x02 },
+ { STB0899_TSINHDELM , 0x00 },
+ { STB0899_TSINHDELL , 0x00 },
+- { STB0899_TSLLSTKM , 0x00 },
+- { STB0899_TSLLSTKL , 0x00 },
++ { STB0899_TSLLSTKM , 0x1b },
++ { STB0899_TSLLSTKL , 0xb3 },
+ { STB0899_TSULSTKM , 0x00 },
+- { STB0899_TSULSTKL , 0xab },
+- { STB0899_PCKLENUL , 0x00 },
++ { STB0899_TSULSTKL , 0x00 },
++ { STB0899_PCKLENUL , 0xbc },
+ { STB0899_PCKLENLL , 0xcc },
+- { STB0899_RSPCKLEN , 0xcc },
+- { STB0899_TSSTATUS , 0x80 },
++ { STB0899_RSPCKLEN , 0xbd },
++ { STB0899_TSSTATUS , 0x90 },
+ { STB0899_ERRCTRL1 , 0xb6 },
+- { STB0899_ERRCTRL2 , 0x96 },
+- { STB0899_ERRCTRL3 , 0x89 },
++ { STB0899_ERRCTRL2 , 0x95 },
++ { STB0899_ERRCTRL3 , 0x8d },
+ { STB0899_DMONMSK1 , 0x27 },
+ { STB0899_DMONMSK0 , 0x03 },
+ { STB0899_DEMAPVIT , 0x5c },
+- { STB0899_PLPARM , 0x1f },
++ { STB0899_PLPARM , 0x19 },
+ { STB0899_PDELCTRL , 0x48 },
+ { STB0899_PDELCTRL2 , 0x00 },
+ { STB0899_BBHCTRL1 , 0x00 },
+@@ -237,19 +237,19 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
+ { STB0899_SYNCDCSTL , 0x00 },
+ { STB0899_ISI_ENTRY , 0x00 },
+ { STB0899_ISI_BIT_EN , 0x00 },
+- { STB0899_MATSTRM , 0x00 },
+- { STB0899_MATSTRL , 0x00 },
+- { STB0899_UPLSTRM , 0x00 },
+- { STB0899_UPLSTRL , 0x00 },
+- { STB0899_DFLSTRM , 0x00 },
++ { STB0899_MATSTRM , 0xf0 },
++ { STB0899_MATSTRL , 0x02 },
++ { STB0899_UPLSTRM , 0x45 },
++ { STB0899_UPLSTRL , 0x60 },
++ { STB0899_DFLSTRM , 0xe3 },
+ { STB0899_DFLSTRL , 0x00 },
+- { STB0899_SYNCSTR , 0x00 },
+- { STB0899_SYNCDSTRM , 0x00 },
+- { STB0899_SYNCDSTRL , 0x00 },
+- { STB0899_CFGPDELSTATUS1 , 0x10 },
+- { STB0899_CFGPDELSTATUS2 , 0x00 },
++ { STB0899_SYNCSTR , 0x47 },
++ { STB0899_SYNCDSTRM , 0x05 },
++ { STB0899_SYNCDSTRL , 0x18 },
++ { STB0899_CFGPDELSTATUS1 , 0x19 },
++ { STB0899_CFGPDELSTATUS2 , 0x2b },
+ { STB0899_BBFERRORM , 0x00 },
+- { STB0899_BBFERRORL , 0x00 },
++ { STB0899_BBFERRORL , 0x01 },
+ { STB0899_UPKTERRORM , 0x00 },
+ { STB0899_UPKTERRORL , 0x00 },
+ { 0xffff , 0xff },
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0028-V4L-DVB-13726-Mantis-Skystar-HD2-Add-support-for-the.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0028-V4L-DVB-13726-Mantis-Skystar-HD2-Add-support-for-the.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,58 @@
+From 4a9230dd5b0b24c1ee13959924a240835c58f132 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:47:30 -0300
+Subject: [PATCH 028/120] V4L/DVB (13726): [Mantis/Skystar HD2] Add support for the Technisat Skystar HD2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 35afca912ffb8ea5a060ff53a59266ccaa769c98)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 1 +
+ drivers/media/dvb/mantis/mantis_dvb.c | 1 +
+ drivers/media/dvb/mantis/mantis_vp1041.h | 1 +
+ 3 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 47cfb75..a164bb1 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -113,6 +113,7 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ mantis->hwconfig = &vp1034_mantis_config;
+ break;
+ case MANTIS_VP_1041_DVB_S2: // VP-1041
++ case TECHNISAT_SKYSTAR_HD2:
+ mantis->hwconfig = &vp1041_mantis_config;
+ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index a4750bb..9634b97 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -240,6 +240,7 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+ }
+ break;
+ case MANTIS_VP_1041_DVB_S2:
++ case TECHNISAT_SKYSTAR_HD2:
+ mantis->fe = stb0899_attach(&vp1041_config, &mantis->adapter);
+ if (mantis->fe) {
+ dprintk(verbose, MANTIS_ERROR, 1,
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.h b/drivers/media/dvb/mantis/mantis_vp1041.h
+index 53f4cb1..2cc83a6 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.h
++++ b/drivers/media/dvb/mantis/mantis_vp1041.h
+@@ -28,6 +28,7 @@
+ #include "lnbp21.h"
+
+ #define MANTIS_VP_1041_DVB_S2 0x0031
++#define TECHNISAT_SKYSTAR_HD2 0x0001
+
+ extern struct mantis_hwconfig vp1041_mantis_config;
+ extern struct stb0899_config vp1041_config;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0029-V4L-DVB-13727-Mantis-VP-1041-Bugfix-Sigh-Don-t-look-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0029-V4L-DVB-13727-Mantis-VP-1041-Bugfix-Sigh-Don-t-look-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,33 @@
+From ffabdfc2881ac07aa8ce7b27869f4372e887e7e7 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:48:03 -0300
+Subject: [PATCH 029/120] V4L/DVB (13727): [Mantis/VP-1041] Bugfix: Sigh! Don't look for the STOP bit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 1159531a93f04346d94f72fdb4719c3f7e7d0a8c)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_vp1041.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 8854ef3..7dee1af 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -64,7 +64,7 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
+ { STB0899_IRQMSK_0 , 0xff },
+ { STB0899_IRQCFG , 0x00 },
+ { STB0899_I2CCFG , 0x88 },
+- { STB0899_I2CRPT , 0x5c },
++ { STB0899_I2CRPT , 0x58 },
+ { STB0899_IOPVALUE5 , 0x00 },
+ { STB0899_IOPVALUE4 , 0x33 },
+ { STB0899_IOPVALUE3 , 0x6d },
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0030-V4L-DVB-13728-Mantis-Add-in-some-Host-Interface-defi.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0030-V4L-DVB-13728-Mantis-Add-in-some-Host-Interface-defi.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From 76360bfbbbd52a857a5aabc8430801025593f2df Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:52:23 -0300
+Subject: [PATCH 030/120] V4L/DVB (13728): [Mantis] Add in some Host Interface definitions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 9ce39460837202920fb9bad88eeec13fc75e7a13)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.h | 9 +++++++++
+ 1 files changed, 9 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_hif.h
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.h b/drivers/media/dvb/mantis/mantis_hif.h
+new file mode 100644
+index 0000000..33b4f2b
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_hif.h
+@@ -0,0 +1,9 @@
++#ifndef __MANTIS_HIF_H
++#define __MANTIS_HIF_H
++
++#define MANTIS_HIF_MEMRD 1
++#define MANTIS_HIF_MEMWR 2
++#define MANTIS_HIF_IOMRD 3
++#define MANTIS_HIF_IOMWR 4
++
++#endif // __MANTIS_HIF_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0031-V4L-DVB-13729-Mantis-Add-in-a-license-header.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0031-V4L-DVB-13729-Mantis-Add-in-a-license-header.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,48 @@
+From 4bb6decd82cafbf52b671ca1c12f71b579b9814c Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:53:07 -0300
+Subject: [PATCH 031/120] V4L/DVB (13729): [Mantis] Add in a license header
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 23fc1b2b00e849f6ec8628da77e2f282aedbebf3)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.h | 20 ++++++++++++++++++++
+ 1 files changed, 20 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.h b/drivers/media/dvb/mantis/mantis_hif.h
+index 33b4f2b..7ef45ce 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.h
++++ b/drivers/media/dvb/mantis/mantis_hif.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_HIF_H
+ #define __MANTIS_HIF_H
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0032-V4L-DVB-13730-Mantis-Add-in-some-UART-definitions.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0032-V4L-DVB-13730-Mantis-Add-in-some-UART-definitions.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,45 @@
+From a2b6bd1a3794cb067d95f8e0af7d02b3f9ab2e69 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:59:05 -0300
+Subject: [PATCH 032/120] V4L/DVB (13730): [Mantis] Add in some UART definitions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit cb428c3fe9667eb7521769f25f65b9dbf52a33ca)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_uart.h | 18 ++++++++++++++++++
+ 1 files changed, 18 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_uart.h
+
+diff --git a/drivers/media/dvb/mantis/mantis_uart.h b/drivers/media/dvb/mantis/mantis_uart.h
+new file mode 100644
+index 0000000..6c9a17c
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_uart.h
+@@ -0,0 +1,18 @@
++#ifndef __MANTIS_UART_H
++#define __MANTIS_UART_H
++
++enum mantis_baud {
++ MANTIS_BAUD_9600 = 0,
++ MANTIS_BAUD_19200,
++ MANTIS_BAUD_38400,
++ MANTIS_BAUD_57600,
++ MANTIS_BAUD_115200
++};
++
++enum mantis_parity {
++ MANTIS_PARITY_NONE = 0,
++ MANTIS_PARITY_EVEN,
++ MANTIS_PARITY_ODD
++};
++
++#endif // __MANTIS_UART_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0033-V4L-DVB-13731-Mantis-Add-in-a-license-header.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0033-V4L-DVB-13731-Mantis-Add-in-a-license-header.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,48 @@
+From 6f11d90b8e18eec1587f9b3d7ca3e500114c26a3 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 04:59:44 -0300
+Subject: [PATCH 033/120] V4L/DVB (13731): [Mantis] Add in a license header
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit d4f4ae046d2a9cd6b7ddb39e336a73ed92b63fe8)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_uart.h | 20 ++++++++++++++++++++
+ 1 files changed, 20 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_uart.h b/drivers/media/dvb/mantis/mantis_uart.h
+index 6c9a17c..6113863 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.h
++++ b/drivers/media/dvb/mantis/mantis_uart.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_UART_H
+ #define __MANTIS_UART_H
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0034-V4L-DVB-13732-Mantis-Add-in-some-Link-Layer-definiti.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0034-V4L-DVB-13732-Mantis-Add-in-some-Link-Layer-definiti.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,78 @@
+From 30987d95eb9450a448f71c575e0bd031cc657378 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:00:30 -0300
+Subject: [PATCH 034/120] V4L/DVB (13732): [Mantis] Add in some Link Layer definitions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit dd827da1e7d6ecf81883af68731cf0f1c2393c6d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_link.h | 51 ++++++++++++++++++++++++++++++++
+ 1 files changed, 51 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_link.h
+
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+new file mode 100644
+index 0000000..2849457
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -0,0 +1,51 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __MANTIS_LINK_H
++#define __MANTIS_LINK_H
++
++enum mantis_sbuf_status {
++ MANTIS_SBUF_DATA_AVAIL = 1,
++ MANTIS_SBUF_DATA_EMPTY = 2,
++ MANTIS_SBUF_DATA_OVFLW = 3
++};
++
++struct mantis_slot {
++ u32 timeout;
++};
++
++struct mantis_ca {
++ struct mantis_slot slot;
++
++ struct tasklet_struct hif_evm_tasklet;
++
++ u32 hif_event;
++ wait_queue_head_t hif_opdone_wq;
++ wait_queue_head_t hif_brrdyw_wq;
++ wait_queue_head_t hif_data_wq;
++ u32 hif_job_queue
++
++ enum mantis_sbuf_status sbuf_status;
++
++ struct dvb_device *ca_dev;
++ void *ca_priv;
++};
++
++#endif // __MANTIS_LINK_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0035-V4L-DVB-13733-Mantis-Start-with-the-PCMCIA-interface.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0035-V4L-DVB-13733-Mantis-Start-with-the-PCMCIA-interface.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,124 @@
+From 5a523189c824cae44f9cbac72014a5604511bbea Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:03:35 -0300
+Subject: [PATCH 035/120] V4L/DVB (13733): [Mantis] Start with the PCMCIA interface
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit bc4ed42fdf762a2049b255de92626ad1cfd86d8e)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 17 ++++++++-------
+ drivers/media/dvb/mantis/mantis_common.h | 4 +++
+ drivers/media/dvb/mantis/mantis_link.h | 2 +-
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 34 ++++++++++++++++++++++++++++++
+ 4 files changed, 48 insertions(+), 9 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_pcmcia.c
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index bdf3e36..fa9e806 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -1,11 +1,12 @@
+-mantis-objs = mantis_core.o \
+- mantis_dma.o \
+- mantis_pci.o \
+- mantis_i2c.o \
+- mantis_dvb.o \
+- mantis_vp1033.o \
+- mantis_vp1034.o \
+- mantis_vp1041.o \
++mantis-objs = mantis_core.o \
++ mantis_dma.o \
++ mantis_pci.o \
++ mantis_i2c.o \
++ mantis_dvb.o \
++ mantis_pcmcia.o \
++ mantis_vp1033.o \
++ mantis_vp1034.o \
++ mantis_vp1041.o \
+ mantis_vp2033.o \
+ mantis_vp2040.o \
+ mantis_vp3030.o
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 34d2389..24fc6da 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -35,6 +35,8 @@
+ #include <linux/i2c.h>
+ #include "mantis_reg.h"
+
++#include "mantis_link.h"
++
+ #define MANTIS_ERROR 0
+ #define MANTIS_NOTICE 1
+ #define MANTIS_INFO 2
+@@ -134,6 +136,8 @@ struct mantis_pci {
+
+ /* A12 A13 A14 */
+ int gpio_status;
++
++ struct mantis_ca *mantis_ca;
+ };
+
+ extern unsigned int verbose;
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 2849457..2d9b64f 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -40,7 +40,7 @@ struct mantis_ca {
+ wait_queue_head_t hif_opdone_wq;
+ wait_queue_head_t hif_brrdyw_wq;
+ wait_queue_head_t hif_data_wq;
+- u32 hif_job_queue
++ u32 hif_job_queue;
+
+ enum mantis_sbuf_status sbuf_status;
+
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+new file mode 100644
+index 0000000..63f9621
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -0,0 +1,34 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++
++int mantis_pcmcia_init(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ return 0;
++}
++
++void mantis_pcmcia_exit(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++
++}
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0036-V4L-DVB-13734-Mantis-Initial-go-at-an-Event-Manager.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0036-V4L-DVB-13734-Mantis-Initial-go-at-an-Event-Manager.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,91 @@
+From d507f514ba5dd6b3ce52467628ddb7ffc7335219 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:04:18 -0300
+Subject: [PATCH 036/120] V4L/DVB (13734): [Mantis] Initial go at an Event Manager
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit d575571e8eda92c2cfd727ef050d17e30878fee6)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 1 +
+ drivers/media/dvb/mantis/mantis_common.h | 2 +
+ drivers/media/dvb/mantis/mantis_evm.c | 37 ++++++++++++++++++++++++++++++
+ 3 files changed, 40 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_evm.c
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index fa9e806..38d0e6d 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -3,6 +3,7 @@ mantis-objs = mantis_core.o \
+ mantis_pci.o \
+ mantis_i2c.o \
+ mantis_dvb.o \
++ mantis_evm.o \
+ mantis_pcmcia.o \
+ mantis_vp1033.o \
+ mantis_vp1034.o \
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 24fc6da..f9891eb 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -77,6 +77,8 @@ struct mantis_hwconfig {
+ };
+
+ struct mantis_pci {
++ unsigned int verbose;
++
+ /* PCI stuff */
+ u16 vendor_id;
+ u16 device_id;
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+new file mode 100644
+index 0000000..c9359d6
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -0,0 +1,37 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_link.h"
++
++int mantis_evmgr_init(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
++ return 0;
++}
++
++void mantis_evmgr_exit(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
++}
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0037-V4L-DVB-13735-Mantis-Implement-the-Event-Manager-tas.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0037-V4L-DVB-13735-Mantis-Implement-the-Event-Manager-tas.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,188 @@
+From cbfb85e388ffddbeaffde6b3a1d86f602ceb45b0 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:05:19 -0300
+Subject: [PATCH 037/120] V4L/DVB (13735): [Mantis] Implement the Event Manager tasklet
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit fadfa070d30434dd228362c933827eb6ce137f2d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 65 +++++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_reg.h | 58 +++++++++++++++++++++++++++++-
+ 2 files changed, 122 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index c9359d6..9f1740e 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -20,12 +20,76 @@
+
+ #include "mantis_common.h"
+ #include "mantis_link.h"
++#include "mantis_hif.h"
++
++void mantis_hifevm_tasklet(unsigned long data)
++{
++ struct mantis_ca *ca = (struct mantis_ca *) data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ u32 gpif_stat;
++
++ gpif_stat = mmread(MANTIS_GPIF_STATUS);
++
++ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
++ if (gpif_stat & MANTIS_CARD_PLUGIN) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
++ mmwrite(0xdada0000, MANTIS_CARD_RESET);
++ // Plugin call here
++ gpif_stat = 0; // crude !
++ }
++ } else {
++ if (gpif_stat & MANTIS_CARD_PLUGOUT) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
++ mmwrite(0xdada0000, MANTIS_CARD_RESET);
++ // Unplug call here
++ gpif_stat = 0; // crude !
++ }
++ }
++
++ if (gpif_stat & MANTIS_GPIF_EXTIRQ)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
++
++ if (gpif_stat & MANTIS_SBUF_WSTO)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
++
++ if (gpif_stat & MANTIS_GPIF_OTHERR)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
++
++ if (gpif_stat & MANTIS_SBUF_OVFLW)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow", mantis->num);
++
++ if (gpif_stat & MANTIS_GPIF_BRRDY) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
++ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
++ if (ca->hif_job_queue & MANTIS_HIF_MEMRD)
++ wake_up(&ca->hif_brrdyw_wq);
++ }
++ if (gpif_stat & MANTIS_GPIF_WRACK)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
++
++ if (gpif_stat & MANTIS_GPIF_INTSTAT)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): GPIF IRQ", mantis->num);
++
++ if (gpif_stat & MANTIS_SBUF_EMPTY)
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Empty", mantis->num);
++
++ if (gpif_stat & MANTIS_SBUF_OPDONE) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
++ if (ca->hif_job_queue) {
++ wake_up(&ca->hif_opdone_wq);
++ ca->hif_event = MANTIS_SBUF_OPDONE;
++ }
++ }
++}
+
+ int mantis_evmgr_init(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
++ tasklet_init(&ca->hif_evm_tasklet, mantis_hifevm_tasklet, (unsigned long) ca);
++
+ return 0;
+ }
+
+@@ -34,4 +98,5 @@ void mantis_evmgr_exit(struct mantis_ca *ca)
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
++ tasklet_kill(&ca->hif_evm_tasklet);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_reg.h b/drivers/media/dvb/mantis/mantis_reg.h
+index 1b54e09..d9862b7 100644
+--- a/drivers/media/dvb/mantis/mantis_reg.h
++++ b/drivers/media/dvb/mantis/mantis_reg.h
+@@ -73,6 +73,40 @@
+ #define MANTIS_I2C_STOP (0x01 << 5)
+ #define MANTIS_I2C_PGMODE (0x01 << 3)
+
++#define MANTIS_GPIF_CFGSLA 0x84
++#define MANTIS_GPIF_WAITSMPL (0x07 << 28)
++#define MANTIS_GPIF_BYTEADDRSUB (0x01 << 25)
++#define MANTIS_GPIF_WAITPOL (0x01 << 24)
++#define MANTIS_GPIF_NCDELAY (0x07 << 20)
++#define MANTIS_GPIF_RW2CSDELAY (0x07 << 16)
++#define MANTIS_GPIF_SLFTIMEDMODE (0x01 << 15)
++#define MANTIS_GPIF_SLFTIMEDDELY (0x7f << 8)
++#define MANTIS_GPIF_DEVTYPE (0x07 << 4)
++#define MANTIS_GPIF_BIGENDIAN (0x01 << 3)
++#define MANTIS_GPIF_FETCHCMD (0x03 << 1)
++#define MANTIS_GPIF_HWORDDEV (0x01 << 0)
++
++#define MANTIS_GPIF_WSTOPER 0x90
++#define MANTIS_GPIF_WSTOPERWREN3 (0x01 << 31)
++#define MANTIS_GPIF_PARBOOTN (0x01 << 29)
++#define MANTIS_GPIF_WSTOPERSLID3 (0x1f << 24)
++#define MANTIS_GPIF_WSTOPERWREN2 (0x01 << 23)
++#define MANTIS_GPIF_WSTOPERSLID2 (0x1f << 16)
++#define MANTIS_GPIF_WSTOPERWREN1 (0x01 << 15)
++#define MANTIS_GPIF_WSTOPERSLID1 (0x1f << 8)
++#define MANTIS_GPIF_WSTOPERWREN0 (0x01 << 7)
++#define MANTIS_GPIF_WSTOPERSLID0 (0x1f << 0)
++
++#define MANTIS_GPIF_CS2RW 0x94
++#define MANTIS_GPIF_CS2RWWREN3 (0x01 << 31)
++#define MANTIS_GPIF_CS2RWDELY3 (0x3f << 24)
++#define MANTIS_GPIF_CS2RWWREN2 (0x01 << 23)
++#define MANTIS_GPIF_CS2RWDELY2 (0x3f << 16)
++#define MANTIS_GPIF_CS2RWWREN1 (0x01 << 15)
++#define MANTIS_GPIF_CS2RWDELY1 (0x3f << 8)
++#define MANTIS_GPIF_CS2RWWREN0 (0x01 << 7)
++#define MANTIS_GPIF_CS2RWDELY0 (0x3f << 0)
++
+ #define MANTIS_GPIF_IRQCFG 0x98
+ #define MANTIS_GPIF_IRQPOL (0x01 << 8)
+ #define MANTIS_MASK_WRACK (0x01 << 7)
+@@ -99,11 +133,33 @@
+ #define MANTIS_CARD_PLUGIN (0x01 << 1)
+ #define MANTIS_CARD_PLUGOUT (0x01 << 0)
+
++#define MANTIS_GPIF_BRADDR 0xa0
++#define MANTIS_GPIF_PCMCIAREG (0x01 << 27)
++#define MANTIS_GPIF_PCMCIAIOM (0x01 << 26)
++#define MANTIS_GPIF_BR_ADDR (0xfffffff << 0)
++
++#define MANTIS_GPIF_BRBYTES 0xa4
++#define MANTIS_GPIF_BRCNT (0xfff << 0)
++
++#define MANTIS_PCMCIA_RESET 0xa8
++#define MANTIS_PCMCIA_RSTVAL (0xff << 0)
++
++#define MANTIS_CARD_RESET 0xac
++
+ #define MANTIS_GPIF_ADDR 0xb0
+-#define MANTIS_GPIF_RDWRN (0x01 << 31)
++#define MANTIS_GPIF_RDWRN (0x01 << 31)
++#define MANTIS_GPIF_PCMCIAREG (0x01 << 27)
++#define MANTIS_GPIF_PCMCIAIOM (0x01 << 26)
++#define MANTIS_GPIF_HIF_ADDR (0xfffffff << 0)
+
+ #define MANTIS_GPIF_DOUT 0xb4
++#define MANTIS_GPIF_HIF_DOUT (0xfffffff << 0)
++
+ #define MANTIS_GPIF_DIN 0xb8
++#define MANTIS_GPIF_HIF_DIN (0xfffffff << 0)
+
++#define MANTIS_GPIF_SPARE 0xbc
++#define MANTIS_GPIF_LOGICRD (0xffff << 16)
++#define MANTIS_GPIF_LOGICRW (0xffff << 0)
+
+ #endif //__MANTIS_REG_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0038-V4L-DVB-13736-Mantis-Implement-CAM-Plug-IN-and-Unplu.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0038-V4L-DVB-13736-Mantis-Implement-CAM-Plug-IN-and-Unplu.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,136 @@
+From a82939e5aec354205b103cfe30ddb7d892e8fa73 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:06:00 -0300
+Subject: [PATCH 038/120] V4L/DVB (13736): [Mantis] Implement CAM Plug IN and Unplug events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Sigh! how i wish things were simpler ...
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 8ce571f5e7eb7186f676af3b60af7980c2fc7929)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_link.h | 8 ++++
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 66 ++++++++++++++++++++++++++++++
+ 2 files changed, 74 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 2d9b64f..c6b3222 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -31,6 +31,12 @@ struct mantis_slot {
+ u32 timeout;
+ };
+
++/* Physical layer */
++enum mantis_slot_state {
++ MODULE_INSERTED = 3,
++ MODULE_XTRACTED = 4
++};
++
+ struct mantis_ca {
+ struct mantis_slot slot;
+
+@@ -44,6 +50,8 @@ struct mantis_ca {
+
+ enum mantis_sbuf_status sbuf_status;
+
++ enum mantis_slot_state slot_state;
++
+ struct dvb_device *ca_dev;
+ void *ca_priv;
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index 63f9621..960123f 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -19,11 +19,75 @@
+ */
+
+ #include "mantis_common.h"
++#include "mantis_link.h" /* temporary due to physical layer stuff */
++
++/*
++ * If Slot state is already PLUG_IN event and we are called
++ * again, definitely it is jitter alone
++ */
++void mantis_event_cam_plugin(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ u32 gpif_irqcfg;
++
++ if (ca->slot_state == MODULE_XTRACTED) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event: CAM Plugged IN: Adapter(%d) Slot(0)", mantis->num);
++ udelay(50);
++ mmwrite(0xda000000, MANTIS_CARD_RESET);
++ gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG);
++ gpif_irqcfg |= MANTIS_MASK_PLUGOUT;
++ gpif_irqcfg &= ~MANTIS_MASK_PLUGIN;
++ mmwrite(gpif_irqcfg, MANTIS_GPIF_IRQCFG);
++ udelay(500);
++ ca->slot_state = MODULE_INSERTED;
++ }
++ udelay(100);
++}
++
++/*
++ * If Slot state is already UN_PLUG event and we are called
++ * again, definitely it is jitter alone
++ */
++void mantis_event_cam_unplug(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ u32 gpif_irqcfg;
++
++ if (ca->slot_state == MODULE_INSERTED) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event: CAM Unplugged: Adapter(%d) Slot(0)", mantis->num);
++ udelay(50);
++ mmwrite(0x00da0000, MANTIS_CARD_RESET);
++ gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG);
++ gpif_irqcfg |= MANTIS_MASK_PLUGIN;
++ gpif_irqcfg &= ~MANTIS_MASK_PLUGOUT;
++ mmwrite(gpif_irqcfg, MANTIS_GPIF_IRQCFG);
++ udelay(500);
++ ca->slot_state = MODULE_XTRACTED;
++ }
++ udelay(100);
++}
+
+ int mantis_pcmcia_init(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
++ u32 gpif_stat, card_stat;
++
++ gpif_stat = mmread(MANTIS_GPIF_STATUS);
++ card_stat = mmread(MANTIS_GPIF_IRQCFG);
++
++ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num);
++ mmwrite(card_stat | MANTIS_MASK_PLUGOUT, MANTIS_GPIF_IRQCFG);
++ ca->slot_state = MODULE_INSERTED;
++ } else {
++ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
++ mmwrite(card_stat | MANTIS_MASK_PLUGIN, MANTIS_GPIF_IRQCFG);
++ ca->slot_state = MODULE_XTRACTED;
++ }
++
+ return 0;
+ }
+
+@@ -31,4 +95,6 @@ void mantis_pcmcia_exit(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
++ mmwrite(mmread(MANTIS_GPIF_STATUS) & (~MANTIS_CARD_PLUGOUT | ~MANTIS_CARD_PLUGIN), MANTIS_GPIF_STATUS);
++ mmwrite(mmread(MANTIS_INT_MASK) & ~MANTIS_INT_IRQ0, MANTIS_INT_MASK);
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0039-V4L-DVB-13737-Mantis-Register-the-CA-device-dummy-fu.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0039-V4L-DVB-13737-Mantis-Register-the-CA-device-dummy-fu.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,206 @@
+From 2bce8cd841e4d14bd67ece014de12f5c0ccea046 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:06:38 -0300
+Subject: [PATCH 039/120] V4L/DVB (13737): [Mantis] Register the CA device, dummy functions for now
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 50d82602760c99d2c954c33360990c00146532cd)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 1 +
+ drivers/media/dvb/mantis/mantis_ca.c | 127 ++++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_evm.c | 4 +
+ drivers/media/dvb/mantis/mantis_link.h | 8 ++
+ 4 files changed, 140 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_ca.c
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index 38d0e6d..c4da0d8 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -4,6 +4,7 @@ mantis-objs = mantis_core.o \
+ mantis_i2c.o \
+ mantis_dvb.o \
+ mantis_evm.o \
++ mantis_ca.o \
+ mantis_pcmcia.o \
+ mantis_vp1033.o \
+ mantis_vp1034.o \
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+new file mode 100644
+index 0000000..6e440d3
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -0,0 +1,127 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_link.h"
++#include "mantis_hif.h"
++
++
++static int mantis_ca_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long parg)
++{
++ return 0;
++}
++
++static int mantis_ca_open(struct inode *inode, struct file *file)
++{
++ return 0;
++}
++
++static int mantis_ca_release(struct inode *inode, struct file *file)
++{
++ return 0;
++}
++
++static ssize_t mantis_ca_read(struct file *file, char __user *buffer, size_t count, loff_t *ofset)
++{
++ struct dvb_device *dvbdev = file->private_data;
++ struct mantis_ca *ca = dvbdev->priv;
++
++ int status;
++
++ return 0;
++error:
++ return status;
++}
++
++static ssize_t mantis_ca_write(struct file *file, const char __user *buffer, size_t count, loff_t *offset)
++{
++ struct dvb_device *dvbdev = file->private_data;
++ struct mantis_ca *ca = dvbdev->priv;
++
++ int status;
++
++ return 0;
++error:
++ return status;
++}
++
++static struct file_operations mantis_fops = {
++ .owner = THIS_MODULE,
++ .ioctl = mantis_ca_ioctl,
++ .open = mantis_ca_open,
++ .release = mantis_ca_release,
++ .read = mantis_ca_read,
++ .write = mantis_ca_write,
++};
++
++static struct dvb_device mantis_ca = {
++ .priv = NULL,
++ .users = 1,
++ .readers = 1,
++ .writers = 1,
++ .fops = &mantis_fops,
++};
++
++struct dvb_device *mantis_ca_init(struct mantis_pci *mantis)
++{
++ int ret;
++
++ struct dvb_device *dvbdev;
++ struct dvb_adapter *dvb_adapter = &mantis->dvb_adapter;
++ struct mantis_ca *ca;
++
++ if (!(ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL))) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Out of memory!, exiting ..");
++ return NULL;
++ }
++
++ ca->ca_priv = mantis;
++ mantis->mantis_ca = ca;
++ mantis_evmgr_init(ca);
++
++ dprintk(verbose, MANTIS_ERROR, 0, "CA: Registering Mantis Adapter(%d) Slot(0)\n", mantis->num);
++ if (dvb_register_device(dvb_adapter, &dvbdev, &mantis_ca, ca, DVB_DEVICE_CA) == 0) {
++ ca->ca_dev = dvbdev;
++ return ca->ca_dev;
++ }
++ return 0;
++
++error:
++ if (ca != NULL) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Error ..");
++ if (ca->ca_dev != NULL)
++ dvb_unregister_device(ca->ca_dev);
++
++ kfree(ca);
++ }
++ return NULL;
++}
++
++void mantis_ca_exit(struct mantis_pci *mantis)
++{
++ struct mantis_ca *ca = mantis->mantis_ca;
++
++ mantis_evmgr_exit(ca);
++ dprintk(verbose, MANTIS_ERROR, 0, "CA: Unregister Mantis Adapter(%d) Slot(0)\n", mantis->num);
++ if (ca->ca_dev)
++ dvb_unregister_device(ca->ca_dev);
++
++ kfree(ca);
++}
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 9f1740e..c4a1c89 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -90,6 +90,8 @@ int mantis_evmgr_init(struct mantis_ca *ca)
+ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
+ tasklet_init(&ca->hif_evm_tasklet, mantis_hifevm_tasklet, (unsigned long) ca);
+
++ mantis_pcmcia_init(ca);
++
+ return 0;
+ }
+
+@@ -99,4 +101,6 @@ void mantis_evmgr_exit(struct mantis_ca *ca)
+
+ dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
+ tasklet_kill(&ca->hif_evm_tasklet);
++
++ mantis_pcmcia_exit(ca);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index c6b3222..a45dd71 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -56,4 +56,12 @@ struct mantis_ca {
+ void *ca_priv;
+ };
+
++/* CA */
++extern void mantis_event_cam_plugin(struct mantis_ca *ca);
++extern void mantis_event_cam_unplug(struct mantis_ca *ca);
++extern int mantis_pcmcia_init(struct mantis_ca *ca);
++extern void mantis_pcmcia_exit(struct mantis_ca *ca);
++extern int mantis_evmgr_init(struct mantis_ca *ca);
++extern void mantis_evmgr_exit(struct mantis_ca *ca);
++
+ #endif // __MANTIS_LINK_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0040-V4L-DVB-13738-Mantis-Enable-IRQ0-events.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0040-V4L-DVB-13738-Mantis-Enable-IRQ0-events.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,216 @@
+From 3333df30c7b63f37c47d31829ace399caaf9cedd Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:07:41 -0300
+Subject: [PATCH 040/120] V4L/DVB (13738): [Mantis] Enable IRQ0 events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit d9dd5f7168d6a61491996fc02e4deb9d96308178)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 4 ++--
+ drivers/media/dvb/mantis/mantis_dvb.c | 2 ++
+ drivers/media/dvb/mantis/mantis_evm.c | 26 +++++++++++++-------------
+ drivers/media/dvb/mantis/mantis_pci.c | 10 ++++------
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 9 +++++----
+ 5 files changed, 26 insertions(+), 25 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 6e440d3..e6de3c9 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -93,12 +93,12 @@ struct dvb_device *mantis_ca_init(struct mantis_pci *mantis)
+ }
+
+ ca->ca_priv = mantis;
+- mantis->mantis_ca = ca;
+- mantis_evmgr_init(ca);
+
+ dprintk(verbose, MANTIS_ERROR, 0, "CA: Registering Mantis Adapter(%d) Slot(0)\n", mantis->num);
+ if (dvb_register_device(dvb_adapter, &dvbdev, &mantis_ca, ca, DVB_DEVICE_CA) == 0) {
+ ca->ca_dev = dvbdev;
++ mantis->mantis_ca = ca;
++ mantis_evmgr_init(ca);
+ return ca->ca_dev;
+ }
+ return 0;
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 9634b97..3325b59 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -190,6 +190,8 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ dvb_net_init(&mantis->dvb_adapter, &mantis->dvbnet, &mantis->demux.dmx);
+ tasklet_init(&mantis->tasklet, mantis_dma_xfer, (unsigned long) mantis);
+ mantis_frontend_init(mantis);
++ mantis_ca_init(mantis);
++
+ return 0;
+
+ /* Error conditions .. */
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index c4a1c89..d81068d 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -33,14 +33,14 @@ void mantis_hifevm_tasklet(unsigned long data)
+
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+ // Plugin call here
+ gpif_stat = 0; // crude !
+ }
+ } else {
+ if (gpif_stat & MANTIS_CARD_PLUGOUT) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+ // Unplug call here
+ gpif_stat = 0; // crude !
+@@ -48,34 +48,34 @@ void mantis_hifevm_tasklet(unsigned long data)
+ }
+
+ if (gpif_stat & MANTIS_GPIF_EXTIRQ)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_WSTO)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
+
+ if (gpif_stat & MANTIS_GPIF_OTHERR)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_OVFLW)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow", mantis->num);
+
+ if (gpif_stat & MANTIS_GPIF_BRRDY) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
+ if (ca->hif_job_queue & MANTIS_HIF_MEMRD)
+ wake_up(&ca->hif_brrdyw_wq);
+ }
+ if (gpif_stat & MANTIS_GPIF_WRACK)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
+
+ if (gpif_stat & MANTIS_GPIF_INTSTAT)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): GPIF IRQ", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): GPIF IRQ", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_EMPTY)
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Empty", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Empty", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_OPDONE) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
+ if (ca->hif_job_queue) {
+ wake_up(&ca->hif_opdone_wq);
+ ca->hif_event = MANTIS_SBUF_OPDONE;
+@@ -87,7 +87,7 @@ int mantis_evmgr_init(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
++ dprintk(verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
+ tasklet_init(&ca->hif_evm_tasklet, mantis_hifevm_tasklet, (unsigned long) ca);
+
+ mantis_pcmcia_init(ca);
+@@ -99,7 +99,7 @@ void mantis_evmgr_exit(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
+ tasklet_kill(&ca->hif_evm_tasklet);
+
+ mantis_pcmcia_exit(ca);
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 402f866..814c6ac 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -54,12 +54,15 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ {
+ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
+ struct mantis_pci *mantis;
++ struct mantis_ca *ca;
+
+ mantis = (struct mantis_pci *) dev_id;
+ if (unlikely(mantis == NULL)) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis == NULL");
+ return IRQ_NONE;
+ }
++ ca = mantis->mantis_ca;
++
+ stat = mmread(MANTIS_INT_STAT);
+ mask = mmread(MANTIS_INT_MASK);
+ mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
+@@ -72,14 +75,9 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ if (stat & MANTIS_INT_RISCEN) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
+ }
+- if (stat & MANTIS_INT_I2CRACK) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* I2C R-ACK *");
+- }
+- if (stat & MANTIS_INT_PCMCIA7) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* PCMCIA-07 *");
+- }
+ if (stat & MANTIS_INT_IRQ0) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
++ tasklet_schedule(&ca->hif_evm_tasklet);
+ }
+ if (stat & MANTIS_INT_IRQ1) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index 960123f..47cc720 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -32,7 +32,7 @@ void mantis_event_cam_plugin(struct mantis_ca *ca)
+ u32 gpif_irqcfg;
+
+ if (ca->slot_state == MODULE_XTRACTED) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event: CAM Plugged IN: Adapter(%d) Slot(0)", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event: CAM Plugged IN: Adapter(%d) Slot(0)", mantis->num);
+ udelay(50);
+ mmwrite(0xda000000, MANTIS_CARD_RESET);
+ gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+@@ -56,7 +56,7 @@ void mantis_event_cam_unplug(struct mantis_ca *ca)
+ u32 gpif_irqcfg;
+
+ if (ca->slot_state == MODULE_INSERTED) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Event: CAM Unplugged: Adapter(%d) Slot(0)", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Event: CAM Unplugged: Adapter(%d) Slot(0)", mantis->num);
+ udelay(50);
+ mmwrite(0x00da0000, MANTIS_CARD_RESET);
+ gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+@@ -75,15 +75,16 @@ int mantis_pcmcia_init(struct mantis_ca *ca)
+
+ u32 gpif_stat, card_stat;
+
++ mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_IRQ0, MANTIS_INT_MASK);
+ gpif_stat = mmread(MANTIS_GPIF_STATUS);
+ card_stat = mmread(MANTIS_GPIF_IRQCFG);
+
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGOUT, MANTIS_GPIF_IRQCFG);
+ ca->slot_state = MODULE_INSERTED;
+ } else {
+- dprintk(mantis->verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
++ dprintk(verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGIN, MANTIS_GPIF_IRQCFG);
+ ca->slot_state = MODULE_XTRACTED;
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0041-V4L-DVB-13739-Mantis-Event-Manager-Handle-Masked-eve.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0041-V4L-DVB-13739-Mantis-Event-Manager-Handle-Masked-eve.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,51 @@
+From 8d27616d891a20191696372dc90d55405926bfdf Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:08:25 -0300
+Subject: [PATCH 041/120] V4L/DVB (13739): [Mantis] Event Manager: Handle Masked events only
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 3062b1571a1d3520c4d3160ebbfca8002b1d6963)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dvb.c | 1 +
+ drivers/media/dvb/mantis/mantis_evm.c | 5 ++++-
+ 2 files changed, 5 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 3325b59..ade4449 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -313,6 +313,7 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+
+ int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+ {
++ mantis_ca_exit(mantis);
+ tasklet_kill(&mantis->tasklet);
+ dvb_net_release(&mantis->dvbnet);
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index d81068d..c35ddd8 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -27,9 +27,12 @@ void mantis_hifevm_tasklet(unsigned long data)
+ struct mantis_ca *ca = (struct mantis_ca *) data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- u32 gpif_stat;
++ u32 gpif_stat, gpif_mask;
+
+ gpif_stat = mmread(MANTIS_GPIF_STATUS);
++ gpif_mask = mmread(MANTIS_GPIF_IRQCFG);
++ if (!((gpif_stat & 0xff) & (gpif_mask & 0xff)))
++ return;
+
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0042-V4L-DVB-13740-Mantis-Schedule-the-work-instead-of-ha.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0042-V4L-DVB-13740-Mantis-Schedule-the-work-instead-of-ha.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,126 @@
+From 287e7877d3f49afcee6587b36e0c854ef50319b1 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:09:04 -0300
+Subject: [PATCH 042/120] V4L/DVB (13740): [Mantis] Schedule the work instead of handling the task directly
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 12855cac87218d0c92ffdebb7270cec040cf5a6a)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 4 ++++
+ drivers/media/dvb/mantis/mantis_evm.c | 17 +++++++----------
+ drivers/media/dvb/mantis/mantis_link.h | 4 +++-
+ drivers/media/dvb/mantis/mantis_pci.c | 2 +-
+ 4 files changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index f9891eb..7f1cfad 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -151,4 +151,8 @@ extern int mantis_dvb_exit(struct mantis_pci *mantis);
+ extern void mantis_dma_xfer(unsigned long data);
+ extern void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value);
+
++extern struct dvb_device *mantis_ca_init(struct mantis_pci *mantis);
++extern void mantis_ca_exit(struct mantis_pci *mantis);
++
++
+ #endif //__MANTIS_COMMON_H
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index c35ddd8..7451483 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -22,9 +22,9 @@
+ #include "mantis_link.h"
+ #include "mantis_hif.h"
+
+-void mantis_hifevm_tasklet(unsigned long data)
++static void mantis_hifevm_work(struct work_struct *work)
+ {
+- struct mantis_ca *ca = (struct mantis_ca *) data;
++ struct mantis_ca *ca = container_of(work, struct mantis_ca, hif_evm_work);
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ u32 gpif_stat, gpif_mask;
+@@ -38,15 +38,13 @@ void mantis_hifevm_tasklet(unsigned long data)
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+- // Plugin call here
+- gpif_stat = 0; // crude !
++ mantis_event_cam_plugin(ca);
+ }
+ } else {
+ if (gpif_stat & MANTIS_CARD_PLUGOUT) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+- // Unplug call here
+- gpif_stat = 0; // crude !
++ mantis_event_cam_unplug(ca);
+ }
+ }
+
+@@ -91,9 +89,9 @@ int mantis_evmgr_init(struct mantis_ca *ca)
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
+- tasklet_init(&ca->hif_evm_tasklet, mantis_hifevm_tasklet, (unsigned long) ca);
+-
++ INIT_WORK(&ca->hif_evm_work, mantis_hifevm_work);
+ mantis_pcmcia_init(ca);
++ schedule_work(&ca->hif_evm_work);
+
+ return 0;
+ }
+@@ -103,7 +101,6 @@ void mantis_evmgr_exit(struct mantis_ca *ca)
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
+- tasklet_kill(&ca->hif_evm_tasklet);
+-
++ flush_scheduled_work();
+ mantis_pcmcia_exit(ca);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index a45dd71..33b39b7 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -21,6 +21,8 @@
+ #ifndef __MANTIS_LINK_H
+ #define __MANTIS_LINK_H
+
++#include <linux/workqueue.h>
++
+ enum mantis_sbuf_status {
+ MANTIS_SBUF_DATA_AVAIL = 1,
+ MANTIS_SBUF_DATA_EMPTY = 2,
+@@ -40,7 +42,7 @@ enum mantis_slot_state {
+ struct mantis_ca {
+ struct mantis_slot slot;
+
+- struct tasklet_struct hif_evm_tasklet;
++ struct work_struct hif_evm_work;
+
+ u32 hif_event;
+ wait_queue_head_t hif_opdone_wq;
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 814c6ac..6eecd54 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -77,7 +77,7 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ }
+ if (stat & MANTIS_INT_IRQ0) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
+- tasklet_schedule(&ca->hif_evm_tasklet);
++ schedule_work(&ca->hif_evm_work);
+ }
+ if (stat & MANTIS_INT_IRQ1) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0043-V4L-DVB-13741-Mantis-Implement-HIF-Mem-Read-Write-op.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0043-V4L-DVB-13741-Mantis-Implement-HIF-Mem-Read-Write-op.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,283 @@
+From 158ceffb222e98f0547309d0722fd69e2a5ed4a8 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:09:47 -0300
+Subject: [PATCH 043/120] V4L/DVB (13741): [Mantis] Implement HIF Mem Read/Write operations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit d8b14f8a76d71c84622a211f57baf15f61cc9703)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 1 +
+ drivers/media/dvb/mantis/mantis_dma.c | 4 +-
+ drivers/media/dvb/mantis/mantis_evm.c | 3 +-
+ drivers/media/dvb/mantis/mantis_hif.c | 139 ++++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_link.h | 10 ++-
+ drivers/media/dvb/mantis/mantis_reg.h | 8 +-
+ 6 files changed, 157 insertions(+), 8 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_hif.c
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index c4da0d8..d002ef9 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -4,6 +4,7 @@ mantis-objs = mantis_core.o \
+ mantis_i2c.o \
+ mantis_dvb.o \
+ mantis_evm.o \
++ mantis_hif.o \
+ mantis_ca.o \
+ mantis_pcmcia.o \
+ mantis_vp1033.o \
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index f685992..250f49a 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -190,7 +190,7 @@ void mantis_dma_start(struct mantis_pci *mantis)
+
+ mantis_risc_program(mantis);
+ mmwrite(mantis->risc_dma, MANTIS_RISC_START);
+- mmwrite(mmread(MANTIS_GPIF_ADDR) | MANTIS_GPIF_RDWRN, MANTIS_GPIF_ADDR);
++ mmwrite(mmread(MANTIS_GPIF_HIFADDR) | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_HIFADDR);
+
+ mmwrite(0, MANTIS_DMA_CTL);
+ mantis->last_block = mantis->finished_block = 0;
+@@ -210,7 +210,7 @@ void mantis_dma_stop(struct mantis_pci *mantis)
+ mask = mmread(MANTIS_INT_MASK);
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Stop DMA engine");
+
+- mmwrite((mmread(MANTIS_GPIF_ADDR) & (~(MANTIS_GPIF_RDWRN))), MANTIS_GPIF_ADDR);
++ mmwrite((mmread(MANTIS_GPIF_HIFADDR) & (~(MANTIS_GPIF_HIFRDWRN))), MANTIS_GPIF_HIFADDR);
+
+ mmwrite((mmread(MANTIS_DMA_CTL) & ~(MANTIS_FIFO_EN |
+ MANTIS_DCAP_EN |
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 7451483..dbcdca3 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -92,7 +92,7 @@ int mantis_evmgr_init(struct mantis_ca *ca)
+ INIT_WORK(&ca->hif_evm_work, mantis_hifevm_work);
+ mantis_pcmcia_init(ca);
+ schedule_work(&ca->hif_evm_work);
+-
++ mantis_hif_init(ca);
+ return 0;
+ }
+
+@@ -102,5 +102,6 @@ void mantis_evmgr_exit(struct mantis_ca *ca)
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
+ flush_scheduled_work();
++ mantis_hif_exit(ca);
+ mantis_pcmcia_exit(ca);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+new file mode 100644
+index 0000000..1472008
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -0,0 +1,139 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_hif.h"
++#include "mantis_link.h" /* temporary due to physical layer stuff */
++
++static int mantis_hif_data_available(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ int rc = 0;
++
++ if (wait_event_interruptible_timeout(ca->hif_data_wq,
++ ca->sbuf_status & MANTIS_SBUF_DATA_AVAIL,
++ msecs_to_jiffies(500)) == -ERESTARTSYS) {
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Read wait event timeout !", mantis->num);
++ rc = -EREMOTEIO;
++ }
++ ca->sbuf_status &= ~MANTIS_SBUF_DATA_AVAIL;
++ udelay(2);
++ return rc;
++}
++
++static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ int rc = 0;
++
++ if (wait_event_interruptible_timeout(ca->hif_opdone_wq,
++ ca->hif_event & MANTIS_SBUF_OPDONE,
++ msecs_to_jiffies(500)) == -ERESTARTSYS) {
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num);
++ rc = -EREMOTEIO;
++ }
++ ca->hif_event &= ~MANTIS_SBUF_OPDONE;
++ udelay(5);
++ return rc;
++}
++
++int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 hif_addr = 0, data, count = 4;
++
++ hif_addr |= MANTIS_GPIF_HIFRDWRN;
++ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
++ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= addr;
++
++ mmwrite(hif_addr, MANTIS_GPIF_BRADDR);
++ mmwrite(count, MANTIS_GPIF_BRBYTES);
++
++ udelay(20);
++
++ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ if (mantis_hif_data_available(ca) != 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer burst read failed", mantis->num);
++ return -EREMOTEIO;
++ }
++ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
++ return -EREMOTEIO;
++ }
++ data = mmread(MANTIS_GPIF_HIFDIN);
++
++ return (data >> 24) & 0xff;
++}
++
++int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
++{
++ struct mantis_slot *slot = ca->slot;
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 hif_addr = 0;
++
++ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
++ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
++ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= addr;
++
++ mmwrite(slot->slave_cfg, MANTIS_GPIF_CFGSLA); /* Slot0 alone for now */
++
++ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ mmwrite(data, MANTIS_GPIF_HIFDOUT);
++ ca->hif_job_queue = MANTIS_HIF_MEMWR;
++
++ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
++ ca->hif_job_queue &= ~MANTIS_HIF_MEMWR;
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ return -EREMOTEIO;
++ }
++ ca->hif_job_queue &= ~MANTIS_HIF_MEMWR;
++ return 0;
++}
++
++int mantis_hif_init(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 irqcfg;
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
++ init_waitqueue_head(&ca->hif_data_wq);
++ init_waitqueue_head(&ca->hif_opdone_wq);
++
++ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
++ irqcfg |= MANTIS_MASK_BRRDY;
++ mmwrite(irqcfg, MANTIS_GPIF_IRQCFG);
++
++ return 0;
++}
++
++void mantis_hif_exit(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 irqcfg;
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Exiting Mantis Host Interface", mantis->num);
++ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
++ irqcfg &= ~MANTIS_MASK_BRRDY;
++ mmwrite(irqcfg, MANTIS_GPIF_IRQCFG);
++}
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 33b39b7..8862502 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -31,6 +31,8 @@ enum mantis_sbuf_status {
+
+ struct mantis_slot {
+ u32 timeout;
++ u32 slave_cfg;
++ u32 bar;
+ };
+
+ /* Physical layer */
+@@ -40,7 +42,7 @@ enum mantis_slot_state {
+ };
+
+ struct mantis_ca {
+- struct mantis_slot slot;
++ struct mantis_slot slot[4];
+
+ struct work_struct hif_evm_work;
+
+@@ -66,4 +68,10 @@ extern void mantis_pcmcia_exit(struct mantis_ca *ca);
+ extern int mantis_evmgr_init(struct mantis_ca *ca);
+ extern void mantis_evmgr_exit(struct mantis_ca *ca);
+
++/* HIF */
++extern int mantis_hif_init(struct mantis_ca *ca);
++extern void mantis_hif_exit(struct mantis_ca *ca);
++extern int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr);
++extern int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data);
++
+ #endif // __MANTIS_LINK_H
+diff --git a/drivers/media/dvb/mantis/mantis_reg.h b/drivers/media/dvb/mantis/mantis_reg.h
+index d9862b7..6f5cd49 100644
+--- a/drivers/media/dvb/mantis/mantis_reg.h
++++ b/drivers/media/dvb/mantis/mantis_reg.h
+@@ -147,16 +147,16 @@
+ #define MANTIS_CARD_RESET 0xac
+
+ #define MANTIS_GPIF_ADDR 0xb0
+-#define MANTIS_GPIF_RDWRN (0x01 << 31)
++#define MANTIS_GPIF_HIFRDWRN (0x01 << 31)
+ #define MANTIS_GPIF_PCMCIAREG (0x01 << 27)
+ #define MANTIS_GPIF_PCMCIAIOM (0x01 << 26)
+-#define MANTIS_GPIF_HIF_ADDR (0xfffffff << 0)
++#define MANTIS_GPIF_HIFADDR (0xfffffff << 0)
+
+ #define MANTIS_GPIF_DOUT 0xb4
+-#define MANTIS_GPIF_HIF_DOUT (0xfffffff << 0)
++#define MANTIS_GPIF_HIFDOUT (0xfffffff << 0)
+
+ #define MANTIS_GPIF_DIN 0xb8
+-#define MANTIS_GPIF_HIF_DIN (0xfffffff << 0)
++#define MANTIS_GPIF_HIFDIN (0xfffffff << 0)
+
+ #define MANTIS_GPIF_SPARE 0xbc
+ #define MANTIS_GPIF_LOGICRD (0xffff << 16)
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0044-V4L-DVB-13742-Mantis-Implement-PCMCIA-I-O-Rd-Wr-oper.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0044-V4L-DVB-13742-Mantis-Implement-PCMCIA-I-O-Rd-Wr-oper.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,98 @@
+From 478797be24c766baff385b4fa05a278fc9b29624 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:10:25 -0300
+Subject: [PATCH 044/120] V4L/DVB (13742): [Mantis] Implement PCMCIA I/O Rd/Wr operations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit c9a750c909cbde15ecd0f8545f48e051bfee6271)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 54 ++++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_link.h | 2 +
+ 2 files changed, 56 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 1472008..42aedf7 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -111,6 +111,60 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ return 0;
+ }
+
++int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr, u32 count, u32 *data)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 hif_addr = 0;
++
++ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
++ hif_addr |= MANTIS_GPIF_HIFRDWRN;
++ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= addr;
++
++ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ ca->hif_job_queue = MANTIS_HIF_IOMRD;
++
++ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
++ ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ return -EREMOTEIO;
++ }
++ udelay(50);
++ ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
++ *data = mmread(MANTIS_GPIF_HIFDIN);
++ hif_addr |= MANTIS_GPIF_PCMCIAREG;
++ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++
++ return 0;
++}
++
++int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u32 data)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 hif_addr = 0;
++
++ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
++ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
++ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= addr;
++
++ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ mmwrite(data, MANTIS_GPIF_HIFDOUT);
++
++ ca->hif_job_queue = MANTIS_HIF_IOMWR;
++ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
++ ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ return -EREMOTEIO;
++ }
++ udelay(50);
++ ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
++ hif_addr |= MANTIS_GPIF_PCMCIAREG;
++ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++
++ return 0;
++}
++
+ int mantis_hif_init(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 8862502..478900e 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -73,5 +73,7 @@ extern int mantis_hif_init(struct mantis_ca *ca);
+ extern void mantis_hif_exit(struct mantis_ca *ca);
+ extern int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr);
+ extern int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data);
++extern int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr, u32 count, u32 *data);
++extern int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u32 data);
+
+ #endif // __MANTIS_LINK_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0045-V4L-DVB-13743-Mantis-CA-Use-DVB_CA-Tuple-parser.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0045-V4L-DVB-13743-Mantis-CA-Use-DVB_CA-Tuple-parser.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,284 @@
+From 441648289a943154181cdb4324d9220ef78e8dde Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:11:14 -0300
+Subject: [PATCH 045/120] V4L/DVB (13743): [Mantis CA] Use DVB_CA Tuple parser
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 6053240f5cc914d40ac9c7afe15008bf3e46359c)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 129 ++++++++++++++++--------------
+ drivers/media/dvb/mantis/mantis_common.h | 2 +-
+ drivers/media/dvb/mantis/mantis_hif.c | 10 +-
+ drivers/media/dvb/mantis/mantis_link.h | 9 ++-
+ 4 files changed, 80 insertions(+), 70 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index e6de3c9..4be61ca 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -22,96 +22,104 @@
+ #include "mantis_link.h"
+ #include "mantis_hif.h"
+
+-
+-static int mantis_ca_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long parg)
++static int mantis_ca_read_attr_mem(struct dvb_ca_en50221 *en50221, int slot, int addr)
+ {
+- return 0;
++ struct mantis_ca *ca = en50221->data;
++
++ if (slot != 0)
++ return -EINVAL;
++
++ return mantis_hif_read_mem(ca, addr);
+ }
+
+-static int mantis_ca_open(struct inode *inode, struct file *file)
++static int mantis_ca_write_attr_mem(struct dvb_ca_en50221 *en50221, int slot, int addr, u8 data)
+ {
+- return 0;
++ struct mantis_ca *ca = en50221->data;
++
++ if (slot != 0)
++ return -EINVAL;
++
++ return mantis_hif_write_mem(ca, addr, data);
+ }
+
+-static int mantis_ca_release(struct inode *inode, struct file *file)
++static int mantis_ca_read_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8 addr)
+ {
+- return 0;
++ struct mantis_ca *ca = en50221->data;
++
++ if (slot != 0)
++ return -EINVAL;
++
++ return mantis_hif_read_iom(ca, addr);
+ }
+
+-static ssize_t mantis_ca_read(struct file *file, char __user *buffer, size_t count, loff_t *ofset)
++static int mantis_ca_write_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8 addr, u8 data)
+ {
+- struct dvb_device *dvbdev = file->private_data;
+- struct mantis_ca *ca = dvbdev->priv;
++ struct mantis_ca *ca = en50221->data;
+
+- int status;
++ if (slot != 0)
++ return -EINVAL;
+
+- return 0;
+-error:
+- return status;
++ return mantis_hif_write_iom(ca, addr, data);
+ }
+
+-static ssize_t mantis_ca_write(struct file *file, const char __user *buffer, size_t count, loff_t *offset)
++static int mantis_ca_slot_reset(struct dvb_ca_en50221 *en50221, int slot)
+ {
+- struct dvb_device *dvbdev = file->private_data;
+- struct mantis_ca *ca = dvbdev->priv;
++ return 0;
++}
+
+- int status;
++static int mantis_ca_slot_shutdown(struct dvb_ca_en50221 *en50221, int slot)
++{
++ return 0;
++}
+
++static int mantis_ts_control(struct dvb_ca_en50221 *en50221, int slot)
++{
+ return 0;
+-error:
+- return status;
+ }
+
+-static struct file_operations mantis_fops = {
+- .owner = THIS_MODULE,
+- .ioctl = mantis_ca_ioctl,
+- .open = mantis_ca_open,
+- .release = mantis_ca_release,
+- .read = mantis_ca_read,
+- .write = mantis_ca_write,
+-};
+-
+-static struct dvb_device mantis_ca = {
+- .priv = NULL,
+- .users = 1,
+- .readers = 1,
+- .writers = 1,
+- .fops = &mantis_fops,
+-};
+-
+-struct dvb_device *mantis_ca_init(struct mantis_pci *mantis)
++static int mantis_slot_status(struct dvb_ca_en50221 *en50221, int slot, int open)
+ {
+- int ret;
++ return 0;
++}
+
+- struct dvb_device *dvbdev;
++int mantis_ca_init(struct mantis_pci *mantis)
++{
+ struct dvb_adapter *dvb_adapter = &mantis->dvb_adapter;
+ struct mantis_ca *ca;
++ int ca_flags = 0, result;
+
+ if (!(ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL))) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Out of memory!, exiting ..");
+- return NULL;
++ result = -ENOMEM;
++ goto err;
+ }
+
+ ca->ca_priv = mantis;
+-
+- dprintk(verbose, MANTIS_ERROR, 0, "CA: Registering Mantis Adapter(%d) Slot(0)\n", mantis->num);
+- if (dvb_register_device(dvb_adapter, &dvbdev, &mantis_ca, ca, DVB_DEVICE_CA) == 0) {
+- ca->ca_dev = dvbdev;
+- mantis->mantis_ca = ca;
+- mantis_evmgr_init(ca);
+- return ca->ca_dev;
++ mantis->mantis_ca = ca;
++
++ /* register CA interface */
++ ca->en50221.owner = THIS_MODULE;
++ ca->en50221.read_attribute_mem = mantis_ca_read_attr_mem;
++ ca->en50221.write_attribute_mem = mantis_ca_write_attr_mem;
++ ca->en50221.read_cam_control = mantis_ca_read_cam_ctl;
++ ca->en50221.write_cam_control = mantis_ca_write_cam_ctl;
++ ca->en50221.slot_reset = mantis_ca_slot_reset;
++ ca->en50221.slot_shutdown = mantis_ca_slot_shutdown;
++ ca->en50221.slot_ts_enable = mantis_ts_control;
++ ca->en50221.poll_slot_status = mantis_slot_status;
++ ca->en50221.data = ca;
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Registering EN50221 device");
++ if ((result = dvb_ca_en50221_init(dvb_adapter, &ca->en50221, ca_flags, 1)) != 0) {
++ dprintk(verbose, MANTIS_ERROR, 1, "EN50221: Initialization failed");
++ goto err;
+ }
++ dprintk(verbose, MANTIS_ERROR, 1, "Registered EN50221 device");
++ mantis_evmgr_init(ca);
+ return 0;
+-
+-error:
+- if (ca != NULL) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Error ..");
+- if (ca->ca_dev != NULL)
+- dvb_unregister_device(ca->ca_dev);
+-
+- kfree(ca);
+- }
+- return NULL;
++err:
++ kfree(ca);
++ return result;
+ }
+
+ void mantis_ca_exit(struct mantis_pci *mantis)
+@@ -119,9 +127,8 @@ void mantis_ca_exit(struct mantis_pci *mantis)
+ struct mantis_ca *ca = mantis->mantis_ca;
+
+ mantis_evmgr_exit(ca);
+- dprintk(verbose, MANTIS_ERROR, 0, "CA: Unregister Mantis Adapter(%d) Slot(0)\n", mantis->num);
+- if (ca->ca_dev)
+- dvb_unregister_device(ca->ca_dev);
++ dprintk(verbose, MANTIS_ERROR, 1, "Unregistering EN50221 device");
++ dvb_ca_en50221_release(&ca->en50221);
+
+ kfree(ca);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 7f1cfad..0aa4001 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -151,7 +151,7 @@ extern int mantis_dvb_exit(struct mantis_pci *mantis);
+ extern void mantis_dma_xfer(unsigned long data);
+ extern void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value);
+
+-extern struct dvb_device *mantis_ca_init(struct mantis_pci *mantis);
++extern int mantis_ca_init(struct mantis_pci *mantis);
+ extern void mantis_ca_exit(struct mantis_pci *mantis);
+
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 42aedf7..6a1ea96 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -111,10 +111,10 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ return 0;
+ }
+
+-int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr, u32 count, u32 *data)
++int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+- u32 hif_addr = 0;
++ u32 data, hif_addr = 0;
+
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr |= MANTIS_GPIF_HIFRDWRN;
+@@ -131,14 +131,14 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr, u32 count, u32 *data)
+ }
+ udelay(50);
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
+- *data = mmread(MANTIS_GPIF_HIFDIN);
++ data = mmread(MANTIS_GPIF_HIFDIN);
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+ mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
+
+- return 0;
++ return data;
+ }
+
+-int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u32 data)
++int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0;
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 478900e..23ff2d6 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -22,6 +22,7 @@
+ #define __MANTIS_LINK_H
+
+ #include <linux/workqueue.h>
++#include "dvb_ca_en50221.h"
+
+ enum mantis_sbuf_status {
+ MANTIS_SBUF_DATA_AVAIL = 1,
+@@ -56,8 +57,10 @@ struct mantis_ca {
+
+ enum mantis_slot_state slot_state;
+
+- struct dvb_device *ca_dev;
++// struct dvb_device *ca_dev;
+ void *ca_priv;
++
++ struct dvb_ca_en50221 en50221;
+ };
+
+ /* CA */
+@@ -73,7 +76,7 @@ extern int mantis_hif_init(struct mantis_ca *ca);
+ extern void mantis_hif_exit(struct mantis_ca *ca);
+ extern int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr);
+ extern int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data);
+-extern int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr, u32 count, u32 *data);
+-extern int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u32 data);
++extern int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr);
++extern int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data);
+
+ #endif // __MANTIS_LINK_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0046-V4L-DVB-13744-Mantis-CA-Use-Module-status-to-signal-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0046-V4L-DVB-13744-Mantis-CA-Use-Module-status-to-signal-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From d91b92d5da6dcd0c23d9f2721a8d4e93768104f8 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:11:41 -0300
+Subject: [PATCH 046/120] V4L/DVB (13744): [Mantis CA] Use Module status to signal Slot events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 4e9fbeeedc22d287b5d05e32bbc647cd2dc8c663)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 4be61ca..cd6bed7 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -79,6 +79,11 @@ static int mantis_ts_control(struct dvb_ca_en50221 *en50221, int slot)
+
+ static int mantis_slot_status(struct dvb_ca_en50221 *en50221, int slot, int open)
+ {
++ struct mantis_ca *ca = en50221->data;
++
++ if (ca->slot_state == MODULE_INSERTED)
++ return DVB_CA_EN50221_POLL_CAM_PRESENT | DVB_CA_EN50221_POLL_CAM_READY;
++
+ return 0;
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0047-V4L-DVB-13745-Mantis-CA-Add-some-debug-statements.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0047-V4L-DVB-13745-Mantis-CA-Add-some-debug-statements.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,160 @@
+From b46a35d800073ece545324778801b37461676b2a Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:12:16 -0300
+Subject: [PATCH 047/120] V4L/DVB (13745): [Mantis CA] Add some debug statements
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 2133ffbf08e7fca0614ea73cb5c43cc6435b4414)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 34 +++++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_hif.c | 4 +++
+ 2 files changed, 38 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index cd6bed7..a8b8c88 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -25,6 +25,9 @@
+ static int mantis_ca_read_attr_mem(struct dvb_ca_en50221 *en50221, int slot, int addr)
+ {
+ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request Attribute Mem Read", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -35,6 +38,9 @@ static int mantis_ca_read_attr_mem(struct dvb_ca_en50221 *en50221, int slot, int
+ static int mantis_ca_write_attr_mem(struct dvb_ca_en50221 *en50221, int slot, int addr, u8 data)
+ {
+ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request Attribute Mem Write", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -45,6 +51,9 @@ static int mantis_ca_write_attr_mem(struct dvb_ca_en50221 *en50221, int slot, in
+ static int mantis_ca_read_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8 addr)
+ {
+ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request CAM control Read", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -55,6 +64,9 @@ static int mantis_ca_read_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8 a
+ static int mantis_ca_write_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8 addr, u8 data)
+ {
+ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request CAM control Write", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -64,22 +76,40 @@ static int mantis_ca_write_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8
+
+ static int mantis_ca_slot_reset(struct dvb_ca_en50221 *en50221, int slot)
+ {
++ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Slot RESET", slot);
++
+ return 0;
+ }
+
+ static int mantis_ca_slot_shutdown(struct dvb_ca_en50221 *en50221, int slot)
+ {
++ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Slot shutdown", slot);
++
+ return 0;
+ }
+
+ static int mantis_ts_control(struct dvb_ca_en50221 *en50221, int slot)
+ {
++ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): TS control", slot);
++
+ return 0;
+ }
+
+ static int mantis_slot_status(struct dvb_ca_en50221 *en50221, int slot, int open)
+ {
+ struct mantis_ca *ca = en50221->data;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Poll Slot status", slot);
+
+ if (ca->slot_state == MODULE_INSERTED)
+ return DVB_CA_EN50221_POLL_CAM_PRESENT | DVB_CA_EN50221_POLL_CAM_READY;
+@@ -93,6 +123,7 @@ int mantis_ca_init(struct mantis_pci *mantis)
+ struct mantis_ca *ca;
+ int ca_flags = 0, result;
+
++ dprintk(verbose, MANTIS_DEBUG, 1, "Initializing Mantis CA");
+ if (!(ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL))) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Out of memory!, exiting ..");
+ result = -ENOMEM;
+@@ -130,6 +161,9 @@ err:
+ void mantis_ca_exit(struct mantis_pci *mantis)
+ {
+ struct mantis_ca *ca = mantis->mantis_ca;
++ struct mantis_pci *mantis = ca->ca_priv;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis CA exit");
+
+ mantis_evmgr_exit(ca);
+ dprintk(verbose, MANTIS_ERROR, 1, "Unregistering EN50221 device");
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 6a1ea96..42e0360 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -61,6 +61,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0, data, count = 4;
+
++ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num);
+ hif_addr |= MANTIS_GPIF_HIFRDWRN;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+@@ -91,6 +92,7 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0;
+
++ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Write", mantis->num);
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+@@ -116,6 +118,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 data, hif_addr = 0;
+
++ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr |= MANTIS_GPIF_HIFRDWRN;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+@@ -143,6 +146,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0;
+
++ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Write", mantis->num);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0048-V4L-DVB-13746-Mantis-CA-Bug-Remove-duplicated-symbol.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0048-V4L-DVB-13746-Mantis-CA-Bug-Remove-duplicated-symbol.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,32 @@
+From c48439992c53ba8752b68fa1504c435d841c259b Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:12:51 -0300
+Subject: [PATCH 048/120] V4L/DVB (13746): [Mantis CA] Bug: Remove duplicated symbol
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit fbe1e43abc6ada6bcd3e9866b01e41f093f12c62)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index a8b8c88..f6d70cb 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -161,7 +161,6 @@ err:
+ void mantis_ca_exit(struct mantis_pci *mantis)
+ {
+ struct mantis_ca *ca = mantis->mantis_ca;
+- struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis CA exit");
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0049-V4L-DVB-13747-Mantis-Bug-Fix-Use-Register-Address-ra.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0049-V4L-DVB-13747-Mantis-Bug-Fix-Use-Register-Address-ra.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,118 @@
+From 8e9b8bbb3f9bd6573fc55306be2b87a369342ed1 Mon Sep 17 00:00:00 2001
+From: Sigmund Augdal <sigmund at snap.tv>
+Date: Fri, 4 Dec 2009 05:13:21 -0300
+Subject: [PATCH 049/120] V4L/DVB (13747): [Mantis] Bug Fix!: Use Register Address rather than register field
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Sigmund Augdal <sigmund at snap.tv>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit a0c59063a7fe92524ab8fa6e31997b177a8f3029)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dma.c | 4 ++--
+ drivers/media/dvb/mantis/mantis_hif.c | 20 ++++++++++----------
+ 2 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index 250f49a..d15a1eb 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -190,7 +190,7 @@ void mantis_dma_start(struct mantis_pci *mantis)
+
+ mantis_risc_program(mantis);
+ mmwrite(mantis->risc_dma, MANTIS_RISC_START);
+- mmwrite(mmread(MANTIS_GPIF_HIFADDR) | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_HIFADDR);
++ mmwrite(mmread(MANTIS_GPIF_ADDR) | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
+
+ mmwrite(0, MANTIS_DMA_CTL);
+ mantis->last_block = mantis->finished_block = 0;
+@@ -210,7 +210,7 @@ void mantis_dma_stop(struct mantis_pci *mantis)
+ mask = mmread(MANTIS_INT_MASK);
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Stop DMA engine");
+
+- mmwrite((mmread(MANTIS_GPIF_HIFADDR) & (~(MANTIS_GPIF_HIFRDWRN))), MANTIS_GPIF_HIFADDR);
++ mmwrite((mmread(MANTIS_GPIF_ADDR) & (~(MANTIS_GPIF_HIFRDWRN))), MANTIS_GPIF_ADDR);
+
+ mmwrite((mmread(MANTIS_DMA_CTL) & ~(MANTIS_FIFO_EN |
+ MANTIS_DCAP_EN |
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 42e0360..9e058be 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -72,7 +72,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+
+ udelay(20);
+
+- mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ if (mantis_hif_data_available(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer burst read failed", mantis->num);
+ return -EREMOTEIO;
+@@ -81,7 +81,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+- data = mmread(MANTIS_GPIF_HIFDIN);
++ data = mmread(MANTIS_GPIF_DIN);
+
+ return (data >> 24) & 0xff;
+ }
+@@ -100,8 +100,8 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+
+ mmwrite(slot->slave_cfg, MANTIS_GPIF_CFGSLA); /* Slot0 alone for now */
+
+- mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
+- mmwrite(data, MANTIS_GPIF_HIFDOUT);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ mmwrite(data, MANTIS_GPIF_DOUT);
+ ca->hif_job_queue = MANTIS_HIF_MEMWR;
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+@@ -124,7 +124,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ ca->hif_job_queue = MANTIS_HIF_IOMRD;
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+@@ -134,9 +134,9 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ }
+ udelay(50);
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
+- data = mmread(MANTIS_GPIF_HIFDIN);
++ data = mmread(MANTIS_GPIF_DIN);
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+- mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+
+ return data;
+ }
+@@ -152,8 +152,8 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
+- mmwrite(data, MANTIS_GPIF_HIFDOUT);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ mmwrite(data, MANTIS_GPIF_DOUT);
+
+ ca->hif_job_queue = MANTIS_HIF_IOMWR;
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+@@ -164,7 +164,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ udelay(50);
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+- mmwrite(hif_addr, MANTIS_GPIF_HIFADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+
+ return 0;
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0050-V4L-DVB-13748-Mantis-VP-2040-Add-support-for-VP-2040.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0050-V4L-DVB-13748-Mantis-VP-2040-Add-support-for-VP-2040.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,59 @@
+From 247814436649330068a2f8ef83f2641b347a9d84 Mon Sep 17 00:00:00 2001
+From: Magnus Horlin <magnus at alefors.se>
+Date: Fri, 4 Dec 2009 05:14:34 -0300
+Subject: [PATCH 050/120] V4L/DVB (13748): [Mantis/VP-2040] Add support for VP-2040 (TDA10023 frontend based)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Magnus Horlin <magnus at alefors.se>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit ea30d81a9634cb4c13bbef46877f0d7730c57552)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 1 +
+ drivers/media/dvb/mantis/mantis_dvb.c | 1 +
+ drivers/media/dvb/mantis/mantis_vp2040.h | 1 +
+ 3 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index a164bb1..b94d051 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -119,6 +119,7 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ case MANTIS_VP_2033_DVB_C: // VP-2033
+ mantis->hwconfig = &vp2033_mantis_config;
+ break;
++ case MANTIS_VP_2040_DVB_C: // VP-2040
+ case TERRATEC_CINERGY_C_PCI: // VP-2040 clone
+ mantis->hwconfig = &vp2040_mantis_config;
+ break;
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index ade4449..3940aed 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -273,6 +273,7 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+
+ }
+ break;
++ case MANTIS_VP_2040_DVB_C: // VP-2040
+ case TERRATEC_CINERGY_C_PCI:
+ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+ mantis->fe = tda10023_attach(&tda10023_cu1216_config, &mantis->adapter, read_pwm(mantis));
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.h b/drivers/media/dvb/mantis/mantis_vp2040.h
+index 825ccbb..69463cc 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.h
++++ b/drivers/media/dvb/mantis/mantis_vp2040.h
+@@ -25,6 +25,7 @@
+ #include "mantis_common.h"
+ #include "tda1002x.h"
+
++#define MANTIS_VP_2040_DVB_C 0x0043
+ #define TERRATEC_CINERGY_C_PCI 0x1178
+
+ extern struct tda1002x_config tda10023_cu1216_config;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0051-V4L-DVB-13749-Mantis-CA-CA_SLAVE-Do-not-change-Slave.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0051-V4L-DVB-13749-Mantis-CA-CA_SLAVE-Do-not-change-Slave.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,38 @@
+From e6afe15c76aabc6d84c5503c38b0f963fefb9fef Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:15:10 -0300
+Subject: [PATCH 051/120] V4L/DVB (13749): [Mantis CA] CA_SLAVE: Do not change Slave Configuration setup
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(Need to sanitize this cleanly for different Slaves)
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit ac23f4c86c3c901f95d72fc2262b22e6230d4feb)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 9e058be..d18fe41 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -171,9 +171,11 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+
+ int mantis_hif_init(struct mantis_ca *ca)
+ {
++ struct mantis_slot *slot = ca->slot;
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 irqcfg;
+
++ slot[0].slave_cfg = 0x70773028;
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
+ init_waitqueue_head(&ca->hif_data_wq);
+ init_waitqueue_head(&ca->hif_opdone_wq);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0052-V4L-DVB-13750-Mantis-GPIO_CONTROL-Cache-a-given-GPIO.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0052-V4L-DVB-13750-Mantis-GPIO_CONTROL-Cache-a-given-GPIO.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,60 @@
+From f37097db4c2acf80ca104250d60535bba9da4dbd Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:15:38 -0300
+Subject: [PATCH 052/120] V4L/DVB (13750): [Mantis] GPIO_CONTROL: Cache a given GPIO Bit Setup for a given event
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 4d5a28efda3ce12529e4b90832184f62c7a50848)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 2 +-
+ drivers/media/dvb/mantis/mantis_core.c | 11 +++++------
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 0aa4001..75f0773 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -137,7 +137,7 @@ struct mantis_pci {
+ u32 sub_device_id;
+
+ /* A12 A13 A14 */
+- int gpio_status;
++ u32 gpio_status;
+
+ struct mantis_ca *mantis_ca;
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index b94d051..3fd3b08 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -185,16 +185,15 @@ int mantis_core_exit(struct mantis_pci *mantis)
+ // Turn the given bit on or off.
+ void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
+ {
+- u32 currVal, newVal;
+-
+- currVal = mmread(MANTIS_GPIF_ADDR);
++ u32 cur;
+
++ cur = mmread(MANTIS_GPIF_ADDR);
+ if (value)
+- newVal = currVal | (1 << bitpos);
++ mantis->gpio_status = cur | (1 << bitpos);
+ else
+- newVal = currVal & (~(1 << bitpos));
++ mantis->gpio_status = cur & (~(1 << bitpos));
+
+- mmwrite(newVal, MANTIS_GPIF_ADDR);
++ mmwrite(mantis->gpio_status, MANTIS_GPIF_ADDR);
+ mmwrite(0x00, MANTIS_GPIF_DOUT);
+ udelay(100);
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0053-V4L-DVB-13751-Mantis-GPIO_CONTROL-Do-not-toggle-GPIO.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0053-V4L-DVB-13751-Mantis-GPIO_CONTROL-Do-not-toggle-GPIO.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,82 @@
+From d7b96790304cbd2a5cb6024310ec90ff9f2f3b5b Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:16:24 -0300
+Subject: [PATCH 053/120] V4L/DVB (13751): [Mantis] GPIO_CONTROL: Do not toggle GPIO CW's on HIF operations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b2d8f5eafd31cd7bc722dc93057d8c5fd5b688ab)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 2 ++
+ drivers/media/dvb/mantis/mantis_hif.c | 9 +++++----
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 75f0773..49f2f11 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -142,6 +142,8 @@ struct mantis_pci {
+ struct mantis_ca *mantis_ca;
+ };
+
++#define MANTIS_HIF_STATUS (mantis->gpio_status << 12)
++
+ extern unsigned int verbose;
+ extern unsigned int devs;
+ extern unsigned int i2c;
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index d18fe41..96611b6 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -56,6 +56,7 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ return rc;
+ }
+
++
+ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+@@ -67,7 +68,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr, MANTIS_GPIF_BRADDR);
++ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_BRADDR);
+ mmwrite(count, MANTIS_GPIF_BRBYTES);
+
+ udelay(20);
+@@ -100,7 +101,7 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+
+ mmwrite(slot->slave_cfg, MANTIS_GPIF_CFGSLA); /* Slot0 alone for now */
+
+- mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+ ca->hif_job_queue = MANTIS_HIF_MEMWR;
+
+@@ -124,7 +125,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ ca->hif_job_queue = MANTIS_HIF_IOMRD;
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+@@ -152,7 +153,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+ ca->hif_job_queue = MANTIS_HIF_IOMWR;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0054-V4L-DVB-13752-Mantis-CA-CAM_CONTROL-All-CAM-control-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0054-V4L-DVB-13752-Mantis-CA-CAM_CONTROL-All-CAM-control-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,46 @@
+From 7353f94022a6db6679736088921deb74c1f5c9cd Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:17:14 -0300
+Subject: [PATCH 054/120] V4L/DVB (13752): [Mantis CA] CAM_CONTROL: All CAM control operations now handled by the worker thread
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b619f9f8a111be3f6ec8ec2671eb93c66a673b90)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pci.c | 15 +--------------
+ 1 files changed, 1 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 6eecd54..4873fa9 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -183,20 +183,7 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ mantis->subsystem_device = pdev->subsystem_device;
+ init_waitqueue_head(&mantis->i2c_wq);
+
+- // CAM bypass
+- //mmwrite(mmread(MANTIS_INT_MASK) | MANTIS_INT_IRQ1, MANTIS_INT_MASK);
+- dprintk(verbose, MANTIS_INFO, 0, "\ngpif status: %04x irqcfg: %04x\n", mmread(0x9c), mmread(0x98));
+- if ((mmread(0x9c) & 0x200) != 0) { //CAM inserted
+- msleep_interruptible(1);
+- if ((mmread(0x9c) & 0x200) != 0)
+- mmwrite(((mmread(0x98) | 0x01) & ~0x02), 0x98);
+- else
+- mmwrite(((mmread(0x98) | 0x02) & ~0x01), 0x98);
+-
+- } else {
+- mmwrite(((mmread(0x98) | 0x02) & ~0x01), 0x98);
+- }
+- mantis_set_direction(mantis, 0);
++ mantis_set_direction(mantis, 0); /* CAM bypass */
+
+ if (!latency)
+ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 32);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0055-V4L-DVB-13753-Mantis-CA-SLOT_CONTROL-Implement-Slot-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0055-V4L-DVB-13753-Mantis-CA-SLOT_CONTROL-Implement-Slot-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From 0f6112987a8789ba97f6cdf2c0f538b8730e8f7c Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:17:46 -0300
+Subject: [PATCH 055/120] V4L/DVB (13753): [Mantis CA] SLOT_CONTROL: Implement Slot RESET
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit fb6de9c5fe13fd5cd866c49204e6bd91d73f83b0)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index f6d70cb..a30eb84 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -80,6 +80,11 @@ static int mantis_ca_slot_reset(struct dvb_ca_en50221 *en50221, int slot)
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Slot RESET", slot);
++ udelay(500); /* Wait.. */
++ mmwrite(0xda, MANTIS_PCMCIA_RESET); /* Leading edge assert */
++ udelay(500);
++ mmwrite(0x00, MANTIS_PCMCIA_RESET); /* Trailing edge deassert */
++ msleep(1000);
+
+ return 0;
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0056-V4L-DVB-13754-Mantis-CAM_CONTROL-Implement-TS-contro.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0056-V4L-DVB-13754-Mantis-CAM_CONTROL-Implement-TS-contro.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,61 @@
+From 13c3b8254171a89f941116d15e7312a2ccc1c800 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:18:27 -0300
+Subject: [PATCH 056/120] V4L/DVB (13754): [Mantis] CAM_CONTROL: Implement TS control
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 990f8d1e161429ee1a0e9708f7989543e4648f73)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 1 +
+ drivers/media/dvb/mantis/mantis_common.h | 2 ++
+ drivers/media/dvb/mantis/mantis_core.h | 4 ----
+ 3 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index a30eb84..b9d808b 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -105,6 +105,7 @@ static int mantis_ts_control(struct dvb_ca_en50221 *en50221, int slot)
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): TS control", slot);
++ mantis_set_direction(mantis, 1); /* Enable TS through CAM */
+
+ return 0;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 49f2f11..ac3eefe 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -153,6 +153,8 @@ extern int mantis_dvb_exit(struct mantis_pci *mantis);
+ extern void mantis_dma_xfer(unsigned long data);
+ extern void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value);
+
++extern void mantis_set_direction(struct mantis_pci *mantis, int direction);
++
+ extern int mantis_ca_init(struct mantis_pci *mantis);
+ extern void mantis_ca_exit(struct mantis_pci *mantis);
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.h b/drivers/media/dvb/mantis/mantis_core.h
+index 31b2a75..a809394 100644
+--- a/drivers/media/dvb/mantis/mantis_core.h
++++ b/drivers/media/dvb/mantis/mantis_core.h
+@@ -53,9 +53,5 @@ extern int mantis_i2c_init(struct mantis_pci *mantis);
+ extern int mantis_i2c_exit(struct mantis_pci *mantis);
+ extern int mantis_core_init(struct mantis_pci *mantis);
+ extern int mantis_core_exit(struct mantis_pci *mantis);
+-//extern void mantis_fe_powerup(struct mantis_pci *mantis);
+-//extern void mantis_fe_powerdown(struct mantis_pci *mantis);
+-//extern void mantis_fe_reset(struct dvb_frontend *fe);
+-extern void mantis_set_direction(struct mantis_pci *mantis, int direction);
+
+ #endif //__MANTIS_CORE_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0057-V4L-DVB-13755-Mantis-CA-CAM_CONTROL-Use-appropriate-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0057-V4L-DVB-13755-Mantis-CA-CAM_CONTROL-Use-appropriate-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From 6b927ab4cd36fc85e465f3d2c50ebe64010eea40 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:18:53 -0300
+Subject: [PATCH 057/120] V4L/DVB (13755): [Mantis CA] CAM_CONTROL: Use appropriate flags
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit f9ce1c3f32aa472c667c4d43d01c42922fb356ca)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index b9d808b..2c49f6b 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -138,6 +138,9 @@ int mantis_ca_init(struct mantis_pci *mantis)
+
+ ca->ca_priv = mantis;
+ mantis->mantis_ca = ca;
++ ca_flags = DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE |
++ DVB_CA_EN50221_FLAG_IRQ_FR |
++ DVB_CA_EN50221_FLAG_IRQ_DA;
+
+ /* register CA interface */
+ ca->en50221.owner = THIS_MODULE;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0058-V4L-DVB-13756-Mantis-CA-CAM_CONTROL-Use-CAMCHANGE_IR.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0058-V4L-DVB-13756-Mantis-CA-CAM_CONTROL-Use-CAMCHANGE_IR.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,43 @@
+From cd299782e9a680134268093555ab3afa14dc5d2b Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:19:26 -0300
+Subject: [PATCH 058/120] V4L/DVB (13756): [Mantis CA] CAM_CONTROL: Use CAMCHANGE_IRQ events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 05691cdbf479282e3d3c2e3386cb865cbf611e3a)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index dbcdca3..79c3c62 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -39,12 +39,18 @@ static void mantis_hifevm_work(struct work_struct *work)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+ mantis_event_cam_plugin(ca);
++ dvb_ca_en50221_camchange_irq(&ca->en50221,
++ 0,
++ DVB_CA_EN50221_CAMCHANGE_INSERTED);
+ }
+ } else {
+ if (gpif_stat & MANTIS_CARD_PLUGOUT) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+ mantis_event_cam_unplug(ca);
++ dvb_ca_en50221_camchange_irq(&ca->en50221,
++ 0,
++ DVB_CA_EN50221_CAMCHANGE_REMOVED);
+ }
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0059-V4L-DVB-13757-Mantis-CA-CAM_CONTROL-Use-FRDA_IRQ-Eve.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0059-V4L-DVB-13757-Mantis-CA-CAM_CONTROL-Use-FRDA_IRQ-Eve.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From df6c3197692071a03bb5dd3e69025246f297daca Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:20:14 -0300
+Subject: [PATCH 059/120] V4L/DVB (13757): [Mantis CA] CAM_CONTROL: Use FRDA_IRQ Events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit bb928a7a21273f67455912f0935ff943ddb35d0c)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 3 +--
+ 1 files changed, 1 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 79c3c62..ee04955 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -69,8 +69,7 @@ static void mantis_hifevm_work(struct work_struct *work)
+ if (gpif_stat & MANTIS_GPIF_BRRDY) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
+- if (ca->hif_job_queue & MANTIS_HIF_MEMRD)
+- wake_up(&ca->hif_brrdyw_wq);
++ dvb_ca_en50221_frda_irq(&ca->en50221, 0);
+ }
+ if (gpif_stat & MANTIS_GPIF_WRACK)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0060-V4L-DVB-13758-Mantis-CA-CAM_CONTROL-Use-CAMREADY_IRQ.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0060-V4L-DVB-13758-Mantis-CA-CAM_CONTROL-Use-CAMREADY_IRQ.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,49 @@
+From f51c7ca2ec38e36ed014dccf9df62d0432c35544 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:20:44 -0300
+Subject: [PATCH 060/120] V4L/DVB (13758): [Mantis CA] CAM_CONTROL: Use CAMREADY_IRQ event
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 2ec9b00bd0386b71c8a84a3990a13ea9656fe8dd)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 1 +
+ drivers/media/dvb/mantis/mantis_evm.c | 5 +----
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 2c49f6b..abd8855 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -85,6 +85,7 @@ static int mantis_ca_slot_reset(struct dvb_ca_en50221 *en50221, int slot)
+ udelay(500);
+ mmwrite(0x00, MANTIS_PCMCIA_RESET); /* Trailing edge deassert */
+ msleep(1000);
++ dvb_ca_en50221_camready_irq(&ca->en50221, 0);
+
+ return 0;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index ee04955..4695715 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -82,10 +82,7 @@ static void mantis_hifevm_work(struct work_struct *work)
+
+ if (gpif_stat & MANTIS_SBUF_OPDONE) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
+- if (ca->hif_job_queue) {
+- wake_up(&ca->hif_opdone_wq);
+- ca->hif_event = MANTIS_SBUF_OPDONE;
+- }
++
+ }
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0061-V4L-DVB-13759-Mantis-HIF-I-O-Use-the-LSB-octet-only.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0061-V4L-DVB-13759-Mantis-HIF-I-O-Use-the-LSB-octet-only.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,35 @@
+From db4106b3bfa9aad451695c41278d66e47953c0b6 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:21:05 -0300
+Subject: [PATCH 061/120] V4L/DVB (13759): [Mantis] HIF I/O: Use the LSB octet only
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to Abylai Ospan for pointing this out.
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 9c8679554db8cf39ccec5a90cfaa12b164585556)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 96611b6..1ccd869 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -139,7 +139,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+
+- return data;
++ return (u8) data;
+ }
+
+ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0062-V4L-DVB-13760-Mantis-CA-CA_MODULE-Look-for-module-st.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0062-V4L-DVB-13760-Mantis-CA-CA_MODULE-Look-for-module-st.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,35 @@
+From bba61c53a60cd9b46494dd84eda68bb53a0a69de Mon Sep 17 00:00:00 2001
+From: Sigmund Augdal <sigmund at snap.tv>
+Date: Fri, 4 Dec 2009 05:21:27 -0300
+Subject: [PATCH 062/120] V4L/DVB (13760): [Mantis CA] CA_MODULE: Look for module status on driver load
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Sigmund Augdal <sigmund at snap.tv>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 86c75c5c2b9318f4b3218615ada18badabd3f166)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index 47cc720..59f1a06 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -83,6 +83,9 @@ int mantis_pcmcia_init(struct mantis_ca *ca)
+ dprintk(verbose, MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGOUT, MANTIS_GPIF_IRQCFG);
+ ca->slot_state = MODULE_INSERTED;
++ dvb_ca_en50221_camchange_irq(&ca->en50221,
++ 0,
++ DVB_CA_EN50221_CAMCHANGE_INSERTED);
+ } else {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGIN, MANTIS_GPIF_IRQCFG);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0063-V4L-DVB-13761-Mantis-HIF-I-O-Temporary-workaround-us.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0063-V4L-DVB-13761-Mantis-HIF-I-O-Temporary-workaround-us.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,46 @@
+From c08c027326170324bdbe68ba172a075fd318951a Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:21:51 -0300
+Subject: [PATCH 063/120] V4L/DVB (13761): [Mantis] HIF I/O: Temporary workaround, use SBUF_OPDONE flag instead
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Dnumgis got hit with this bug, using a temporary workaround
+for the time being rather than digging deep at this point.
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit cc0e4aacaf4c3660fa759ce1299377baaf9efd8b)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 5 ++---
+ 1 files changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 4695715..532bcff 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -68,8 +68,6 @@ static void mantis_hifevm_work(struct work_struct *work)
+
+ if (gpif_stat & MANTIS_GPIF_BRRDY) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+- ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
+- dvb_ca_en50221_frda_irq(&ca->en50221, 0);
+ }
+ if (gpif_stat & MANTIS_GPIF_WRACK)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
+@@ -82,7 +80,8 @@ static void mantis_hifevm_work(struct work_struct *work)
+
+ if (gpif_stat & MANTIS_SBUF_OPDONE) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
+-
++ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
++ dvb_ca_en50221_frda_irq(&ca->en50221, 0);
+ }
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0064-V4L-DVB-13762-Mantis-CA-CA_MODULE-Look-for-the-modul.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0064-V4L-DVB-13762-Mantis-CA-CA_MODULE-Look-for-the-modul.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From 296c3247f8ffccad5cd54f6cd1dcd1d6d5d67e29 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:22:33 -0300
+Subject: [PATCH 064/120] V4L/DVB (13762): [Mantis CA] CA_MODULE: Look for the module status on driver unload as well
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 88a6fa9dfec0a585409acbb49a7f86a933b35d2b)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index 59f1a06..4156a08 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -90,6 +90,9 @@ int mantis_pcmcia_init(struct mantis_ca *ca)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGIN, MANTIS_GPIF_IRQCFG);
+ ca->slot_state = MODULE_XTRACTED;
++ dvb_ca_en50221_camchange_irq(&ca->en50221,
++ 0,
++ DVB_CA_EN50221_CAMCHANGE_REMOVED);
+ }
+
+ return 0;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0065-V4L-DVB-13763-Mantis-HIF-I-O-trim-delays-a-bit-appro.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0065-V4L-DVB-13763-Mantis-HIF-I-O-trim-delays-a-bit-appro.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,49 @@
+From 03f4f0b232a65b033edc0ffbfa907ca7f25a68a8 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:22:57 -0300
+Subject: [PATCH 065/120] V4L/DVB (13763): [Mantis] HIF I/O: trim delays a bit appropriately
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 8e0d58ecee2abc12f298862b7f9a90d1593e8006)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 1ccd869..880b996 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -133,11 +133,11 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+- udelay(50);
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
+ data = mmread(MANTIS_GPIF_DIN);
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ udelay(50);
+
+ return (u8) data;
+ }
+@@ -162,10 +162,10 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+- udelay(50);
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ udelay(50);
+
+ return 0;
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0066-V4L-DVB-13764-Mantis-CA-SLOT-Add-some-debug-status.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0066-V4L-DVB-13764-Mantis-CA-SLOT-Add-some-debug-status.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,38 @@
+From 98d02f326cfc11b8fac8e031391dc9ddd092bc52 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:23:17 -0300
+Subject: [PATCH 066/120] V4L/DVB (13764): [Mantis CA] SLOT: Add some debug status
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 5e2a0c99019bbc78d6fb00caf7a79f03df020b3c)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 6 +++++-
+ 1 files changed, 5 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index abd8855..b79a892 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -118,8 +118,12 @@ static int mantis_slot_status(struct dvb_ca_en50221 *en50221, int slot, int open
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Poll Slot status", slot);
+
+- if (ca->slot_state == MODULE_INSERTED)
++ if (ca->slot_state == MODULE_INSERTED) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "CA Module present and ready");
+ return DVB_CA_EN50221_POLL_CAM_PRESENT | DVB_CA_EN50221_POLL_CAM_READY;
++ } else {
++ dprintk(verbose, MANTIS_DEBUG, 1, "CA Module not present or not ready");
++ }
+
+ return 0;
+ }
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0067-V4L-DVB-13765-Mantis-HIF-I-O-Add-some-debug-statemen.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0067-V4L-DVB-13765-Mantis-HIF-I-O-Add-some-debug-statemen.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,66 @@
+From b56e3266dc0a8ab03381e11ab8582693bd17a4ef Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:23:38 -0300
+Subject: [PATCH 067/120] V4L/DVB (13765): [Mantis] HIF I/O: Add some debug statements
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 8b9c385f765bcc7fc5ae802830ffcb4b6ca6bc9c)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 7 ++++++-
+ 1 files changed, 6 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 880b996..c2cecc3 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -51,6 +51,7 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num);
+ rc = -EREMOTEIO;
+ }
++ dprintk(verbose, MANTIS_DEBUG, 1, "Smart Buffer Operation complete");
+ ca->hif_event &= ~MANTIS_SBUF_OPDONE;
+ udelay(5);
+ return rc;
+@@ -83,7 +84,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ return -EREMOTEIO;
+ }
+ data = mmread(MANTIS_GPIF_DIN);
+-
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mem Read: 0x%02x", data);
+ return (data >> 24) & 0xff;
+ }
+
+@@ -111,6 +112,8 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ return -EREMOTEIO;
+ }
+ ca->hif_job_queue &= ~MANTIS_HIF_MEMWR;
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr);
++
+ return 0;
+ }
+
+@@ -137,6 +140,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ data = mmread(MANTIS_GPIF_DIN);
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
+ udelay(50);
+
+ return (u8) data;
+@@ -165,6 +169,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
+ hif_addr |= MANTIS_GPIF_PCMCIAREG;
+ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
++ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
+ udelay(50);
+
+ return 0;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0068-V4L-DVB-13766-Mantis-Bug-Fix-wrong-exit-condition.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0068-V4L-DVB-13766-Mantis-Bug-Fix-wrong-exit-condition.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From 1278188295bed9ed92291c3d8b751573e3756ae0 Mon Sep 17 00:00:00 2001
+From: Sigmund Augdal <sigmund at snap.tv>
+Date: Fri, 4 Dec 2009 05:24:01 -0300
+Subject: [PATCH 068/120] V4L/DVB (13766): [Mantis] Bug: Fix wrong exit condition
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Sigmund Augdal <sigmund at snap.tv>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b29453aca0eeecba52a76c3d67b1a52c3ca6e656)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 2 --
+ 1 files changed, 0 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 532bcff..214ae5e 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -31,8 +31,6 @@ static void mantis_hifevm_work(struct work_struct *work)
+
+ gpif_stat = mmread(MANTIS_GPIF_STATUS);
+ gpif_mask = mmread(MANTIS_GPIF_IRQCFG);
+- if (!((gpif_stat & 0xff) & (gpif_mask & 0xff)))
+- return;
+
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0069-V4L-DVB-13767-Mantis-VP-1041-Bug-Add-in-missing-Mast.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0069-V4L-DVB-13767-Mantis-VP-1041-Bug-Add-in-missing-Mast.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From 5d6d71e9bc1b015d2233cc54eff468675ca21ef2 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:24:47 -0300
+Subject: [PATCH 069/120] V4L/DVB (13767): [Mantis/VP-1041] Bug: Add in missing Master clock settings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to Ershov and Igor for pointing it out.
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 18b6de42d77e7762be929a4a858c359de352e1e2)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_vp1041.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 7dee1af..8eb1afd 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -267,6 +267,9 @@ struct stb0899_config vp1041_config = {
+ .xtal_freq = 27000000,
+ .inversion = IQ_SWAP_ON, /* 1 */
+
++ .lo_clk = 76500000,
++ .hi_clk = 99000000,
++
+ .esno_ave = STB0899_DVBS2_ESNO_AVE,
+ .esno_quant = STB0899_DVBS2_ESNO_QUANT,
+ .avframes_coarse = STB0899_DVBS2_AVFRAMES_COARSE,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0070-V4L-DVB-13768-Mantis-Enable-WRACK.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0070-V4L-DVB-13768-Mantis-Enable-WRACK.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,58 @@
+From 3233c1c265a9216a4ac171d000f32ebc8921885e Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:25:18 -0300
+Subject: [PATCH 070/120] V4L/DVB (13768): [Mantis] Enable WRACK
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit adcc9dd57e814d5ac3928f92f431fbe4808e936f)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 10 +++++++++-
+ drivers/media/dvb/mantis/mantis_hif.c | 1 +
+ 2 files changed, 10 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 214ae5e..000cf39 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -27,11 +27,19 @@ static void mantis_hifevm_work(struct work_struct *work)
+ struct mantis_ca *ca = container_of(work, struct mantis_ca, hif_evm_work);
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- u32 gpif_stat, gpif_mask;
++ u32 gpif_stat, gpif_mask, rst_mask, rst_stat;
++
++ rst_mask = MANTIS_GPIF_WRACK |
++ MANTIS_GPIF_OTHERR |
++ MANTIS_SBUF_WSTO |
++ MANTIS_GPIF_EXTIRQ;
+
+ gpif_stat = mmread(MANTIS_GPIF_STATUS);
+ gpif_mask = mmread(MANTIS_GPIF_IRQCFG);
+
++ rst_stat = gpif_stat & rst_mask;
++ mmwrite(rst_stat, MANTIS_GPIF_STATUS);
++
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index c2cecc3..2f1a6cb 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -188,6 +188,7 @@ int mantis_hif_init(struct mantis_ca *ca)
+
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+ irqcfg |= MANTIS_MASK_BRRDY;
++ irqcfg |= MANTIS_MASK_WRACK;
+ mmwrite(irqcfg, MANTIS_GPIF_IRQCFG);
+
+ return 0;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0071-V4L-DVB-13769-Mantis-Smart-Buffer-Burst-Read-Ready-c.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0071-V4L-DVB-13769-Mantis-Smart-Buffer-Burst-Read-Ready-c.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From c06d22ea77fc3584534c556b738895c79f523065 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:25:45 -0300
+Subject: [PATCH 071/120] V4L/DVB (13769): [Mantis] Smart Buffer Burst Read Ready cannot flag FR/DA Irq
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 9e49e8d913209e7221f761193f18a91d130b9e2d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 000cf39..1594bb8 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -72,9 +72,9 @@ static void mantis_hifevm_work(struct work_struct *work)
+ if (gpif_stat & MANTIS_SBUF_OVFLW)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow", mantis->num);
+
+- if (gpif_stat & MANTIS_GPIF_BRRDY) {
++ if (gpif_stat & MANTIS_GPIF_BRRDY)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+- }
++
+ if (gpif_stat & MANTIS_GPIF_WRACK)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0072-V4L-DVB-13770-Mantis-Bug-Do-not-trigger-FR-DA-IRQ-fr.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0072-V4L-DVB-13770-Mantis-Bug-Do-not-trigger-FR-DA-IRQ-fr.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,32 @@
+From 25933d9a587b31a403afcf97ee51aeaacf0006fa Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:26:18 -0300
+Subject: [PATCH 072/120] V4L/DVB (13770): [Mantis] Bug Do not trigger FR/DA IRQ from SBUF OPDONE
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit f668c7292bda7f64400eaa8d45c3a785eecab990)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 1594bb8..d603601 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -87,7 +87,6 @@ static void mantis_hifevm_work(struct work_struct *work)
+ if (gpif_stat & MANTIS_SBUF_OPDONE) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
+ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
+- dvb_ca_en50221_frda_irq(&ca->en50221, 0);
+ }
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0073-V4L-DVB-13771-Mantis-Reset-Flags-at-the-earliest-pos.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0073-V4L-DVB-13771-Mantis-Reset-Flags-at-the-earliest-pos.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,123 @@
+From 968a9a10f909e19de0dd828d251d4513bc7f0ba7 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:26:46 -0300
+Subject: [PATCH 073/120] V4L/DVB (13771): [Mantis] Reset Flags at the earliest possible
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 17b77fc2d404910ca691661038ceb4c02d912d16)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 2 ++
+ drivers/media/dvb/mantis/mantis_evm.c | 18 +++++-------------
+ drivers/media/dvb/mantis/mantis_pci.c | 12 ++++++++++++
+ 3 files changed, 19 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index ac3eefe..27ecfdb 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -139,6 +139,8 @@ struct mantis_pci {
+ /* A12 A13 A14 */
+ u32 gpio_status;
+
++ u32 gpif_status;
++
+ struct mantis_ca *mantis_ca;
+ };
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index d603601..4c4c144 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -27,19 +27,11 @@ static void mantis_hifevm_work(struct work_struct *work)
+ struct mantis_ca *ca = container_of(work, struct mantis_ca, hif_evm_work);
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- u32 gpif_stat, gpif_mask, rst_mask, rst_stat;
+-
+- rst_mask = MANTIS_GPIF_WRACK |
+- MANTIS_GPIF_OTHERR |
+- MANTIS_SBUF_WSTO |
+- MANTIS_GPIF_EXTIRQ;
++ u32 gpif_stat, gpif_mask;
+
+ gpif_stat = mmread(MANTIS_GPIF_STATUS);
+ gpif_mask = mmread(MANTIS_GPIF_IRQCFG);
+
+- rst_stat = gpif_stat & rst_mask;
+- mmwrite(rst_stat, MANTIS_GPIF_STATUS);
+-
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
+@@ -60,13 +52,13 @@ static void mantis_hifevm_work(struct work_struct *work)
+ }
+ }
+
+- if (gpif_stat & MANTIS_GPIF_EXTIRQ)
++ if (mantis->gpif_status & MANTIS_GPIF_EXTIRQ)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
+
+- if (gpif_stat & MANTIS_SBUF_WSTO)
++ if (mantis->gpif_status & MANTIS_SBUF_WSTO)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
+
+- if (gpif_stat & MANTIS_GPIF_OTHERR)
++ if (mantis->gpif_status & MANTIS_GPIF_OTHERR)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_OVFLW)
+@@ -75,7 +67,7 @@ static void mantis_hifevm_work(struct work_struct *work)
+ if (gpif_stat & MANTIS_GPIF_BRRDY)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+
+- if (gpif_stat & MANTIS_GPIF_WRACK)
++ if (mantis->gpif_status & MANTIS_GPIF_WRACK)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
+
+ if (gpif_stat & MANTIS_GPIF_INTSTAT)
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 4873fa9..f57e2a4 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -53,6 +53,8 @@ MODULE_DEVICE_TABLE(pci, mantis_pci_table);
+ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ {
+ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
++ u32 rst_stat = 0, rst_mask = 0;
++
+ struct mantis_pci *mantis;
+ struct mantis_ca *ca;
+
+@@ -69,6 +71,15 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ if (!(stat & mask))
+ return IRQ_NONE;
+
++ rst_mask = MANTIS_GPIF_WRACK |
++ MANTIS_GPIF_OTHERR |
++ MANTIS_SBUF_WSTO |
++ MANTIS_GPIF_EXTIRQ;
++
++ rst_stat = mmread(MANTIS_GPIF_STATUS);
++ rst_stat &= rst_mask;
++ mmwrite(rst_stat, MANTIS_GPIF_STATUS);
++
+ mantis->mantis_int_stat = stat;
+ mantis->mantis_int_mask = mask;
+ dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]= [", stat, mask);
+@@ -77,6 +88,7 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ }
+ if (stat & MANTIS_INT_IRQ0) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
++ mantis->gpif_status = rst_stat;
+ schedule_work(&ca->hif_evm_work);
+ }
+ if (stat & MANTIS_INT_IRQ1) {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0074-V4L-DVB-13772-Mantis-Do-not-enable-Common-Memory-Acc.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0074-V4L-DVB-13772-Mantis-Do-not-enable-Common-Memory-Acc.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,42 @@
+From bca78435121081f27d817455c44e7420fbc6bc37 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:27:26 -0300
+Subject: [PATCH 074/120] V4L/DVB (13772): [Mantis] Do not enable Common Memory Access
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 578413228ae72a09b29bf29e879e5b919ded0ac4)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 4 ----
+ 1 files changed, 0 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 2f1a6cb..151de2d 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -138,8 +138,6 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ }
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
+ data = mmread(MANTIS_GPIF_DIN);
+- hif_addr |= MANTIS_GPIF_PCMCIAREG;
+- mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
+ udelay(50);
+
+@@ -167,8 +165,6 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ return -EREMOTEIO;
+ }
+ ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
+- hif_addr |= MANTIS_GPIF_PCMCIAREG;
+- mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
+ udelay(50);
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0075-V4L-DVB-13773-Mantis-Enable-all-interrupts.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0075-V4L-DVB-13773-Mantis-Enable-all-interrupts.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,42 @@
+From f885a5c0c7bd350ad4f082370f9a5b34acd47fce Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:27:53 -0300
+Subject: [PATCH 075/120] V4L/DVB (13773): [Mantis] Enable all interrupts
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit c90d345fd7d66899d743611a47163f9904df90bc)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 11 ++++++++---
+ 1 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 151de2d..fa4bb6d 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -182,9 +182,14 @@ int mantis_hif_init(struct mantis_ca *ca)
+ init_waitqueue_head(&ca->hif_data_wq);
+ init_waitqueue_head(&ca->hif_opdone_wq);
+
+- irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+- irqcfg |= MANTIS_MASK_BRRDY;
+- irqcfg |= MANTIS_MASK_WRACK;
++ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
++ irqcfg = MANTIS_MASK_BRRDY |
++ MANTIS_MASK_WRACK |
++ MANTIS_MASK_EXTIRQ |
++ MANTIS_MASK_WSTO |
++ MANTIS_MASK_OTHERR |
++ MANTIS_MASK_OVFLW;
++
+ mmwrite(irqcfg, MANTIS_GPIF_IRQCFG);
+
+ return 0;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0076-V4L-DVB-13774-Mantis-Remove-redundant-wait-for-Burst.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0076-V4L-DVB-13774-Mantis-Remove-redundant-wait-for-Burst.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,50 @@
+From 6c879c97e12ca27a73026c73069babe5fee648c5 Mon Sep 17 00:00:00 2001
+From: Sigmund Augdal <sigmund at snap.tv>
+Date: Fri, 4 Dec 2009 05:28:24 -0300
+Subject: [PATCH 076/120] V4L/DVB (13774): [Mantis] Remove redundant wait for Burst Reads, wakeup the HIF event
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Sigmund Augdal <sigmund at snap.tv>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit c02e15150c85619f22a98675124503ed93bf1914)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 2 ++
+ drivers/media/dvb/mantis/mantis_hif.c | 4 ----
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 4c4c144..008e2c2 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -79,6 +79,8 @@ static void mantis_hifevm_work(struct work_struct *work)
+ if (gpif_stat & MANTIS_SBUF_OPDONE) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
+ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
++ ca->hif_event = MANTIS_SBUF_OPDONE;
++ wake_up(&ca->hif_opdone_wq);
+ }
+ }
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index fa4bb6d..6c51d17 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -75,10 +75,6 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ udelay(20);
+
+ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+- if (mantis_hif_data_available(ca) != 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer burst read failed", mantis->num);
+- return -EREMOTEIO;
+- }
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0077-V4L-DVB-13775-Mantis-Remove-unnecessary-job-queues.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0077-V4L-DVB-13775-Mantis-Remove-unnecessary-job-queues.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,84 @@
+From 5a8397a8434636fb2921245563fb8511148bee08 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:29:03 -0300
+Subject: [PATCH 077/120] V4L/DVB (13775): [Mantis] Remove unnecessary job queues
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b9fd5877463605b91743552b4989666792bf4fbc)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 10 ----------
+ drivers/media/dvb/mantis/mantis_link.h | 1 -
+ 2 files changed, 0 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 6c51d17..621dce3 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -97,17 +97,13 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ hif_addr |= addr;
+
+ mmwrite(slot->slave_cfg, MANTIS_GPIF_CFGSLA); /* Slot0 alone for now */
+-
+ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+- ca->hif_job_queue = MANTIS_HIF_MEMWR;
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+- ca->hif_job_queue &= ~MANTIS_HIF_MEMWR;
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+- ca->hif_job_queue &= ~MANTIS_HIF_MEMWR;
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr);
+
+ return 0;
+@@ -125,14 +121,11 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ hif_addr |= addr;
+
+ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+- ca->hif_job_queue = MANTIS_HIF_IOMRD;
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+- ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+- ca->hif_job_queue &= ~MANTIS_HIF_IOMRD;
+ data = mmread(MANTIS_GPIF_DIN);
+ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
+ udelay(50);
+@@ -154,13 +147,10 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+- ca->hif_job_queue = MANTIS_HIF_IOMWR;
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+- ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+- ca->hif_job_queue &= ~MANTIS_HIF_IOMWR;
+ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
+ udelay(50);
+
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 23ff2d6..a85f502 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -51,7 +51,6 @@ struct mantis_ca {
+ wait_queue_head_t hif_opdone_wq;
+ wait_queue_head_t hif_brrdyw_wq;
+ wait_queue_head_t hif_data_wq;
+- u32 hif_job_queue;
+
+ enum mantis_sbuf_status sbuf_status;
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0078-V4L-DVB-13776-Mantis-Use-a-simple-timeout-instead-in.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0078-V4L-DVB-13776-Mantis-Use-a-simple-timeout-instead-in.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,39 @@
+From 20cef9cdc3581a9023fd09a0f202c7f53149a75f Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:29:25 -0300
+Subject: [PATCH 078/120] V4L/DVB (13776): [Mantis] Use a simple timeout instead, interruptible
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+timeouts sleep unnecessarily too long
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit ac8f04d2723b3de7c36430d67401ce89c858e117)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 621dce3..a2359f7 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -44,9 +44,9 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ struct mantis_pci *mantis = ca->ca_priv;
+ int rc = 0;
+
+- if (wait_event_interruptible_timeout(ca->hif_opdone_wq,
+- ca->hif_event & MANTIS_SBUF_OPDONE,
+- msecs_to_jiffies(500)) == -ERESTARTSYS) {
++ if (wait_event_timeout(ca->hif_opdone_wq,
++ ca->hif_event & MANTIS_SBUF_OPDONE,
++ msecs_to_jiffies(500)) == -ERESTARTSYS) {
+
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num);
+ rc = -EREMOTEIO;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0079-V4L-DVB-13777-Mantis-Use-a-Write-wait-queue-for-Writ.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0079-V4L-DVB-13777-Mantis-Use-a-Write-wait-queue-for-Writ.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,99 @@
+From 836746e92296047dfc0fa5b66ef32d67893f48e4 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:29:48 -0300
+Subject: [PATCH 079/120] V4L/DVB (13777): [Mantis] Use a Write wait queue for Write events
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit e0e099a708043a2341d8987014ce4ba98a4dbd30)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 34 ++++++++++++++++++++++++++++++-
+ drivers/media/dvb/mantis/mantis_link.h | 1 +
+ 2 files changed, 33 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index a2359f7..dc50fac 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -57,6 +57,35 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ return rc;
+ }
+
++static int mantis_hif_write_wait(struct mantis_ca *ca)
++{
++ struct mantis_pci *mantis = ca->ca_priv;
++ u32 opdone = 0, timeout = 0;
++ int rc = 0;
++
++ if (wait_event_timeout(ca->hif_write_wq,
++ mantis->gpif_status & MANTIS_GPIF_WRACK,
++ msecs_to_jiffies(500)) == -ERESTARTSYS) {
++
++ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Write ACK timed out !", mantis->num);
++ rc = -EREMOTEIO;
++ }
++ dprintk(verbose, MANTIS_DEBUG, 1, "Write Acknowledged");
++ mantis->gpif_status &= ~MANTIS_GPIF_WRACK;
++ while (!opdone) {
++ opdone = (mmread(MANTIS_GPIF_STATUS) & MANTIS_SBUF_OPDONE);
++ udelay(500);
++ timeout++;
++ if (timeout > 100) {
++ dprintk(verbose, MANTIS_ERROR, 1, "Adater(%d) Slot(0): Write operation timed out!", mantis->num);
++ rc = -ETIMEDOUT;
++ break;
++ }
++ }
++ dprintk(verbose, MANTIS_DEBUG, 1, "HIF Write success");
++ return rc;
++}
++
+
+ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ {
+@@ -100,7 +129,7 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+- if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
++ if (mantis_hif_write_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+@@ -147,7 +176,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+- if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
++ if (mantis_hif_write_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+ }
+@@ -167,6 +196,7 @@ int mantis_hif_init(struct mantis_ca *ca)
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
+ init_waitqueue_head(&ca->hif_data_wq);
+ init_waitqueue_head(&ca->hif_opdone_wq);
++ init_waitqueue_head(&ca->hif_write_wq);
+
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+ irqcfg = MANTIS_MASK_BRRDY |
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index a85f502..599ff1b 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -51,6 +51,7 @@ struct mantis_ca {
+ wait_queue_head_t hif_opdone_wq;
+ wait_queue_head_t hif_brrdyw_wq;
+ wait_queue_head_t hif_data_wq;
++ wait_queue_head_t hif_write_wq; /* HIF Write op */
+
+ enum mantis_sbuf_status sbuf_status;
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0080-V4L-DVB-13778-Mantis-Wr-ACK-is-already-handled-in-th.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0080-V4L-DVB-13778-Mantis-Wr-ACK-is-already-handled-in-th.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From b985d00f6cc8780a4bb59651f685aec65c3f6470 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:30:11 -0300
+Subject: [PATCH 080/120] V4L/DVB (13778): [Mantis] Wr ACK is already handled in the fast path,
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+do not use the event manager to handle the fast events
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 4d019faf48ff03b6ff3463d8e5da54d61f153623)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_evm.c | 3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 008e2c2..9be55f7 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -67,9 +67,6 @@ static void mantis_hifevm_work(struct work_struct *work)
+ if (gpif_stat & MANTIS_GPIF_BRRDY)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+
+- if (mantis->gpif_status & MANTIS_GPIF_WRACK)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
+-
+ if (gpif_stat & MANTIS_GPIF_INTSTAT)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): GPIF IRQ", mantis->num);
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0081-V4L-DVB-13779-Mantis-Missing-wakeup-for-write-queue.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0081-V4L-DVB-13779-Mantis-Missing-wakeup-for-write-queue.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From a2b40d936b9dc0a2adf4eb204fea8b2660e958ba Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:30:33 -0300
+Subject: [PATCH 081/120] V4L/DVB (13779): [Mantis] Missing wakeup for write queue
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to Sigmund for pointing it out
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 25e9eba42ce11a05933068cf6a42dd8d4ed5edb8)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pci.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index f57e2a4..a068ffb 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -89,6 +89,7 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ if (stat & MANTIS_INT_IRQ0) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
+ mantis->gpif_status = rst_stat;
++ wake_up(&ca->hif_write_wq);
+ schedule_work(&ca->hif_evm_work);
+ }
+ if (stat & MANTIS_INT_IRQ1) {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0082-V4L-DVB-13780-Mantis-HIF-I-O-Enable-Interrupts-for-R.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0082-V4L-DVB-13780-Mantis-HIF-I-O-Enable-Interrupts-for-R.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,37 @@
+From da671ce16df2bbc12053996f0308bc6414c355e4 Mon Sep 17 00:00:00 2001
+From: Sigmund Augdal <sigmund at snap.tv>
+Date: Fri, 4 Dec 2009 05:30:59 -0300
+Subject: [PATCH 082/120] V4L/DVB (13780): [Mantis] HIF I/O: Enable Interrupts for Read
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Sigmund Augdal <sigmund at snap.tv>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit c63e507346c042af7fe26d49bbbdce9898ea3eea)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index dc50fac..323d1fb 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -149,6 +149,11 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= addr;
+
++ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_BRADDR);
++ mmwrite(1, MANTIS_GPIF_BRBYTES);
++
++ udelay(20);
++
+ mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0083-V4L-DVB-13781-Mantis-CA-Bug-Fix-wrong-usage-of-HIFRD.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0083-V4L-DVB-13781-Mantis-CA-Bug-Fix-wrong-usage-of-HIFRD.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,99 @@
+From 708cce89d29f05833e37b720b2258cd397c18a0d Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:31:21 -0300
+Subject: [PATCH 083/120] V4L/DVB (13781): [Mantis CA] Bug: Fix wrong usage of HIFRDWRN
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b29f6ac248e49d8425aa91afb1b53d1f6d47ebe3)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 24 +++++++++++-------------
+ 1 files changed, 11 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 323d1fb..3368253 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -53,7 +53,6 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ }
+ dprintk(verbose, MANTIS_DEBUG, 1, "Smart Buffer Operation complete");
+ ca->hif_event &= ~MANTIS_SBUF_OPDONE;
+- udelay(5);
+ return rc;
+ }
+
+@@ -93,17 +92,16 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ u32 hif_addr = 0, data, count = 4;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num);
+- hif_addr |= MANTIS_GPIF_HIFRDWRN;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= MANTIS_HIF_STATUS;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_BRADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_BRADDR);
+ mmwrite(count, MANTIS_GPIF_BRBYTES);
+-
+ udelay(20);
++ mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
+
+- mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
+ return -EREMOTEIO;
+@@ -123,10 +121,11 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+- hif_addr |= addr;
++ hif_addr |= MANTIS_HIF_STATUS;
++ hif_addr |= addr;
+
+ mmwrite(slot->slave_cfg, MANTIS_GPIF_CFGSLA); /* Slot0 alone for now */
+- mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+ if (mantis_hif_write_wait(ca) != 0) {
+@@ -145,16 +144,14 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+- hif_addr |= MANTIS_GPIF_HIFRDWRN;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= MANTIS_HIF_STATUS;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_BRADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_BRADDR);
+ mmwrite(1, MANTIS_GPIF_BRBYTES);
+-
+ udelay(20);
+-
+- mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
++ mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+@@ -176,9 +173,10 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
++ hif_addr |= MANTIS_HIF_STATUS;
+ hif_addr |= addr;
+
+- mmwrite(hif_addr | MANTIS_HIF_STATUS, MANTIS_GPIF_ADDR);
++ mmwrite(hif_addr, MANTIS_GPIF_ADDR);
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+ if (mantis_hif_write_wait(ca) != 0) {
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0084-V4L-DVB-13782-Mantis-Temporarily-disable-FRDA-irq.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0084-V4L-DVB-13782-Mantis-Temporarily-disable-FRDA-irq.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From 69ffe7b35779fd6b84735ae4011e314cc649734f Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:31:45 -0300
+Subject: [PATCH 084/120] V4L/DVB (13782): [Mantis] Temporarily disable FRDA irq
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit e26c2b46201e5ae38111391c293cec08870b7f6d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 5 +----
+ 1 files changed, 1 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index b79a892..177b048 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -143,10 +143,7 @@ int mantis_ca_init(struct mantis_pci *mantis)
+
+ ca->ca_priv = mantis;
+ mantis->mantis_ca = ca;
+- ca_flags = DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE |
+- DVB_CA_EN50221_FLAG_IRQ_FR |
+- DVB_CA_EN50221_FLAG_IRQ_DA;
+-
++ ca_flags = DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE;
+ /* register CA interface */
+ ca->en50221.owner = THIS_MODULE;
+ ca->en50221.read_attribute_mem = mantis_ca_read_attr_mem;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0085-V4L-DVB-13783-Mantis-Technisat-Cablestar-HD2-Add-sup.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0085-V4L-DVB-13783-Mantis-Technisat-Cablestar-HD2-Add-sup.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,59 @@
+From 1afd0c9e1ec56c4692e6d74c449009774edc61c7 Mon Sep 17 00:00:00 2001
+From: Marko Viitamaki <mau2 at suomi24.fi>
+Date: Fri, 4 Dec 2009 05:32:30 -0300
+Subject: [PATCH 085/120] V4L/DVB (13783): [Mantis/Technisat Cablestar HD2] Add support for the Technisat Cablestar HD2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Marko Viitamaki <mau2 at suomi24.fi>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit f5701b67767c6b81a035c9e2b539025f91d1e84d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_core.c | 1 +
+ drivers/media/dvb/mantis/mantis_dvb.c | 1 +
+ drivers/media/dvb/mantis/mantis_vp2040.h | 1 +
+ 3 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 3fd3b08..c3d0d53 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -121,6 +121,7 @@ static void mantis_load_config(struct mantis_pci *mantis)
+ break;
+ case MANTIS_VP_2040_DVB_C: // VP-2040
+ case TERRATEC_CINERGY_C_PCI: // VP-2040 clone
++ case TECHNISAT_CABLESTAR_HD2:
+ mantis->hwconfig = &vp2040_mantis_config;
+ break;
+ case MANTIS_VP_3030_DVB_T: // VP-3030
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 3940aed..c3a35be 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -275,6 +275,7 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+ break;
+ case MANTIS_VP_2040_DVB_C: // VP-2040
+ case TERRATEC_CINERGY_C_PCI:
++ case TECHNISAT_CABLESTAR_HD2:
+ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+ mantis->fe = tda10023_attach(&tda10023_cu1216_config, &mantis->adapter, read_pwm(mantis));
+ if (mantis->fe) {
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.h b/drivers/media/dvb/mantis/mantis_vp2040.h
+index 69463cc..645dade 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.h
++++ b/drivers/media/dvb/mantis/mantis_vp2040.h
+@@ -27,6 +27,7 @@
+
+ #define MANTIS_VP_2040_DVB_C 0x0043
+ #define TERRATEC_CINERGY_C_PCI 0x1178
++#define TECHNISAT_CABLESTAR_HD2 0x0002
+
+ extern struct tda1002x_config tda10023_cu1216_config;
+ extern struct mantis_hwconfig vp2040_mantis_config;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0086-V4L-DVB-13784-Mantis-Use-PCI-API-instead-of-hardcode.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0086-V4L-DVB-13784-Mantis-Use-PCI-API-instead-of-hardcode.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From 1aba53af9711a20d7ec3ac40652b49a0da5bece9 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:32:51 -0300
+Subject: [PATCH 086/120] V4L/DVB (13784): [Mantis] Use PCI API instead of hardcoded length
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit ff63ac56705539e162d2f020a0c2a607eae37d7b)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pci.c | 5 ++++-
+ 1 files changed, 4 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index a068ffb..d3a62b1 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -169,7 +169,10 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ goto err0;
+ }
+
+- if ((mantis->mantis_mmio = ioremap(mantis->mantis_addr, 0x1000)) == NULL) {
++ mantis->mantis_mmio = ioremap(pci_resource_start(pdev, 0),
++ pci_resource_len(pdev, 0));
++
++ if (!mantis->mantis_mmio) {
+ dprintk(verbose, MANTIS_ERROR, 1, "IO remap failed");
+ ret = -ENODEV;
+ goto err1;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0087-V4L-DVB-13785-Mantis-Do-not-disable-IRQ-s-while-bein.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0087-V4L-DVB-13785-Mantis-Do-not-disable-IRQ-s-while-bein.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,38 @@
+From 4ac6de6b8db05b596deaec2273e359f4cdef1a34 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:33:10 -0300
+Subject: [PATCH 087/120] V4L/DVB (13785): [Mantis] Do not disable IRQ's while being invoked
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 13d5036ea0636e6204e1b17bd12ea25061a686be)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pci.c | 7 +++++--
+ 1 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index d3a62b1..94abcee 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -181,8 +181,11 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+ // Clear and disable all interrupts at startup
+ // to avoid lockup situations
+ mmwrite(0x00, MANTIS_INT_MASK);
+- if (request_irq(pdev->irq, mantis_pci_irq, IRQF_SHARED | IRQF_DISABLED,
+- DRIVER_NAME, mantis) < 0) {
++ if (request_irq(pdev->irq,
++ mantis_pci_irq,
++ IRQF_SHARED,
++ DRIVER_NAME,
++ mantis) < 0) {
+
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis IRQ reg failed");
+ ret = -ENODEV;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0088-V4L-DVB-13786-Mantis-Bug-HIF-bits-already-shifted.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0088-V4L-DVB-13786-Mantis-Bug-HIF-bits-already-shifted.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,33 @@
+From 14fef7b5eac3d398487efe43a4b939df5e8fcf72 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:33:31 -0300
+Subject: [PATCH 088/120] V4L/DVB (13786): [Mantis] Bug: HIF bits already shifted ..
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 263645de70175d8b5a5e392a1856e99e2e1b7209)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_common.h | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 27ecfdb..6b9f92b 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -144,7 +144,7 @@ struct mantis_pci {
+ struct mantis_ca *mantis_ca;
+ };
+
+-#define MANTIS_HIF_STATUS (mantis->gpio_status << 12)
++#define MANTIS_HIF_STATUS (mantis->gpio_status)
+
+ extern unsigned int verbose;
+ extern unsigned int devs;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0089-V4L-DVB-13787-Mantis-Fix-build.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0089-V4L-DVB-13787-Mantis-Fix-build.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,85 @@
+From a9c5af3e2ab2bd90a3beae38d26f6be86b2d6bdd Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:33:56 -0300
+Subject: [PATCH 089/120] V4L/DVB (13787): [Mantis] Fix build
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 616f75e1979f5bd1f3241581c720349c2c31f6e7)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dvb.c | 5 ++++-
+ drivers/media/dvb/mantis/mantis_vp1033.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp2040.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp2040.h | 2 +-
+ 4 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index c3a35be..5172e85 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -32,6 +32,8 @@
+ #include "mantis_vp2040.h"
+ #include "mantis_vp3030.h"
+
++DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
++
+ /* Tuner power supply control */
+ void mantis_fe_powerup(struct mantis_pci *mantis)
+ {
+@@ -128,7 +130,8 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ dprintk(verbose, MANTIS_DEBUG, 1, "dvb_register_adapter");
+ if (dvb_register_adapter(&mantis->dvb_adapter,
+ "Mantis dvb adapter", THIS_MODULE,
+- &mantis->pdev->dev) < 0) {
++ &mantis->pdev->dev,
++ adapter_nr) < 0) {
+
+ dprintk(verbose, MANTIS_ERROR, 1, "Error registering adapter");
+ return -ENODEV;
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index daf02c1..797c4e0 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -74,7 +74,7 @@ struct stv0299_config lgtdqcs001f_config = {
+ .invert = 1,
+ // .enhanced_tuning = 0,
+ .skip_reinit = 0,
+- .lock_output = STV0229_LOCKOUTPUT_0,
++// .lock_output = STV0229_LOCKOUTPUT_0,
+ .volt13_op0_op1 = STV0299_VOLT13_OP0,
+ .min_delay_ms = 100,
+ .set_symbol_rate = lgtdqcs001f_set_symbol_rate,
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+index 07da738..f77be7b 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.c
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -30,7 +30,7 @@ struct mantis_hwconfig vp2040_mantis_config = {
+ .ts_size = MANTIS_TS_204,
+ };
+
+-struct tda1002x_config tda10023_cu1216_config = {
++struct tda10023_config tda10023_cu1216_config = {
+ .demod_address = 0x18 >> 1,
+ .invert = 1,
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.h b/drivers/media/dvb/mantis/mantis_vp2040.h
+index 645dade..c745754 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.h
++++ b/drivers/media/dvb/mantis/mantis_vp2040.h
+@@ -29,7 +29,7 @@
+ #define TERRATEC_CINERGY_C_PCI 0x1178
+ #define TECHNISAT_CABLESTAR_HD2 0x0002
+
+-extern struct tda1002x_config tda10023_cu1216_config;
++extern struct tda10023_config tda10023_cu1216_config;
+ extern struct mantis_hwconfig vp2040_mantis_config;
+
+ #endif //__MANTIS_VP2040_H
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0090-V4L-DVB-13788-Mantis-CA-use-a-lock-for-the-relevant-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0090-V4L-DVB-13788-Mantis-CA-use-a-lock-for-the-relevant-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,153 @@
+From 4107aa8cfe04d3f56fbcfd38480286a8a1327c32 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:34:19 -0300
+Subject: [PATCH 090/120] V4L/DVB (13788): [Mantis CA] use a lock for the relevant CI Read/Write operations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit f684336bba673b6656cb98144130ab52dafc3240)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 16 ++++++++++++++++
+ drivers/media/dvb/mantis/mantis_link.h | 2 ++
+ 2 files changed, 18 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 3368253..b1e1aa0 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -92,6 +92,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ u32 hif_addr = 0, data, count = 4;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num);
++ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= MANTIS_HIF_STATUS;
+@@ -104,9 +105,11 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
++ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+ data = mmread(MANTIS_GPIF_DIN);
++ mutex_unlock(&ca->ca_lock);
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mem Read: 0x%02x", data);
+ return (data >> 24) & 0xff;
+ }
+@@ -118,6 +121,7 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ u32 hif_addr = 0;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Write", mantis->num);
++ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+@@ -130,9 +134,11 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+
+ if (mantis_hif_write_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr);
++ mutex_unlock(&ca->ca_lock);
+
+ return 0;
+ }
+@@ -143,6 +149,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ u32 data, hif_addr = 0;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num);
++ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+ hif_addr |= MANTIS_HIF_STATUS;
+@@ -155,11 +162,13 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+ data = mmread(MANTIS_GPIF_DIN);
+ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
+ udelay(50);
++ mutex_unlock(&ca->ca_lock);
+
+ return (u8) data;
+ }
+@@ -170,6 +179,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ u32 hif_addr = 0;
+
+ dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Write", mantis->num);
++ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+@@ -181,9 +191,11 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+
+ if (mantis_hif_write_wait(ca) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+ dprintk(verbose, MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
++ mutex_unlock(&ca->ca_lock);
+ udelay(50);
+
+ return 0;
+@@ -201,6 +213,7 @@ int mantis_hif_init(struct mantis_ca *ca)
+ init_waitqueue_head(&ca->hif_opdone_wq);
+ init_waitqueue_head(&ca->hif_write_wq);
+
++ mutex_lock(&ca->ca_lock);
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+ irqcfg = MANTIS_MASK_BRRDY |
+ MANTIS_MASK_WRACK |
+@@ -210,6 +223,7 @@ int mantis_hif_init(struct mantis_ca *ca)
+ MANTIS_MASK_OVFLW;
+
+ mmwrite(irqcfg, MANTIS_GPIF_IRQCFG);
++ mutex_unlock(&ca->ca_lock);
+
+ return 0;
+ }
+@@ -220,7 +234,9 @@ void mantis_hif_exit(struct mantis_ca *ca)
+ u32 irqcfg;
+
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Exiting Mantis Host Interface", mantis->num);
++ mutex_lock(&ca->ca_lock);
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+ irqcfg &= ~MANTIS_MASK_BRRDY;
+ mmwrite(irqcfg, MANTIS_GPIF_IRQCFG);
++ mutex_unlock(&ca->ca_lock);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index 599ff1b..f9aaaa5 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -21,6 +21,7 @@
+ #ifndef __MANTIS_LINK_H
+ #define __MANTIS_LINK_H
+
++#include <linux/mutex.h>
+ #include <linux/workqueue.h>
+ #include "dvb_ca_en50221.h"
+
+@@ -61,6 +62,7 @@ struct mantis_ca {
+ void *ca_priv;
+
+ struct dvb_ca_en50221 en50221;
++ struct mutex ca_lock;
+ };
+
+ /* CA */
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0091-V4L-DVB-13789-Mantis-CA-Initialize-the-mutex.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0091-V4L-DVB-13789-Mantis-CA-Initialize-the-mutex.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,33 @@
+From 4e784e4246afe710385c324556011f844546fa72 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:34:44 -0300
+Subject: [PATCH 091/120] V4L/DVB (13789): [Mantis CA] Initialize the mutex
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 99b55b2c4478e6370aaa85173f5090a070c50a08)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 177b048..53c01b3 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -156,6 +156,8 @@ int mantis_ca_init(struct mantis_pci *mantis)
+ ca->en50221.poll_slot_status = mantis_slot_status;
+ ca->en50221.data = ca;
+
++ mutex_init(&ca->ca_lock);
++
+ dprintk(verbose, MANTIS_ERROR, 1, "Registering EN50221 device");
+ if ((result = dvb_ca_en50221_init(dvb_adapter, &ca->en50221, ca_flags, 1)) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "EN50221: Initialization failed");
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0092-V4L-DVB-13790-Mantis-Relocate-queue-initialization.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0092-V4L-DVB-13790-Mantis-Relocate-queue-initialization.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,50 @@
+From 5de34a19be663f0499a7c5e2246cb8d55122a983 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:35:07 -0300
+Subject: [PATCH 092/120] V4L/DVB (13790): [Mantis] Relocate queue initialization
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 42f541bfd1a9bad84a288d59a98fdb284df61a45)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ca.c | 4 ++++
+ drivers/media/dvb/mantis/mantis_hif.c | 3 ---
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 53c01b3..7aa27e0 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -158,6 +158,10 @@ int mantis_ca_init(struct mantis_pci *mantis)
+
+ mutex_init(&ca->ca_lock);
+
++ init_waitqueue_head(&ca->hif_data_wq);
++ init_waitqueue_head(&ca->hif_opdone_wq);
++ init_waitqueue_head(&ca->hif_write_wq);
++
+ dprintk(verbose, MANTIS_ERROR, 1, "Registering EN50221 device");
+ if ((result = dvb_ca_en50221_init(dvb_adapter, &ca->en50221, ca_flags, 1)) != 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "EN50221: Initialization failed");
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index b1e1aa0..99a9724 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -209,9 +209,6 @@ int mantis_hif_init(struct mantis_ca *ca)
+
+ slot[0].slave_cfg = 0x70773028;
+ dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
+- init_waitqueue_head(&ca->hif_data_wq);
+- init_waitqueue_head(&ca->hif_opdone_wq);
+- init_waitqueue_head(&ca->hif_write_wq);
+
+ mutex_lock(&ca->ca_lock);
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0093-V4L-DVB-13792-Mantis-VP-2033-Do-not-claim-TDA10023.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0093-V4L-DVB-13792-Mantis-VP-2033-Do-not-claim-TDA10023.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,76 @@
+From 06342162d084a1660160e453a6a8a62440364f83 Mon Sep 17 00:00:00 2001
+From: Niklas Edmundsson <nikke at acc.umu.se>
+Date: Fri, 4 Dec 2009 05:38:52 -0300
+Subject: [PATCH 093/120] V4L/DVB (13792): [Mantis/VP-2033] Do not claim TDA10023
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Do not rely on the PCI ID alone
+
+Signed-off-by: Niklas Edmundsson <nikke at acc.umu.se>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit ec1b6ff1cce9d406a9a5f84a1d1205328f2c515a)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dvb.c | 33 +++++++++++++++++----------------
+ 1 files changed, 17 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 5172e85..de18bb9 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -263,31 +263,32 @@ int __devinit mantis_frontend_init(struct mantis_pci *mantis)
+ }
+ break;
+ case MANTIS_VP_2033_DVB_C: // VP-2033
++ case MANTIS_VP_2040_DVB_C: // VP-2040
++ case TERRATEC_CINERGY_C_PCI:
++ case TECHNISAT_CABLESTAR_HD2:
+ dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- mantis->fe = tda10021_attach(&philips_cu1216_config, &mantis->adapter, read_pwm(mantis));
++ mantis->fe = tda10021_attach(&philips_cu1216_config,
++ &mantis->adapter,
++ read_pwm(mantis));
++
+ if (mantis->fe) {
+- mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
+ dprintk(verbose, MANTIS_ERROR, 1,
+ "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+ philips_cu1216_config.demod_address);
+-
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "Mantis DVB-C Philips CU1216 frontend attach success");
+-
++ } else {
++ mantis->fe = tda10023_attach(&tda10023_cu1216_config,
++ &mantis->adapter,
++ read_pwm(mantis));
++
++ if (mantis->fe) {
++ dprintk(verbose, MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ philips_cu1216_config.demod_address);
++ }
+ }
+- break;
+- case MANTIS_VP_2040_DVB_C: // VP-2040
+- case TERRATEC_CINERGY_C_PCI:
+- case TECHNISAT_CABLESTAR_HD2:
+- dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- mantis->fe = tda10023_attach(&tda10023_cu1216_config, &mantis->adapter, read_pwm(mantis));
+ if (mantis->fe) {
+ mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
+ dprintk(verbose, MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
+- philips_cu1216_config.demod_address);
+-
+- dprintk(verbose, MANTIS_ERROR, 1,
+ "Mantis DVB-C Philips CU1216 frontend attach success");
+ }
+ break;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0094-V4L-DVB-13794-Mantis-VP-3028-Initial-go-at-Serial-in.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0094-V4L-DVB-13794-Mantis-VP-3028-Initial-go-at-Serial-in.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,478 @@
+From 3b3b57c4823e90f07e6fb6cf4df7e7c670aafdbc Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:39:57 -0300
+Subject: [PATCH 094/120] V4L/DVB (13794): [Mantis/VP-3028] Initial go at Serial interface implementation, add support for VP-3028
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit add206368462434ba97e8fe4de98e5d47ffdb0a0)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 2 +
+ drivers/media/dvb/mantis/mantis_common.h | 10 ++
+ drivers/media/dvb/mantis/mantis_core.c | 8 ++
+ drivers/media/dvb/mantis/mantis_pci.c | 2 +
+ drivers/media/dvb/mantis/mantis_uart.c | 139 ++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_uart.h | 25 +++++-
+ drivers/media/dvb/mantis/mantis_vp1033.c | 3 +
+ drivers/media/dvb/mantis/mantis_vp1034.c | 3 +
+ drivers/media/dvb/mantis/mantis_vp1041.c | 3 +
+ drivers/media/dvb/mantis/mantis_vp2033.c | 3 +
+ drivers/media/dvb/mantis/mantis_vp2040.c | 3 +
+ drivers/media/dvb/mantis/mantis_vp3028.c | 38 ++++++++
+ drivers/media/dvb/mantis/mantis_vp3028.h | 13 +++
+ drivers/media/dvb/mantis/mantis_vp3030.c | 3 +
+ 14 files changed, 253 insertions(+), 2 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_uart.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp3028.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_vp3028.h
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index d002ef9..bb88cdc 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -1,4 +1,5 @@
+ mantis-objs = mantis_core.o \
++ mantis_uart.o \
+ mantis_dma.o \
+ mantis_pci.o \
+ mantis_i2c.o \
+@@ -12,6 +13,7 @@ mantis-objs = mantis_core.o \
+ mantis_vp1041.o \
+ mantis_vp2033.o \
+ mantis_vp2040.o \
++ mantis_vp3028.o \
+ mantis_vp3030.o
+
+ obj-$(CONFIG_DVB_MANTIS) += mantis.o
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 6b9f92b..6a02adf 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -26,6 +26,7 @@
+ #include <linux/kernel.h>
+ #include <linux/pci.h>
+ #include <linux/mutex.h>
++#include <linux/workqueue.h>
+
+ #include "dvbdev.h"
+ #include "dvb_demux.h"
+@@ -34,6 +35,7 @@
+ #include "dvb_net.h"
+ #include <linux/i2c.h>
+ #include "mantis_reg.h"
++#include "mantis_uart.h"
+
+ #include "mantis_link.h"
+
+@@ -74,6 +76,10 @@ struct mantis_hwconfig {
+ char *model_name;
+ char *dev_type;
+ u32 ts_size;
++
++ enum mantis_baud baud_rate;
++ enum mantis_parity parity;
++ u32 bytes;
+ };
+
+ struct mantis_pci {
+@@ -142,6 +148,10 @@ struct mantis_pci {
+ u32 gpif_status;
+
+ struct mantis_ca *mantis_ca;
++
++ wait_queue_head_t uart_wq;
++ struct work_struct uart_work;
++ spinlock_t uart_lock;
+ };
+
+ #define MANTIS_HIF_STATUS (mantis->gpio_status)
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index c3d0d53..52b3e9e 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -165,6 +165,10 @@ int mantis_core_init(struct mantis_pci *mantis)
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB init failed");
+ return err;
+ }
++ if ((err = mantis_uart_init(mantis)) < 0) {
++ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis UART init failed");
++ return err;
++ }
+
+ return 0;
+ }
+@@ -173,6 +177,10 @@ int mantis_core_exit(struct mantis_pci *mantis)
+ {
+ mantis_dma_stop(mantis);
+ dprintk(verbose, MANTIS_ERROR, 1, "DMA engine stopping");
++
++ mantis_uart_exit(mantis);
++ dprintk(verbose, MANTIS_ERROR, 1, "UART exit failed");
++
+ if (mantis_dma_exit(mantis) < 0)
+ dprintk(verbose, MANTIS_ERROR, 1, "DMA exit failed");
+ if (mantis_dvb_exit(mantis) < 0)
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 94abcee..d1eac40 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -27,6 +27,7 @@
+ #include <linux/device.h>
+ #include "mantis_common.h"
+ #include "mantis_core.h"
++#include "mantis_uart.h"
+
+ #include <asm/irq.h>
+ #include <linux/signal.h>
+@@ -94,6 +95,7 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+ }
+ if (stat & MANTIS_INT_IRQ1) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
++ schedule_work(&mantis->uart_work);
+ }
+ if (stat & MANTIS_INT_OCERR) {
+ dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
+diff --git a/drivers/media/dvb/mantis/mantis_uart.c b/drivers/media/dvb/mantis/mantis_uart.c
+new file mode 100644
+index 0000000..786fcc3
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_uart.c
+@@ -0,0 +1,139 @@
++#include <linux/spinlock.h>
++#include "mantis_common.h"
++
++struct mantis_uart_params {
++ enum mantis_baud baud_rate;
++ enum mantis_parity parity;
++};
++
++#define UART_MAX_BUF 16
++
++int mantis_uart_read(struct mantis_pci *mantis, u8 *data)
++{
++ struct mantis_hwconfig *config = mantis->hwconfig;
++ u32 stat, i;
++ unsigned long flags;
++
++ /* get data */
++ for (i = 0; i < (config->bytes + 1); i++) {
++
++ if (stat & MANTIS_UART_RXFIFO_FULL) {
++ dprintk(verbose, MANTIS_ERROR, 1, "RX Fifo FULL");
++ }
++ data[i] = mmread(MANTIS_UART_RXD) & 0x3f;
++
++ stat = mmread(MANTIS_UART_STAT);
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Reading ... <%02x>", data[i] & 0x3f);
++
++ if (data[i] & (1 << 7)) {
++ dprintk(verbose, MANTIS_ERROR, 1, "UART framing error");
++ return -EINVAL;
++ }
++ if (data[i] & (1 << 6)) {
++ dprintk(verbose, MANTIS_ERROR, 1, "UART parity error");
++ return -EINVAL;
++ }
++ }
++
++ return 0;
++}
++
++static void mantis_uart_work(struct work_struct *work)
++{
++ struct mantis_pci *mantis = container_of(work, struct mantis_pci, uart_work);
++ struct mantis_hwconfig *config = mantis->hwconfig;
++ u8 buf[16];
++ int i;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "UART read");
++ mantis_uart_read(mantis, buf);
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "UART: ");
++ for (i = 0; i < (config->bytes + 1); i++)
++ dprintk(verbose, MANTIS_DEBUG, 0, "<%02x> ", buf[i]);
++
++ dprintk(verbose, MANTIS_DEBUG, 0, "\n");
++}
++
++static int mantis_uart_setup(struct mantis_pci *mantis,
++ struct mantis_uart_params *params)
++{
++ char* rates[] = { "B_9600", "B_19200", "B_38400", "B_57600", "B_115200" };
++ char* parity[] = { "NONE", "ODD", "EVEN" };
++
++ u32 reg;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Set Parity <%s> Baud Rate <%s>",
++ parity[params->parity],
++ rates[params->baud_rate]);
++
++ mmwrite((mmread(MANTIS_UART_CTL) | (params->parity & 0x3)), MANTIS_UART_CTL);
++
++ reg = mmread(MANTIS_UART_BAUD);
++
++ switch (params->baud_rate) {
++ case MANTIS_BAUD_9600:
++ reg |= 0xd8;
++ break;
++ case MANTIS_BAUD_19200:
++ reg |= 0x6c;
++ break;
++ case MANTIS_BAUD_38400:
++ reg |= 0x36;
++ break;
++ case MANTIS_BAUD_57600:
++ reg |= 0x23;
++ break;
++ case MANTIS_BAUD_115200:
++ reg |= 0x11;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ mmwrite(reg, MANTIS_UART_BAUD);
++
++ return 0;
++}
++
++int mantis_uart_init(struct mantis_pci *mantis)
++{
++ struct mantis_hwconfig *config = mantis->hwconfig;
++ struct mantis_uart_params params;
++
++ dprintk(verbose, MANTIS_DEBUG, 1, "Initializing UART ..");
++ /* default parity: */
++ params.baud_rate = config->baud_rate;
++ params.parity = config->parity;
++
++ init_waitqueue_head(&mantis->uart_wq);
++ spin_lock_init(&mantis->uart_lock);
++
++ INIT_WORK(&mantis->uart_work, mantis_uart_work);
++
++ /* disable interrupt */
++ mmwrite(mmread(MANTIS_UART_CTL) & 0xffef, MANTIS_UART_CTL);
++
++ mantis_uart_setup(mantis, ¶ms);
++
++ /* default 1 byte */
++ mmwrite((mmread(MANTIS_UART_BAUD) | (config->bytes << 8)), MANTIS_UART_BAUD);
++
++ /* flush buffer */
++ mmwrite((mmread(MANTIS_UART_CTL) | MANTIS_UART_RXFLUSH), MANTIS_UART_CTL);
++
++ /* enable interrupt */
++ mmwrite(mmread(MANTIS_INT_MASK) | 0x800, MANTIS_INT_MASK);
++ mmwrite(mmread(MANTIS_UART_CTL) | MANTIS_UART_RXINT, MANTIS_UART_CTL);
++
++ schedule_work(&mantis->uart_work);
++
++ return 0;
++}
++
++void mantis_uart_exit(struct mantis_pci *mantis)
++{
++ /* disable interrupt */
++ mmwrite(mmread(MANTIS_UART_CTL) & 0xffef, MANTIS_UART_CTL);
++}
+diff --git a/drivers/media/dvb/mantis/mantis_uart.h b/drivers/media/dvb/mantis/mantis_uart.h
+index 6113863..e9f938d 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.h
++++ b/drivers/media/dvb/mantis/mantis_uart.h
+@@ -21,6 +21,21 @@
+ #ifndef __MANTIS_UART_H
+ #define __MANTIS_UART_H
+
++#define MANTIS_UART_CTL 0xe0
++#define MANTIS_UART_RXINT (1 << 4)
++#define MANTIS_UART_RXFLUSH (1 << 2)
++
++#define MANTIS_UART_RXD 0xe8
++#define MANTIS_UART_BAUD 0xec
++
++#define MANTIS_UART_STAT 0xf0
++#define MANTIS_UART_RXFIFO_DATA (1 << 7)
++#define MANTIS_UART_RXFIFO_EMPTY (1 << 6)
++#define MANTIS_UART_RXFIFO_FULL (1 << 3)
++#define MANTIS_UART_FRAME_ERR (1 << 2)
++#define MANTIS_UART_PARITY_ERR (1 << 1)
++#define MANTIS_UART_RXTHRESH_INT (1 << 0)
++
+ enum mantis_baud {
+ MANTIS_BAUD_9600 = 0,
+ MANTIS_BAUD_19200,
+@@ -30,9 +45,15 @@ enum mantis_baud {
+ };
+
+ enum mantis_parity {
+- MANTIS_PARITY_NONE = 0,
++ MANTIS_PARITY_UNDEFINED = 0,
+ MANTIS_PARITY_EVEN,
+- MANTIS_PARITY_ODD
++ MANTIS_PARITY_ODD,
++ MANTIS_PARITY_NONE
+ };
+
++struct mantis_pci;
++
++extern int mantis_uart_init(struct mantis_pci *mantis);
++extern void mantis_uart_exit(struct mantis_pci *mantis);
++
+ #endif // __MANTIS_UART_H
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index 797c4e0..64cdfb8 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -88,6 +88,9 @@ struct mantis_hwconfig vp1033_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_204,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
+ };
+
+ int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index a2fe9d4..28f3420 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -33,6 +33,9 @@ struct mantis_hwconfig vp1034_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_204,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
+ };
+
+ int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 8eb1afd..90df80b 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -31,6 +31,9 @@ struct mantis_hwconfig vp1041_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_188,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
+ };
+
+ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 4664d29..1171e69 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -28,6 +28,9 @@ struct mantis_hwconfig vp2033_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_204,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
+ };
+
+ struct tda1002x_config philips_cu1216_config = {
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+index f77be7b..ce73d6b 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.c
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -28,6 +28,9 @@ struct mantis_hwconfig vp2040_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_204,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
+ };
+
+ struct tda10023_config tda10023_cu1216_config = {
+diff --git a/drivers/media/dvb/mantis/mantis_vp3028.c b/drivers/media/dvb/mantis/mantis_vp3028.c
+new file mode 100644
+index 0000000..7f8918c
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp3028.c
+@@ -0,0 +1,38 @@
++/*
++ Mantis VP-3028 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include "mantis_common.h"
++#include "mantis_vp3028.h"
++
++struct zl10353_config mantis_vp3028_config = {
++ .demod_address = 0x0f,
++};
++
++#define MANTIS_MODEL_NAME "VP-3028"
++#define MANTIS_DEV_TYPE "DVB-T"
++
++struct mantis_hwconfig vp3028_mantis_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp3028.h b/drivers/media/dvb/mantis/mantis_vp3028.h
+new file mode 100644
+index 0000000..c51628d
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_vp3028.h
+@@ -0,0 +1,13 @@
++#ifndef __MANTIS_VP3028_H
++#define __MANTIS_VP3028_H
++
++#include "dvb_frontend.h"
++#include "mantis_common.h"
++#include "zl10353.h"
++
++#define MANTIS_VP_3028_DVB_T 0x0028
++
++extern struct zl10353_config mantis_vp3028_config;
++extern struct mantis_hwconfig vp3028_mantis_config;
++
++#endif /* __MANTIS_VP3028_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index cab092c..9ca8040 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -32,6 +32,9 @@ struct mantis_hwconfig vp3030_mantis_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_188,
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
+ };
+
+ int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0095-V4L-DVB-13795-Mantis-Hopper-Code-overhaul-add-Hopper.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0095-V4L-DVB-13795-Mantis-Hopper-Code-overhaul-add-Hopper.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,3999 @@
+From b58bb2ada8e7d16c2929fe05f40511269b0c9656 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:41:11 -0300
+Subject: [PATCH 095/120] V4L/DVB (13795): [Mantis/Hopper] Code overhaul, add Hopper devices into the PCI ID list
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit b3b961448f702339444036f94252ff2ba7a99feb)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Kconfig | 22 ++-
+ drivers/media/dvb/mantis/Makefile | 42 ++--
+ drivers/media/dvb/mantis/hopper_cards.c | 260 +++++++++++++++++++++
+ drivers/media/dvb/mantis/hopper_vp3028.c | 76 ++++++
+ drivers/media/dvb/mantis/hopper_vp3028.h | 10 +
+ drivers/media/dvb/mantis/mantis_ca.c | 69 ++++--
+ drivers/media/dvb/mantis/mantis_ca.h | 7 +
+ drivers/media/dvb/mantis/mantis_cards.c | 279 +++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_common.h | 68 +++---
+ drivers/media/dvb/mantis/mantis_dma.c | 55 +++--
+ drivers/media/dvb/mantis/mantis_dma.h | 10 +
+ drivers/media/dvb/mantis/mantis_dvb.c | 364 +++++++++++++-----------------
+ drivers/media/dvb/mantis/mantis_dvb.h | 15 ++
+ drivers/media/dvb/mantis/mantis_evm.c | 38 ++-
+ drivers/media/dvb/mantis/mantis_hif.c | 60 ++++--
+ drivers/media/dvb/mantis/mantis_hif.h | 2 +-
+ drivers/media/dvb/mantis/mantis_i2c.c | 75 ++++---
+ drivers/media/dvb/mantis/mantis_i2c.h | 7 +
+ drivers/media/dvb/mantis/mantis_ioc.c | 145 ++++++++++++
+ drivers/media/dvb/mantis/mantis_link.h | 3 +-
+ drivers/media/dvb/mantis/mantis_pci.c | 310 ++++++++-----------------
+ drivers/media/dvb/mantis/mantis_pci.h | 7 +
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 22 ++-
+ drivers/media/dvb/mantis/mantis_reg.h | 40 +++-
+ drivers/media/dvb/mantis/mantis_uart.c | 37 +++-
+ drivers/media/dvb/mantis/mantis_uart.h | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1033.c | 98 ++++++---
+ drivers/media/dvb/mantis/mantis_vp1033.h | 13 +-
+ drivers/media/dvb/mantis/mantis_vp1034.c | 66 +++++--
+ drivers/media/dvb/mantis/mantis_vp1034.h | 6 +-
+ drivers/media/dvb/mantis/mantis_vp1041.c | 79 ++++++-
+ drivers/media/dvb/mantis/mantis_vp1041.h | 14 +-
+ drivers/media/dvb/mantis/mantis_vp2033.c | 95 +++++++--
+ drivers/media/dvb/mantis/mantis_vp2033.h | 11 +-
+ drivers/media/dvb/mantis/mantis_vp2040.c | 141 +++++++++++-
+ drivers/media/dvb/mantis/mantis_vp2040.h | 11 +-
+ drivers/media/dvb/mantis/mantis_vp3030.c | 49 ++++-
+ drivers/media/dvb/mantis/mantis_vp3030.h | 8 +-
+ 38 files changed, 1881 insertions(+), 735 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/hopper_cards.c
+ create mode 100644 drivers/media/dvb/mantis/hopper_vp3028.c
+ create mode 100644 drivers/media/dvb/mantis/hopper_vp3028.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_ca.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_cards.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_dma.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_dvb.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_i2c.h
+ create mode 100644 drivers/media/dvb/mantis/mantis_ioc.c
+ create mode 100644 drivers/media/dvb/mantis/mantis_pci.h
+
+diff --git a/drivers/media/dvb/mantis/Kconfig b/drivers/media/dvb/mantis/Kconfig
+index 4ba16d0..aaf0250 100644
+--- a/drivers/media/dvb/mantis/Kconfig
++++ b/drivers/media/dvb/mantis/Kconfig
+@@ -1,6 +1,15 @@
++config MANTIS_CORE
++ tristate "Mantis/Hopper PCI bridge based devices"
++ depends on PCI && I2C
++
++ help
++ Support for PCI cards based on the Mantis and Hopper PCi bridge.
++
++ Say Y if you own such a device and want to use it.
++
+ config DVB_MANTIS
+ tristate "MANTIS based cards"
+- depends on DVB_CORE && PCI && I2C
++ depends on MANTIS_CORE && DVB_CORE && PCI && I2C
+ select DVB_MB86A16
+ select DVB_CU1216
+ select DVB_ZL10353
+@@ -11,3 +20,14 @@ config DVB_MANTIS
+ Say Y when you have a Mantis based DVB card and want to use it.
+
+ If unsure say N.
++
++config DVB_HOPPER
++ tristate "HOPPER based cards"
++ depends on MANTIS_CORE && DVB_CORE && PCI && I2C
++ select DVB_ZL10353
++ select DVB_PLL
++ help
++ Support for PCI cards based on the Hopper PCI bridge.
++ Say Y when you have a Hopper based DVB card and want to use it.
++
++ If unsure say N
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index bb88cdc..399c901 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -1,21 +1,27 @@
+-mantis-objs = mantis_core.o \
+- mantis_uart.o \
+- mantis_dma.o \
+- mantis_pci.o \
+- mantis_i2c.o \
+- mantis_dvb.o \
+- mantis_evm.o \
+- mantis_hif.o \
+- mantis_ca.o \
+- mantis_pcmcia.o \
+- mantis_vp1033.o \
+- mantis_vp1034.o \
+- mantis_vp1041.o \
+- mantis_vp2033.o \
+- mantis_vp2040.o \
+- mantis_vp3028.o \
+- mantis_vp3030.o
++mantis_core-objs := mantis_ioc.o \
++ mantis_uart.o \
++ mantis_dma.o \
++ mantis_pci.o \
++ mantis_i2c.o \
++ mantis_dvb.o \
++ mantis_evm.o \
++ mantis_hif.o \
++ mantis_ca.o \
++ mantis_pcmcia.o
+
+-obj-$(CONFIG_DVB_MANTIS) += mantis.o
++mantis-objs := mantis_cards.o \
++ mantis_vp1033.o \
++ mantis_vp1034.o \
++ mantis_vp1041.o \
++ mantis_vp2033.o \
++ mantis_vp2040.o \
++ mantis_vp3030.o
++
++hopper-objs := hopper_cards.o \
++ hopper_vp3028.o
++
++obj-$(CONFIG_MANTIS_CORE) += mantis_core.o
++obj-$(CONFIG_DVB_MANTIS) += mantis.o
++obj-$(CONFIG_DVB_HOPPER) += hopper.o
+
+ EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ -Idrivers/media/dvb/frontends/
+diff --git a/drivers/media/dvb/mantis/hopper_cards.c b/drivers/media/dvb/mantis/hopper_cards.c
+new file mode 100644
+index 0000000..749e3f3
+--- /dev/null
++++ b/drivers/media/dvb/mantis/hopper_cards.c
+@@ -0,0 +1,260 @@
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/pci.h>
++#include <asm/irq.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "mantis_common.h"
++#include "hopper_vp3028.h"
++#include "mantis_dma.h"
++#include "mantis_dvb.h"
++#include "mantis_uart.h"
++#include "mantis_ioc.h"
++#include "mantis_pci.h"
++#include "mantis_i2c.h"
++#include "mantis_reg.h"
++
++static unsigned int verbose;
++module_param(verbose, int, 0644);
++MODULE_PARM_DESC(verbose, "verbose startup messages, default is 1 (yes)");
++
++#define DRIVER_NAME "Hopper"
++
++static char *label[10] = {
++ "DMA",
++ "IRQ-0",
++ "IRQ-1",
++ "OCERR",
++ "PABRT",
++ "RIPRR",
++ "PPERR",
++ "FTRGT",
++ "RISCI",
++ "RACK"
++};
++
++static int devs;
++
++static irqreturn_t hopper_irq_handler(int irq, void *dev_id)
++{
++ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
++ u32 rst_stat = 0, rst_mask = 0;
++
++ struct mantis_pci *mantis;
++ struct mantis_ca *ca;
++
++ mantis = (struct mantis_pci *) dev_id;
++ if (unlikely(mantis == NULL)) {
++ dprintk(MANTIS_ERROR, 1, "Mantis == NULL");
++ return IRQ_NONE;
++ }
++ ca = mantis->mantis_ca;
++
++ stat = mmread(MANTIS_INT_STAT);
++ mask = mmread(MANTIS_INT_MASK);
++ mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
++ if (!(stat & mask))
++ return IRQ_NONE;
++
++ rst_mask = MANTIS_GPIF_WRACK |
++ MANTIS_GPIF_OTHERR |
++ MANTIS_SBUF_WSTO |
++ MANTIS_GPIF_EXTIRQ;
++
++ rst_stat = mmread(MANTIS_GPIF_STATUS);
++ rst_stat &= rst_mask;
++ mmwrite(rst_stat, MANTIS_GPIF_STATUS);
++
++ mantis->mantis_int_stat = stat;
++ mantis->mantis_int_mask = mask;
++ dprintk(MANTIS_DEBUG, 0, "\n-- Stat=<%02x> Mask=<%02x> --", stat, mask);
++ if (stat & MANTIS_INT_RISCEN) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[0]);
++ }
++ if (stat & MANTIS_INT_IRQ0) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[1]);
++ mantis->gpif_status = rst_stat;
++ wake_up(&ca->hif_write_wq);
++ schedule_work(&ca->hif_evm_work);
++ }
++ if (stat & MANTIS_INT_IRQ1) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[2]);
++ schedule_work(&mantis->uart_work);
++ }
++ if (stat & MANTIS_INT_OCERR) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[3]);
++ }
++ if (stat & MANTIS_INT_PABORT) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[4]);
++ }
++ if (stat & MANTIS_INT_RIPERR) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[5]);
++ }
++ if (stat & MANTIS_INT_PPERR) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[6]);
++ }
++ if (stat & MANTIS_INT_FTRGT) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[7]);
++ }
++ if (stat & MANTIS_INT_RISCI) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[8]);
++ mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
++ tasklet_schedule(&mantis->tasklet);
++ }
++ if (stat & MANTIS_INT_I2CDONE) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[9]);
++ wake_up(&mantis->i2c_wq);
++ }
++ mmwrite(stat, MANTIS_INT_STAT);
++ stat &= ~(MANTIS_INT_RISCEN | MANTIS_INT_I2CDONE |
++ MANTIS_INT_I2CRACK | MANTIS_INT_PCMCIA7 |
++ MANTIS_INT_PCMCIA6 | MANTIS_INT_PCMCIA5 |
++ MANTIS_INT_PCMCIA4 | MANTIS_INT_PCMCIA3 |
++ MANTIS_INT_PCMCIA2 | MANTIS_INT_PCMCIA1 |
++ MANTIS_INT_PCMCIA0 | MANTIS_INT_IRQ1 |
++ MANTIS_INT_IRQ0 | MANTIS_INT_OCERR |
++ MANTIS_INT_PABORT | MANTIS_INT_RIPERR |
++ MANTIS_INT_PPERR | MANTIS_INT_FTRGT |
++ MANTIS_INT_RISCI);
++
++ if (stat)
++ dprintk(MANTIS_DEBUG, 0, "<Unknown> Stat=<%02x> Mask=<%02x>", stat, mask);
++
++ dprintk(MANTIS_DEBUG, 0, "\n");
++ return IRQ_HANDLED;
++}
++
++static int __devinit hopper_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
++{
++ struct mantis_pci *mantis;
++ struct mantis_hwconfig *config;
++ int err = 0;
++
++ mantis = kzalloc(sizeof (struct mantis_pci), GFP_KERNEL);
++ if (mantis == NULL) {
++ printk(KERN_ERR "%s ERROR: Out of memory\n", __func__);
++ err = -ENOMEM;
++ goto fail0;
++ }
++
++ mantis->num = devs;
++ mantis->verbose = verbose;
++ mantis->pdev = pdev;
++ config = (struct mantis_hwconfig *) pci_id->driver_data;
++ config->irq_handler = &hopper_irq_handler;
++ mantis->hwconfig = config;
++
++ err = mantis_pci_init(mantis);
++ if (err) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis PCI initialization failed <%d>", err);
++ goto fail1;
++ }
++
++ err = mantis_stream_control(mantis, STREAM_TO_HIF);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis stream control failed <%d>", err);
++ goto fail1;
++ }
++
++ err = mantis_i2c_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis I2C initialization failed <%d>", err);
++ goto fail2;
++ }
++
++ err = mantis_get_mac(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis MAC address read failed <%d>", err);
++ goto fail2;
++ }
++
++ err = mantis_dma_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA initialization failed <%d>", err);
++ goto fail3;
++ }
++
++ err = mantis_dvb_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB initialization failed <%d>", err);
++ goto fail4;
++ }
++ devs++;
++
++ return err;
++
++fail5:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB exit! <%d>", err);
++ mantis_dvb_exit(mantis);
++
++fail4:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA exit! <%d>", err);
++ mantis_dma_exit(mantis);
++
++fail3:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis I2C exit! <%d>", err);
++ mantis_i2c_exit(mantis);
++
++fail2:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis PCI exit! <%d>", err);
++ mantis_pci_exit(mantis);
++
++fail1:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis free! <%d>", err);
++ kfree(mantis);
++
++fail0:
++ return err;
++}
++
++static void __devexit hopper_pci_remove(struct pci_dev *pdev)
++{
++ struct mantis_pci *mantis = pci_get_drvdata(pdev);
++
++ if (mantis) {
++// mantis_uart_exit(mantis);
++ mantis_dvb_exit(mantis);
++ mantis_dma_exit(mantis);
++ mantis_i2c_exit(mantis);
++ mantis_pci_exit(mantis);
++ kfree(mantis);
++ }
++ return;
++
++}
++
++static struct pci_device_id hopper_pci_table[] = {
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_3028_DVB_T, &vp3028_config),
++ { }
++};
++
++static struct pci_driver hopper_pci_driver = {
++ .name = DRIVER_NAME,
++ .id_table = hopper_pci_table,
++ .probe = hopper_pci_probe,
++ .remove = hopper_pci_remove,
++};
++
++static int __devinit hopper_init(void)
++{
++ return pci_register_driver(&hopper_pci_driver);
++}
++
++static void __devexit hopper_exit(void)
++{
++ return pci_unregister_driver(&hopper_pci_driver);
++}
++
++module_init(hopper_init);
++module_exit(hopper_exit);
++
++MODULE_DESCRIPTION("HOPPER driver");
++MODULE_AUTHOR("Manu Abraham");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/media/dvb/mantis/hopper_vp3028.c b/drivers/media/dvb/mantis/hopper_vp3028.c
+new file mode 100644
+index 0000000..ba0c7e5
+--- /dev/null
++++ b/drivers/media/dvb/mantis/hopper_vp3028.c
+@@ -0,0 +1,76 @@
++/*
++ Mantis VP-3028 driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "zl10353.h"
++#include "mantis_common.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
++#include "hopper_vp3028.h"
++
++struct zl10353_config hopper_vp3028_config = {
++ .demod_address = 0x0f,
++};
++
++#define MANTIS_MODEL_NAME "VP-3028"
++#define MANTIS_DEV_TYPE "DVB-T"
++
++static int vp3028_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++ int err = 0;
++
++ err = mantis_frontend_power(mantis, POWER_ON);
++ mantis_frontend_soft_reset(mantis);
++
++ dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
++ fe = zl10353_attach(&hopper_vp3028_config, adapter);
++
++ if (!fe)
++ return -1;
++
++ dprintk(MANTIS_ERROR, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp3028_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
++
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++
++ .frontend_init = vp3028_frontend_init,
++ .power = GPIF_A00,
++ .reset = GPIF_A03,
++};
+diff --git a/drivers/media/dvb/mantis/hopper_vp3028.h b/drivers/media/dvb/mantis/hopper_vp3028.h
+new file mode 100644
+index 0000000..e8a3c22
+--- /dev/null
++++ b/drivers/media/dvb/mantis/hopper_vp3028.h
+@@ -0,0 +1,10 @@
++#ifndef __MANTIS_VP3028_H
++#define __MANTIS_VP3028_H
++
++#include "mantis_common.h"
++
++#define MANTIS_VP_3028_DVB_T 0x0028
++
++extern struct mantis_hwconfig vp3028_config;
++
++#endif /* __MANTIS_VP3028_H */
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 7aa27e0..4151cba 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -18,16 +18,30 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
+ #include "mantis_link.h"
+ #include "mantis_hif.h"
++#include "mantis_reg.h"
++
++#include "mantis_ca.h"
+
+ static int mantis_ca_read_attr_mem(struct dvb_ca_en50221 *en50221, int slot, int addr)
+ {
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request Attribute Mem Read", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Request Attribute Mem Read", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -40,7 +54,7 @@ static int mantis_ca_write_attr_mem(struct dvb_ca_en50221 *en50221, int slot, in
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request Attribute Mem Write", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Request Attribute Mem Write", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -53,7 +67,7 @@ static int mantis_ca_read_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8 a
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request CAM control Read", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Request CAM control Read", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -66,7 +80,7 @@ static int mantis_ca_write_cam_ctl(struct dvb_ca_en50221 *en50221, int slot, u8
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Request CAM control Write", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Request CAM control Write", slot);
+
+ if (slot != 0)
+ return -EINVAL;
+@@ -79,7 +93,7 @@ static int mantis_ca_slot_reset(struct dvb_ca_en50221 *en50221, int slot)
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Slot RESET", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Slot RESET", slot);
+ udelay(500); /* Wait.. */
+ mmwrite(0xda, MANTIS_PCMCIA_RESET); /* Leading edge assert */
+ udelay(500);
+@@ -95,7 +109,7 @@ static int mantis_ca_slot_shutdown(struct dvb_ca_en50221 *en50221, int slot)
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Slot shutdown", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Slot shutdown", slot);
+
+ return 0;
+ }
+@@ -105,8 +119,8 @@ static int mantis_ts_control(struct dvb_ca_en50221 *en50221, int slot)
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): TS control", slot);
+- mantis_set_direction(mantis, 1); /* Enable TS through CAM */
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): TS control", slot);
++// mantis_set_direction(mantis, 1); /* Enable TS through CAM */
+
+ return 0;
+ }
+@@ -116,13 +130,13 @@ static int mantis_slot_status(struct dvb_ca_en50221 *en50221, int slot, int open
+ struct mantis_ca *ca = en50221->data;
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Slot(%d): Poll Slot status", slot);
++ dprintk(MANTIS_DEBUG, 1, "Slot(%d): Poll Slot status", slot);
+
+ if (ca->slot_state == MODULE_INSERTED) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "CA Module present and ready");
++ dprintk(MANTIS_DEBUG, 1, "CA Module present and ready");
+ return DVB_CA_EN50221_POLL_CAM_PRESENT | DVB_CA_EN50221_POLL_CAM_READY;
+ } else {
+- dprintk(verbose, MANTIS_DEBUG, 1, "CA Module not present or not ready");
++ dprintk(MANTIS_DEBUG, 1, "CA Module not present or not ready");
+ }
+
+ return 0;
+@@ -130,20 +144,21 @@ static int mantis_slot_status(struct dvb_ca_en50221 *en50221, int slot, int open
+
+ int mantis_ca_init(struct mantis_pci *mantis)
+ {
+- struct dvb_adapter *dvb_adapter = &mantis->dvb_adapter;
++ struct dvb_adapter *dvb_adapter = &mantis->dvb_adapter;
+ struct mantis_ca *ca;
+ int ca_flags = 0, result;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Initializing Mantis CA");
+- if (!(ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL))) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Out of memory!, exiting ..");
++ dprintk(MANTIS_DEBUG, 1, "Initializing Mantis CA");
++ ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL);
++ if (!ca) {
++ dprintk(MANTIS_ERROR, 1, "Out of memory!, exiting ..");
+ result = -ENOMEM;
+ goto err;
+ }
+
+- ca->ca_priv = mantis;
+- mantis->mantis_ca = ca;
+- ca_flags = DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE;
++ ca->ca_priv = mantis;
++ mantis->mantis_ca = ca;
++ ca_flags = DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE;
+ /* register CA interface */
+ ca->en50221.owner = THIS_MODULE;
+ ca->en50221.read_attribute_mem = mantis_ca_read_attr_mem;
+@@ -162,28 +177,32 @@ int mantis_ca_init(struct mantis_pci *mantis)
+ init_waitqueue_head(&ca->hif_opdone_wq);
+ init_waitqueue_head(&ca->hif_write_wq);
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Registering EN50221 device");
+- if ((result = dvb_ca_en50221_init(dvb_adapter, &ca->en50221, ca_flags, 1)) != 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "EN50221: Initialization failed");
++ dprintk(MANTIS_ERROR, 1, "Registering EN50221 device");
++ result = dvb_ca_en50221_init(dvb_adapter, &ca->en50221, ca_flags, 1);
++ if (result != 0) {
++ dprintk(MANTIS_ERROR, 1, "EN50221: Initialization failed <%d>", result);
+ goto err;
+ }
+- dprintk(verbose, MANTIS_ERROR, 1, "Registered EN50221 device");
++ dprintk(MANTIS_ERROR, 1, "Registered EN50221 device");
+ mantis_evmgr_init(ca);
+ return 0;
+ err:
+ kfree(ca);
+ return result;
+ }
++EXPORT_SYMBOL_GPL(mantis_ca_init);
+
+ void mantis_ca_exit(struct mantis_pci *mantis)
+ {
+ struct mantis_ca *ca = mantis->mantis_ca;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis CA exit");
++ dprintk(MANTIS_DEBUG, 1, "Mantis CA exit");
+
+ mantis_evmgr_exit(ca);
+- dprintk(verbose, MANTIS_ERROR, 1, "Unregistering EN50221 device");
+- dvb_ca_en50221_release(&ca->en50221);
++ dprintk(MANTIS_ERROR, 1, "Unregistering EN50221 device");
++ if (ca)
++ dvb_ca_en50221_release(&ca->en50221);
+
+ kfree(ca);
+ }
++EXPORT_SYMBOL_GPL(mantis_ca_exit);
+diff --git a/drivers/media/dvb/mantis/mantis_ca.h b/drivers/media/dvb/mantis/mantis_ca.h
+new file mode 100644
+index 0000000..b7e48ee
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_ca.h
+@@ -0,0 +1,7 @@
++#ifndef __MANTIS_CA_H
++#define __MANTIS_CA_H
++
++extern int mantis_ca_init(struct mantis_pci *mantis);
++extern void mantis_ca_exit(struct mantis_pci *mantis);
++
++#endif /* __MANTIS_CA_H */
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+new file mode 100644
+index 0000000..d486c7f
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -0,0 +1,279 @@
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/pci.h>
++#include <asm/irq.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "mantis_common.h"
++
++#include "mantis_vp1033.h"
++#include "mantis_vp1034.h"
++#include "mantis_vp1041.h"
++#include "mantis_vp2033.h"
++#include "mantis_vp2040.h"
++#include "mantis_vp3030.h"
++
++#include "mantis_dma.h"
++#include "mantis_ca.h"
++#include "mantis_dvb.h"
++#include "mantis_uart.h"
++#include "mantis_ioc.h"
++#include "mantis_pci.h"
++#include "mantis_i2c.h"
++#include "mantis_reg.h"
++
++static unsigned int verbose;
++module_param(verbose, int, 0644);
++MODULE_PARM_DESC(verbose, "verbose startup messages, default is 1 (yes)");
++
++static int devs;
++
++#define DRIVER_NAME "Mantis"
++
++static char *label[10] = {
++ "DMA",
++ "IRQ-0",
++ "IRQ-1",
++ "OCERR",
++ "PABRT",
++ "RIPRR",
++ "PPERR",
++ "FTRGT",
++ "RISCI",
++ "RACK"
++};
++
++
++static irqreturn_t mantis_irq_handler(int irq, void *dev_id)
++{
++ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
++ u32 rst_stat = 0, rst_mask = 0;
++
++ struct mantis_pci *mantis;
++ struct mantis_ca *ca;
++
++ mantis = (struct mantis_pci *) dev_id;
++ if (unlikely(mantis == NULL)) {
++ dprintk(MANTIS_ERROR, 1, "Mantis == NULL");
++ return IRQ_NONE;
++ }
++ ca = mantis->mantis_ca;
++
++ stat = mmread(MANTIS_INT_STAT);
++ mask = mmread(MANTIS_INT_MASK);
++ mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
++ if (!(stat & mask))
++ return IRQ_NONE;
++
++ rst_mask = MANTIS_GPIF_WRACK |
++ MANTIS_GPIF_OTHERR |
++ MANTIS_SBUF_WSTO |
++ MANTIS_GPIF_EXTIRQ;
++
++ rst_stat = mmread(MANTIS_GPIF_STATUS);
++ rst_stat &= rst_mask;
++ mmwrite(rst_stat, MANTIS_GPIF_STATUS);
++
++ mantis->mantis_int_stat = stat;
++ mantis->mantis_int_mask = mask;
++ dprintk(MANTIS_DEBUG, 0, "\n-- Stat=<%02x> Mask=<%02x> --", stat, mask);
++ if (stat & MANTIS_INT_RISCEN) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[0]);
++ }
++ if (stat & MANTIS_INT_IRQ0) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[1]);
++ mantis->gpif_status = rst_stat;
++ wake_up(&ca->hif_write_wq);
++ schedule_work(&ca->hif_evm_work);
++ }
++ if (stat & MANTIS_INT_IRQ1) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[2]);
++ schedule_work(&mantis->uart_work);
++ }
++ if (stat & MANTIS_INT_OCERR) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[3]);
++ }
++ if (stat & MANTIS_INT_PABORT) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[4]);
++ }
++ if (stat & MANTIS_INT_RIPERR) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[5]);
++ }
++ if (stat & MANTIS_INT_PPERR) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[6]);
++ }
++ if (stat & MANTIS_INT_FTRGT) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[7]);
++ }
++ if (stat & MANTIS_INT_RISCI) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[8]);
++ mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
++ tasklet_schedule(&mantis->tasklet);
++ }
++ if (stat & MANTIS_INT_I2CDONE) {
++ dprintk(MANTIS_DEBUG, 0, "<%s>", label[9]);
++ wake_up(&mantis->i2c_wq);
++ }
++ mmwrite(stat, MANTIS_INT_STAT);
++ stat &= ~(MANTIS_INT_RISCEN | MANTIS_INT_I2CDONE |
++ MANTIS_INT_I2CRACK | MANTIS_INT_PCMCIA7 |
++ MANTIS_INT_PCMCIA6 | MANTIS_INT_PCMCIA5 |
++ MANTIS_INT_PCMCIA4 | MANTIS_INT_PCMCIA3 |
++ MANTIS_INT_PCMCIA2 | MANTIS_INT_PCMCIA1 |
++ MANTIS_INT_PCMCIA0 | MANTIS_INT_IRQ1 |
++ MANTIS_INT_IRQ0 | MANTIS_INT_OCERR |
++ MANTIS_INT_PABORT | MANTIS_INT_RIPERR |
++ MANTIS_INT_PPERR | MANTIS_INT_FTRGT |
++ MANTIS_INT_RISCI);
++
++ if (stat)
++ dprintk(MANTIS_DEBUG, 0, "<Unknown> Stat=<%02x> Mask=<%02x>", stat, mask);
++
++ dprintk(MANTIS_DEBUG, 0, "\n");
++ return IRQ_HANDLED;
++}
++
++static int __devinit mantis_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
++{
++ struct mantis_pci *mantis;
++ struct mantis_hwconfig *config;
++ int err = 0;
++
++ mantis = kzalloc(sizeof (struct mantis_pci), GFP_KERNEL);
++ if (mantis == NULL) {
++ printk(KERN_ERR "%s ERROR: Out of memory\n", __func__);
++ err = -ENOMEM;
++ goto fail0;
++ }
++
++ mantis->num = devs;
++ mantis->verbose = verbose;
++ mantis->pdev = pdev;
++ config = (struct mantis_hwconfig *) pci_id->driver_data;
++ config->irq_handler = &mantis_irq_handler;
++ mantis->hwconfig = config;
++
++ err = mantis_pci_init(mantis);
++ if (err) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis PCI initialization failed <%d>", err);
++ goto fail1;
++ }
++
++ err = mantis_stream_control(mantis, STREAM_TO_HIF);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis stream control failed <%d>", err);
++ goto fail1;
++ }
++
++ err = mantis_i2c_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis I2C initialization failed <%d>", err);
++ goto fail2;
++ }
++
++ err = mantis_get_mac(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis MAC address read failed <%d>", err);
++ goto fail2;
++ }
++
++ err = mantis_dma_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA initialization failed <%d>", err);
++ goto fail3;
++ }
++
++ err = mantis_dvb_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB initialization failed <%d>", err);
++ goto fail4;
++ }
++ devs++;
++
++ return err;
++
++fail5:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB exit! <%d>", err);
++ mantis_dvb_exit(mantis);
++
++fail4:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA exit! <%d>", err);
++ mantis_dma_exit(mantis);
++
++fail3:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis I2C exit! <%d>", err);
++ mantis_i2c_exit(mantis);
++
++fail2:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis PCI exit! <%d>", err);
++ mantis_pci_exit(mantis);
++
++fail1:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis free! <%d>", err);
++ kfree(mantis);
++
++fail0:
++ return err;
++}
++
++static void __devexit mantis_pci_remove(struct pci_dev *pdev)
++{
++ struct mantis_pci *mantis = pci_get_drvdata(pdev);
++
++ if (mantis) {
++ mantis_uart_exit(mantis);
++// mantis_ca_exit(mantis);
++ mantis_dvb_exit(mantis);
++ mantis_dma_exit(mantis);
++ mantis_i2c_exit(mantis);
++ mantis_pci_exit(mantis);
++ kfree(mantis);
++ }
++ return;
++}
++
++static struct pci_device_id mantis_pci_table[] = {
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_1033_DVB_S, &vp1033_config),
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_1034_DVB_S, &vp1034_config),
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_1041_DVB_S2, &vp1041_config),
++ MAKE_ENTRY(TECHNISAT, SKYSTAR_HD2_10, &vp1041_config),
++ MAKE_ENTRY(TECHNISAT, SKYSTAR_HD2_20, &vp1041_config),
++ MAKE_ENTRY(TERRATEC, CINERGY_S2_PCI_HD, &vp1041_config),
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_2033_DVB_C, &vp2033_config),
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_2040_DVB_C, &vp2040_config),
++ MAKE_ENTRY(TECHNISAT, CABLESTAR_HD2, &vp2040_config),
++ MAKE_ENTRY(TERRATEC, CINERGY_C, &vp2033_config),
++ MAKE_ENTRY(TWINHAN_TECHNOLOGIES, MANTIS_VP_3030_DVB_T, &vp3030_config),
++ { }
++};
++
++static struct pci_driver mantis_pci_driver = {
++ .name = DRIVER_NAME,
++ .id_table = mantis_pci_table,
++ .probe = mantis_pci_probe,
++ .remove = mantis_pci_remove,
++};
++
++static int __devinit mantis_init(void)
++{
++ return pci_register_driver(&mantis_pci_driver);
++}
++
++static void __devexit mantis_exit(void)
++{
++ return pci_unregister_driver(&mantis_pci_driver);
++}
++
++module_init(mantis_init);
++module_exit(mantis_exit);
++
++MODULE_DESCRIPTION("MANTIS driver");
++MODULE_AUTHOR("Manu Abraham");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 6a02adf..e912c59 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -21,20 +21,9 @@
+ #ifndef __MANTIS_COMMON_H
+ #define __MANTIS_COMMON_H
+
+-#include <linux/module.h>
+-#include <linux/moduleparam.h>
+-#include <linux/kernel.h>
+-#include <linux/pci.h>
+ #include <linux/mutex.h>
+ #include <linux/workqueue.h>
+
+-#include "dvbdev.h"
+-#include "dvb_demux.h"
+-#include "dmxdev.h"
+-#include "dvb_frontend.h"
+-#include "dvb_net.h"
+-#include <linux/i2c.h>
+-#include "mantis_reg.h"
+ #include "mantis_uart.h"
+
+ #include "mantis_link.h"
+@@ -44,18 +33,18 @@
+ #define MANTIS_INFO 2
+ #define MANTIS_DEBUG 3
+
+-#define dprintk(x, y, z, format, arg...) do { \
++#define dprintk(y, z, format, arg...) do { \
+ if (z) { \
+- if ((x > MANTIS_ERROR) && (x > y)) \
++ if ((mantis->verbose > MANTIS_ERROR) && (mantis->verbose > y)) \
+ printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
+- else if ((x > MANTIS_NOTICE) && (x > y)) \
++ else if ((mantis->verbose > MANTIS_NOTICE) && (mantis->verbose > y)) \
+ printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
+- else if ((x > MANTIS_INFO) && (x > y)) \
++ else if ((mantis->verbose > MANTIS_INFO) && (mantis->verbose > y)) \
+ printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
+- else if ((x > MANTIS_DEBUG) && (x > y)) \
++ else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y)) \
+ printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
+ } else { \
+- if (x > y) \
++ if (mantis->verbose > y) \
+ printk(format , ##arg); \
+ } \
+ } while(0)
+@@ -63,8 +52,8 @@
+ #define mwrite(dat, addr) writel((dat), addr)
+ #define mread(addr) readl(addr)
+
+-#define mmwrite(dat, addr) mwrite((dat), (mantis->mantis_mmio + (addr)))
+-#define mmread(addr) mread(mantis->mantis_mmio + (addr))
++#define mmwrite(dat, addr) mwrite((dat), (mantis->mmio + (addr)))
++#define mmread(addr) mread(mantis->mmio + (addr))
+ #define mmand(dat, addr) mmwrite((dat) & mmread(addr), addr)
+ #define mmor(dat, addr) mmwrite((dat) | mmread(addr), addr)
+ #define mmaor(dat, addr) mmwrite((dat) | ((mask) & mmread(addr)), addr)
+@@ -72,6 +61,22 @@
+ #define MANTIS_TS_188 0
+ #define MANTIS_TS_204 1
+
++#define TWINHAN_TECHNOLOGIES 0x1822
++#define MANTIS 0x4e35
++
++#define TECHNISAT 0x1ae4
++#define TERRATEC 0x153b
++
++#define MAKE_ENTRY(__subven, __subdev, __configptr) { \
++ .vendor = TWINHAN_TECHNOLOGIES, \
++ .device = MANTIS, \
++ .subvendor = (__subven), \
++ .subdevice = (__subdev), \
++ .driver_data = (unsigned long) (__configptr) \
++}
++
++struct mantis_pci;
++
+ struct mantis_hwconfig {
+ char *model_name;
+ char *dev_type;
+@@ -80,6 +85,12 @@ struct mantis_hwconfig {
+ enum mantis_baud baud_rate;
+ enum mantis_parity parity;
+ u32 bytes;
++
++ irqreturn_t (*irq_handler)(int irq, void *dev_id);
++ int (*frontend_init)(struct mantis_pci *mantis, struct dvb_frontend *fe);
++
++ u8 power;
++ u8 reset;
+ };
+
+ struct mantis_pci {
+@@ -96,7 +107,7 @@ struct mantis_pci {
+ struct pci_dev *pdev;
+
+ unsigned long mantis_addr;
+- volatile void __iomem *mantis_mmio;
++ void __iomem *mmio;
+
+ u8 irq;
+ u8 revision;
+@@ -156,19 +167,4 @@ struct mantis_pci {
+
+ #define MANTIS_HIF_STATUS (mantis->gpio_status)
+
+-extern unsigned int verbose;
+-extern unsigned int devs;
+-extern unsigned int i2c;
+-extern int mantis_dvb_init(struct mantis_pci *mantis);
+-extern int mantis_frontend_init(struct mantis_pci *mantis);
+-extern int mantis_dvb_exit(struct mantis_pci *mantis);
+-extern void mantis_dma_xfer(unsigned long data);
+-extern void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value);
+-
+-extern void mantis_set_direction(struct mantis_pci *mantis, int direction);
+-
+-extern int mantis_ca_init(struct mantis_pci *mantis);
+-extern void mantis_ca_exit(struct mantis_pci *mantis);
+-
+-
+-#endif //__MANTIS_COMMON_H
++#endif /* __MANTIS_COMMON_H */
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index d15a1eb..8ebcd96 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -18,9 +18,25 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <linux/kernel.h>
+ #include <asm/page.h>
+ #include <linux/vmalloc.h>
++#include <linux/pci.h>
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
++#include "mantis_reg.h"
++#include "mantis_dma.h"
+
+ #define RISC_WRITE (0x01 << 28)
+ #define RISC_JUMP (0x07 << 28)
+@@ -38,7 +54,7 @@
+ int mantis_dma_exit(struct mantis_pci *mantis)
+ {
+ if (mantis->buf_cpu) {
+- dprintk(verbose, MANTIS_ERROR, 1,
++ dprintk(MANTIS_ERROR, 1,
+ "DMA=0x%lx cpu=0x%p size=%d",
+ (unsigned long) mantis->buf_dma,
+ mantis->buf_cpu,
+@@ -50,7 +66,7 @@ int mantis_dma_exit(struct mantis_pci *mantis)
+ mantis->buf_cpu = NULL;
+ }
+ if (mantis->risc_cpu) {
+- dprintk(verbose, MANTIS_ERROR, 1,
++ dprintk(MANTIS_ERROR, 1,
+ "RISC=0x%lx cpu=0x%p size=%lx",
+ (unsigned long) mantis->risc_dma,
+ mantis->risc_cpu,
+@@ -64,6 +80,7 @@ int mantis_dma_exit(struct mantis_pci *mantis)
+
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(mantis_dma_exit);
+
+ static inline int mantis_alloc_buffers(struct mantis_pci *mantis)
+ {
+@@ -72,12 +89,12 @@ static inline int mantis_alloc_buffers(struct mantis_pci *mantis)
+ MANTIS_BUF_SIZE,
+ &mantis->buf_dma);
+ if (!mantis->buf_cpu) {
+- dprintk(verbose, MANTIS_ERROR, 1,
++ dprintk(MANTIS_ERROR, 1,
+ "DMA buffer allocation failed");
+
+ goto err;
+ }
+- dprintk(verbose, MANTIS_ERROR, 1,
++ dprintk(MANTIS_ERROR, 1,
+ "DMA=0x%lx cpu=0x%p size=%d",
+ (unsigned long) mantis->buf_dma,
+ mantis->buf_cpu, MANTIS_BUF_SIZE);
+@@ -88,14 +105,14 @@ static inline int mantis_alloc_buffers(struct mantis_pci *mantis)
+ &mantis->risc_dma);
+
+ if (!mantis->risc_cpu) {
+- dprintk(verbose, MANTIS_ERROR, 1,
++ dprintk(MANTIS_ERROR, 1,
+ "RISC program allocation failed");
+
+ mantis_dma_exit(mantis);
+
+ goto err;
+ }
+- dprintk(verbose, MANTIS_ERROR, 1,
++ dprintk(MANTIS_ERROR, 1,
+ "RISC=0x%lx cpu=0x%p size=%lx",
+ (unsigned long) mantis->risc_dma,
+ mantis->risc_cpu, MANTIS_RISC_SIZE);
+@@ -103,7 +120,7 @@ static inline int mantis_alloc_buffers(struct mantis_pci *mantis)
+
+ return 0;
+ err:
+- dprintk(verbose, MANTIS_ERROR, 1, "Out of memory (?) .....");
++ dprintk(MANTIS_ERROR, 1, "Out of memory (?) .....");
+ return -ENOMEM;
+ }
+
+@@ -117,12 +134,11 @@ static inline int mantis_calc_lines(struct mantis_pci *mantis)
+ mantis->line_count <<= 1;
+ }
+
+- dprintk(verbose, MANTIS_DEBUG, 1,
+- "Mantis RISC block bytes=[%d], line bytes=[%d], line count=[%d]",
++ dprintk(MANTIS_DEBUG, 1, "Mantis RISC block bytes=[%d], line bytes=[%d], line count=[%d]",
+ MANTIS_BLOCK_BYTES, mantis->line_bytes, mantis->line_count);
+
+ if (mantis->line_count > 255) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Buffer size error");
++ dprintk(MANTIS_ERROR, 1, "Buffer size error");
+ return -EINVAL;
+ }
+
+@@ -133,9 +149,9 @@ int mantis_dma_init(struct mantis_pci *mantis)
+ {
+ int err = 0;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DMA init");
++ dprintk(MANTIS_DEBUG, 1, "Mantis DMA init");
+ if (mantis_alloc_buffers(mantis) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Error allocating DMA buffer");
++ dprintk(MANTIS_ERROR, 1, "Error allocating DMA buffer");
+
+ // Stop RISC Engine
+ // mmwrite(mmread(MANTIS_DMA_CTL) & ~MANTIS_RISC_EN, MANTIS_DMA_CTL);
+@@ -144,7 +160,7 @@ int mantis_dma_init(struct mantis_pci *mantis)
+ goto err;
+ }
+ if ((err = mantis_calc_lines(mantis)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis calc lines failed");
++ dprintk(MANTIS_ERROR, 1, "Mantis calc lines failed");
+
+ goto err;
+ }
+@@ -153,20 +169,21 @@ int mantis_dma_init(struct mantis_pci *mantis)
+ err:
+ return err;
+ }
++EXPORT_SYMBOL_GPL(mantis_dma_init);
+
+ static inline void mantis_risc_program(struct mantis_pci *mantis)
+ {
+ u32 buf_pos = 0;
+ u32 line;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis create RISC program");
++ dprintk(MANTIS_DEBUG, 1, "Mantis create RISC program");
+ RISC_FLUSH();
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "risc len lines %u, bytes per line %u",
++ dprintk(MANTIS_DEBUG, 1, "risc len lines %u, bytes per line %u",
+ mantis->line_count, mantis->line_bytes);
+
+ for (line = 0; line < mantis->line_count; line++) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "RISC PROG line=[%d]", line);
++ dprintk(MANTIS_DEBUG, 1, "RISC PROG line=[%d]", line);
+ if (!(buf_pos % MANTIS_BLOCK_BYTES)) {
+ RISC_INSTR(RISC_WRITE |
+ RISC_IRQ |
+@@ -186,7 +203,7 @@ static inline void mantis_risc_program(struct mantis_pci *mantis)
+
+ void mantis_dma_start(struct mantis_pci *mantis)
+ {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Start DMA engine");
++ dprintk(MANTIS_DEBUG, 1, "Mantis Start DMA engine");
+
+ mantis_risc_program(mantis);
+ mmwrite(mantis->risc_dma, MANTIS_RISC_START);
+@@ -208,7 +225,7 @@ void mantis_dma_stop(struct mantis_pci *mantis)
+
+ stat = mmread(MANTIS_INT_STAT);
+ mask = mmread(MANTIS_INT_MASK);
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Stop DMA engine");
++ dprintk(MANTIS_DEBUG, 1, "Mantis Stop DMA engine");
+
+ mmwrite((mmread(MANTIS_GPIF_ADDR) & (~(MANTIS_GPIF_HIFRDWRN))), MANTIS_GPIF_ADDR);
+
+@@ -229,7 +246,7 @@ void mantis_dma_xfer(unsigned long data)
+ struct mantis_hwconfig *config = mantis->hwconfig;
+
+ while (mantis->last_block != mantis->finished_block) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "last block=[%d] finished block=[%d]",
++ dprintk(MANTIS_DEBUG, 1, "last block=[%d] finished block=[%d]",
+ mantis->last_block, mantis->finished_block);
+
+ (config->ts_size ? dvb_dmx_swfilter_204: dvb_dmx_swfilter)
+diff --git a/drivers/media/dvb/mantis/mantis_dma.h b/drivers/media/dvb/mantis/mantis_dma.h
+new file mode 100644
+index 0000000..4cba876
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_dma.h
+@@ -0,0 +1,10 @@
++#ifndef __MANTIS_DMA_H
++#define __MANTIS_DMA_H
++
++extern int mantis_dma_init(struct mantis_pci *mantis);
++extern int mantis_dma_exit(struct mantis_pci *mantis);
++extern void mantis_dma_start(struct mantis_pci *mantis);
++extern void mantis_dma_stop(struct mantis_pci *mantis);
++extern void mantis_dma_xfer(unsigned long data);
++
++#endif /* __MANTIS_DMA_H */
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index de18bb9..be911d7 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -17,65 +17,86 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <linux/kernel.h>
+ #include <linux/bitops.h>
+-#include "mantis_common.h"
+-#include "mantis_core.h"
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++#include <linux/pci.h>
++#include <linux/i2c.h>
+
+ #include "dmxdev.h"
+ #include "dvbdev.h"
+ #include "dvb_demux.h"
+ #include "dvb_frontend.h"
+-#include "mantis_vp1033.h"
+-#include "mantis_vp1034.h"
+-#include "mantis_vp1041.h"
+-#include "mantis_vp2033.h"
+-#include "mantis_vp2040.h"
+-#include "mantis_vp3030.h"
++#include "dvb_net.h"
+
+-DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
++#include "mantis_common.h"
++#include "mantis_dma.h"
++#include "mantis_ca.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
+
+-/* Tuner power supply control */
+-void mantis_fe_powerup(struct mantis_pci *mantis)
+-{
+- dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Power ON");
+- gpio_set_bits(mantis, 0x0c, 1);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 0x0c, 1);
+- msleep_interruptible(100);
+-}
++DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
+
+-void mantis_fe_powerdown(struct mantis_pci *mantis)
++int mantis_frontend_power(struct mantis_pci *mantis, enum mantis_power power)
+ {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Power OFF");
+- gpio_set_bits(mantis, 0x0c, 0);
+-}
++ struct mantis_hwconfig *config = mantis->hwconfig;
++
++ switch (power) {
++ case POWER_ON:
++ dprintk(MANTIS_DEBUG, 1, "Power ON");
++ gpio_set_bits(mantis, config->power, POWER_ON);
++ msleep(100);
++ gpio_set_bits(mantis, config->power, POWER_ON);
++ msleep(100);
++ break;
+
+-static int mantis_fe_reset(struct dvb_frontend *fe)
+-{
+- struct mantis_pci *mantis = fe->dvb->priv;
++ case POWER_OFF:
++ dprintk(MANTIS_DEBUG, 1, "Power OFF");
++ gpio_set_bits(mantis, config->power, POWER_OFF);
++ msleep(100);
++ break;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Reset");
+- gpio_set_bits(mantis, 13, 0);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 13, 0);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 13, 1);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 13, 1);
++ default:
++ dprintk(MANTIS_DEBUG, 1, "Unknown state <%02x>", power);
++ return -1;
++ }
+
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(mantis_frontend_power);
+
+-static int mantis_frontend_reset(struct mantis_pci *mantis)
++void mantis_frontend_soft_reset(struct mantis_pci *mantis)
+ {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Frontend Reset");
+- gpio_set_bits(mantis, 13, 0);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 13, 0);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 13, 1);
+- msleep_interruptible(100);
+- gpio_set_bits(mantis, 13, 1);
++ struct mantis_hwconfig *config = mantis->hwconfig;
++
++ dprintk(MANTIS_DEBUG, 1, "Frontend RESET");
++ gpio_set_bits(mantis, config->reset, 0);
++ msleep(100);
++ gpio_set_bits(mantis, config->reset, 0);
++ msleep(100);
++ gpio_set_bits(mantis, config->reset, 1);
++ msleep(100);
++ gpio_set_bits(mantis, config->reset, 1);
++ msleep(100);
++
++ return;
++}
++EXPORT_SYMBOL_GPL(mantis_frontend_soft_reset);
++
++static int mantis_frontend_shutdown(struct mantis_pci *mantis)
++{
++ int err;
++
++ mantis_frontend_soft_reset(mantis);
++ err = mantis_frontend_power(mantis, POWER_OFF);
++ if (err != 0) {
++ dprintk(MANTIS_ERROR, 1, "Frontend POWER OFF failed! <%d>", err);
++ return 1;
++ }
+
+ return 0;
+ }
+@@ -85,18 +106,17 @@ static int mantis_dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+ struct mantis_pci *mantis = dvbdmx->priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB Start feed");
++ dprintk(MANTIS_DEBUG, 1, "Mantis DVB Start feed");
+ if (!dvbdmx->dmx.frontend) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "no frontend ?");
++ dprintk(MANTIS_DEBUG, 1, "no frontend ?");
+ return -EINVAL;
+ }
++
+ mantis->feeds++;
+- dprintk(verbose, MANTIS_DEBUG, 1,
+- "mantis start feed, feeds=%d",
+- mantis->feeds);
++ dprintk(MANTIS_DEBUG, 1, "mantis start feed, feeds=%d", mantis->feeds);
+
+ if (mantis->feeds == 1) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "mantis start feed & dma");
++ dprintk(MANTIS_DEBUG, 1, "mantis start feed & dma");
+ printk("mantis start feed & dma\n");
+ mantis_dma_start(mantis);
+ }
+@@ -109,95 +129,129 @@ static int mantis_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
+ struct dvb_demux *dvbdmx = dvbdmxfeed->demux;
+ struct mantis_pci *mantis = dvbdmx->priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB Stop feed");
++ dprintk(MANTIS_DEBUG, 1, "Mantis DVB Stop feed");
+ if (!dvbdmx->dmx.frontend) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "no frontend ?");
++ dprintk(MANTIS_DEBUG, 1, "no frontend ?");
+ return -EINVAL;
+ }
++
+ mantis->feeds--;
+ if (mantis->feeds == 0) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "mantis stop feed and dma");
++ dprintk(MANTIS_DEBUG, 1, "mantis stop feed and dma");
+ printk("mantis stop feed and dma\n");
+ mantis_dma_stop(mantis);
+ }
++
+ return 0;
+ }
+
+ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ {
+- int result;
++ struct mantis_hwconfig *config = mantis->hwconfig;
++ int result = -1;
++
++ dprintk(MANTIS_DEBUG, 1, "dvb_register_adapter");
++
++ result = dvb_register_adapter(&mantis->dvb_adapter,
++ "Mantis DVB adapter",
++ THIS_MODULE,
++ &mantis->pdev->dev,
++ adapter_nr);
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "dvb_register_adapter");
+- if (dvb_register_adapter(&mantis->dvb_adapter,
+- "Mantis dvb adapter", THIS_MODULE,
+- &mantis->pdev->dev,
+- adapter_nr) < 0) {
++ if (result < 0) {
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Error registering adapter");
++ dprintk(MANTIS_ERROR, 1, "Error registering adapter");
+ return -ENODEV;
+ }
+- mantis->dvb_adapter.priv = mantis;
+- mantis->demux.dmx.capabilities = DMX_TS_FILTERING |
++
++ mantis->dvb_adapter.priv = mantis;
++ mantis->demux.dmx.capabilities = DMX_TS_FILTERING |
+ DMX_SECTION_FILTERING |
+ DMX_MEMORY_BASED_FILTERING;
+
+- mantis->demux.priv = mantis;
+- mantis->demux.filternum = 256;
+- mantis->demux.feednum = 256;
+- mantis->demux.start_feed = mantis_dvb_start_feed;
+- mantis->demux.stop_feed = mantis_dvb_stop_feed;
+- mantis->demux.write_to_decoder = NULL;
+- dprintk(verbose, MANTIS_DEBUG, 1, "dvb_dmx_init");
+- if ((result = dvb_dmx_init(&mantis->demux)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "dvb_dmx_init failed, ERROR=%d", result);
++ mantis->demux.priv = mantis;
++ mantis->demux.filternum = 256;
++ mantis->demux.feednum = 256;
++ mantis->demux.start_feed = mantis_dvb_start_feed;
++ mantis->demux.stop_feed = mantis_dvb_stop_feed;
++ mantis->demux.write_to_decoder = NULL;
++
++ dprintk(MANTIS_DEBUG, 1, "dvb_dmx_init");
++ result = dvb_dmx_init(&mantis->demux);
++ if (result < 0) {
++ dprintk(MANTIS_ERROR, 1, "dvb_dmx_init failed, ERROR=%d", result);
+
+ goto err0;
+ }
+- mantis->dmxdev.filternum = 256;
+- mantis->dmxdev.demux = &mantis->demux.dmx;
+- mantis->dmxdev.capabilities = 0;
+- dprintk(verbose, MANTIS_DEBUG, 1, "dvb_dmxdev_init");
+- if ((result = dvb_dmxdev_init(&mantis->dmxdev,
+- &mantis->dvb_adapter)) < 0) {
+-
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "dvb_dmxdev_init failed, ERROR=%d", result);
++
++ mantis->dmxdev.filternum = 256;
++ mantis->dmxdev.demux = &mantis->demux.dmx;
++ mantis->dmxdev.capabilities = 0;
++ dprintk(MANTIS_DEBUG, 1, "dvb_dmxdev_init");
++
++ result = dvb_dmxdev_init(&mantis->dmxdev, &mantis->dvb_adapter);
++ if (result < 0) {
++
++ dprintk(MANTIS_ERROR, 1, "dvb_dmxdev_init failed, ERROR=%d", result);
+ goto err1;
+ }
+- mantis->fe_hw.source = DMX_FRONTEND_0;
+- if ((result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx,
+- &mantis->fe_hw)) < 0) {
+
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "dvb_dmx_init failed, ERROR=%d", result);
++ mantis->fe_hw.source = DMX_FRONTEND_0;
++ result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx, &mantis->fe_hw);
++ if (result < 0) {
+
++ dprintk(MANTIS_ERROR, 1, "dvb_dmx_init failed, ERROR=%d", result);
+ goto err2;
+ }
+- mantis->fe_mem.source = DMX_MEMORY_FE;
+- if ((result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx,
+- &mantis->fe_mem)) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "dvb_dmx_init failed, ERROR=%d", result);
+
++ mantis->fe_mem.source = DMX_MEMORY_FE;
++ result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx,&mantis->fe_mem);
++ if (result < 0) {
++ dprintk(MANTIS_ERROR, 1,"dvb_dmx_init failed, ERROR=%d", result);
+ goto err3;
+ }
+- if ((result = mantis->demux.dmx.connect_frontend(&mantis->demux.dmx,
+- &mantis->fe_hw)) < 0) {
+-
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "dvb_dmx_init failed, ERROR=%d", result);
+
++ result = mantis->demux.dmx.connect_frontend(&mantis->demux.dmx, &mantis->fe_hw);
++ if (result < 0) {
++ dprintk(MANTIS_ERROR, 1, "dvb_dmx_init failed, ERROR=%d", result);
+ goto err4;
+ }
++
+ dvb_net_init(&mantis->dvb_adapter, &mantis->dvbnet, &mantis->demux.dmx);
+ tasklet_init(&mantis->tasklet, mantis_dma_xfer, (unsigned long) mantis);
+- mantis_frontend_init(mantis);
+- mantis_ca_init(mantis);
++ if (mantis->hwconfig) {
++ result = config->frontend_init(mantis, mantis->fe);
++ if (result < 0) {
++ dprintk(MANTIS_ERROR, 1, "!!! NO Frontends found !!!");
++ goto err5;
++ } else {
++// if (mantis->dvb_adapter == NULL) {
++// dprintk(MANTIS_ERROR, 1, "DVB adapter <NULL>");
++// goto err5;
++// }
++ if (mantis->fe == NULL) {
++ dprintk(MANTIS_ERROR, 1, "FE <NULL>");
++ goto err5;
++ }
++
++ if (dvb_register_frontend(&mantis->dvb_adapter, mantis->fe)) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Frontend registration failed");
++
++ if (mantis->fe->ops.release)
++ mantis->fe->ops.release(mantis->fe);
++
++ mantis->fe = NULL;
++ goto err5;
++ }
++ }
++ }
+
+ return 0;
+
+- /* Error conditions .. */
++ /* Error conditions .. */
++err5:
++ tasklet_kill(&mantis->tasklet);
++ dvb_net_release(&mantis->dvbnet);
+ err4:
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
+ err3:
+@@ -211,115 +265,17 @@ err0:
+
+ return result;
+ }
++EXPORT_SYMBOL_GPL(mantis_dvb_init);
+
+-int __devinit mantis_frontend_init(struct mantis_pci *mantis)
++int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+ {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis frontend Init");
+- mantis_fe_powerup(mantis);
+- mantis_frontend_reset(mantis);
+- dprintk(verbose, MANTIS_DEBUG, 1, "Device ID=%02x", mantis->subsystem_device);
+- switch (mantis->subsystem_device) {
+- case MANTIS_VP_1033_DVB_S: // VP-1033
+- dprintk(verbose, MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
+- mantis->fe = stv0299_attach(&lgtdqcs001f_config,
+- &mantis->adapter);
+-
+- if (mantis->fe) {
+- mantis->fe->ops.tuner_ops.set_params = lgtdqcs001f_tuner_set;
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "found STV0299 DVB-S frontend @ 0x%02x",
+- lgtdqcs001f_config.demod_address);
+-
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "Mantis DVB-S STV0299 frontend attach success");
+- }
+- break;
+- case MANTIS_VP_1034_DVB_S: // VP-1034
+- dprintk(verbose, MANTIS_ERROR, 1, "Probing for MB86A16 (DVB-S/DSS)");
+- mantis->fe = mb86a16_attach(&vp1034_config, &mantis->adapter);
+- if (mantis->fe) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "found MB86A16 DVB-S/DSS frontend @0x%02x",
+- vp1034_config.demod_address);
++ int err;
+
+- }
+- break;
+- case MANTIS_VP_1041_DVB_S2:
+- case TECHNISAT_SKYSTAR_HD2:
+- mantis->fe = stb0899_attach(&vp1041_config, &mantis->adapter);
+- if (mantis->fe) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "found STB0899 DVB-S/DVB-S2 frontend @0x%02x",
+- vp1041_config.demod_address);
+-
+- if (stb6100_attach(mantis->fe, &vp1041_stb6100_config, &mantis->adapter)) {
+- if (!lnbp21_attach(mantis->fe, &mantis->adapter, 0, 0)) {
+- printk("%s: No LNBP21 found!\n", __FUNCTION__);
+- mantis->fe = NULL;
+- }
+- } else {
+- mantis->fe = NULL;
+- }
+- }
+- break;
+- case MANTIS_VP_2033_DVB_C: // VP-2033
+- case MANTIS_VP_2040_DVB_C: // VP-2040
+- case TERRATEC_CINERGY_C_PCI:
+- case TECHNISAT_CABLESTAR_HD2:
+- dprintk(verbose, MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- mantis->fe = tda10021_attach(&philips_cu1216_config,
+- &mantis->adapter,
+- read_pwm(mantis));
+-
+- if (mantis->fe) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+- philips_cu1216_config.demod_address);
+- } else {
+- mantis->fe = tda10023_attach(&tda10023_cu1216_config,
+- &mantis->adapter,
+- read_pwm(mantis));
+-
+- if (mantis->fe) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
+- philips_cu1216_config.demod_address);
+- }
+- }
+- if (mantis->fe) {
+- mantis->fe->ops.tuner_ops.set_params = philips_cu1216_tuner_set;
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "Mantis DVB-C Philips CU1216 frontend attach success");
+- }
+- break;
+- default:
+- dprintk(verbose, MANTIS_DEBUG, 1, "Unknown frontend:[0x%02x]",
+- mantis->sub_device_id);
++ err = mantis_frontend_shutdown(mantis);
++ if (err != 0)
++ dprintk(MANTIS_ERROR, 1, "Frontend exit while POWER ON! <%d>", err);
+
+- return -ENODEV;
+- }
+- if (mantis->fe == NULL) {
+- dprintk(verbose, MANTIS_ERROR, 1, "!!! NO Frontends found !!!");
+- return -ENODEV;
+- } else {
+- if (dvb_register_frontend(&mantis->dvb_adapter, mantis->fe)) {
+- dprintk(verbose, MANTIS_ERROR, 1,
+- "ERROR: Frontend registration failed");
+-
+- if (mantis->fe->ops.release)
+- mantis->fe->ops.release(mantis->fe);
+-
+- mantis->fe = NULL;
+- return -ENODEV;
+- }
+- }
+-
+- return 0;
+-}
+-
+-int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+-{
+- mantis_ca_exit(mantis);
++// mantis_ca_exit(mantis);
+ tasklet_kill(&mantis->tasklet);
+ dvb_net_release(&mantis->dvbnet);
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
+@@ -329,8 +285,10 @@ int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+
+ if (mantis->fe)
+ dvb_unregister_frontend(mantis->fe);
+- dprintk(verbose, MANTIS_DEBUG, 1, "dvb_unregister_adapter");
++
++ dprintk(MANTIS_DEBUG, 1, "dvb_unregister_adapter");
+ dvb_unregister_adapter(&mantis->dvb_adapter);
+
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(mantis_dvb_exit);
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.h b/drivers/media/dvb/mantis/mantis_dvb.h
+new file mode 100644
+index 0000000..31ebbb4
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_dvb.h
+@@ -0,0 +1,15 @@
++#ifndef __MANTIS_DVB_H
++#define __MANTIS_DVB_H
++
++enum mantis_power {
++ POWER_OFF = 0,
++ POWER_ON = 1
++};
++
++extern int mantis_frontend_power(struct mantis_pci *mantis, enum mantis_power power);
++extern void mantis_frontend_soft_reset(struct mantis_pci *mantis);
++
++extern int mantis_dvb_init(struct mantis_pci *mantis);
++extern int mantis_dvb_exit(struct mantis_pci *mantis);
++
++#endif /* __MANTIS_DVB_H */
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 9be55f7..2005b24 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -18,9 +18,23 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <linux/kernel.h>
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
+ #include "mantis_link.h"
+ #include "mantis_hif.h"
++#include "mantis_reg.h"
+
+ static void mantis_hifevm_work(struct work_struct *work)
+ {
+@@ -34,7 +48,7 @@ static void mantis_hifevm_work(struct work_struct *work)
+
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+ if (gpif_stat & MANTIS_CARD_PLUGIN) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+ mantis_event_cam_plugin(ca);
+ dvb_ca_en50221_camchange_irq(&ca->en50221,
+@@ -43,7 +57,7 @@ static void mantis_hifevm_work(struct work_struct *work)
+ }
+ } else {
+ if (gpif_stat & MANTIS_CARD_PLUGOUT) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Unplug", mantis->num);
+ mmwrite(0xdada0000, MANTIS_CARD_RESET);
+ mantis_event_cam_unplug(ca);
+ dvb_ca_en50221_camchange_irq(&ca->en50221,
+@@ -53,28 +67,28 @@ static void mantis_hifevm_work(struct work_struct *work)
+ }
+
+ if (mantis->gpif_status & MANTIS_GPIF_EXTIRQ)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
+
+ if (mantis->gpif_status & MANTIS_SBUF_WSTO)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
+
+ if (mantis->gpif_status & MANTIS_GPIF_OTHERR)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_OVFLW)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Overflow", mantis->num);
+
+ if (gpif_stat & MANTIS_GPIF_BRRDY)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
+
+ if (gpif_stat & MANTIS_GPIF_INTSTAT)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): GPIF IRQ", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): GPIF IRQ", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_EMPTY)
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Empty", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Empty", mantis->num);
+
+ if (gpif_stat & MANTIS_SBUF_OPDONE) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer operation complete", mantis->num);
+ ca->sbuf_status = MANTIS_SBUF_DATA_AVAIL;
+ ca->hif_event = MANTIS_SBUF_OPDONE;
+ wake_up(&ca->hif_opdone_wq);
+@@ -85,7 +99,7 @@ int mantis_evmgr_init(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
++ dprintk(MANTIS_DEBUG, 1, "Initializing Mantis Host I/F Event manager");
+ INIT_WORK(&ca->hif_evm_work, mantis_hifevm_work);
+ mantis_pcmcia_init(ca);
+ schedule_work(&ca->hif_evm_work);
+@@ -97,7 +111,7 @@ void mantis_evmgr_exit(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
++ dprintk(MANTIS_DEBUG, 1, "Mantis Host I/F Event manager exiting");
+ flush_scheduled_work();
+ mantis_hif_exit(ca);
+ mantis_pcmcia_exit(ca);
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 99a9724..bb05427 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -18,10 +18,28 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <linux/kernel.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
++
+ #include "mantis_hif.h"
+ #include "mantis_link.h" /* temporary due to physical layer stuff */
+
++#include "mantis_reg.h"
++
+ static int mantis_hif_data_available(struct mantis_ca *ca)
+ {
+ struct mantis_pci *mantis = ca->ca_priv;
+@@ -31,7 +49,7 @@ static int mantis_hif_data_available(struct mantis_ca *ca)
+ ca->sbuf_status & MANTIS_SBUF_DATA_AVAIL,
+ msecs_to_jiffies(500)) == -ERESTARTSYS) {
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Read wait event timeout !", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Read wait event timeout !", mantis->num);
+ rc = -EREMOTEIO;
+ }
+ ca->sbuf_status &= ~MANTIS_SBUF_DATA_AVAIL;
+@@ -48,10 +66,10 @@ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ ca->hif_event & MANTIS_SBUF_OPDONE,
+ msecs_to_jiffies(500)) == -ERESTARTSYS) {
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Smart buffer operation timeout !", mantis->num);
+ rc = -EREMOTEIO;
+ }
+- dprintk(verbose, MANTIS_DEBUG, 1, "Smart Buffer Operation complete");
++ dprintk(MANTIS_DEBUG, 1, "Smart Buffer Operation complete");
+ ca->hif_event &= ~MANTIS_SBUF_OPDONE;
+ return rc;
+ }
+@@ -66,22 +84,22 @@ static int mantis_hif_write_wait(struct mantis_ca *ca)
+ mantis->gpif_status & MANTIS_GPIF_WRACK,
+ msecs_to_jiffies(500)) == -ERESTARTSYS) {
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Write ACK timed out !", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): Write ACK timed out !", mantis->num);
+ rc = -EREMOTEIO;
+ }
+- dprintk(verbose, MANTIS_DEBUG, 1, "Write Acknowledged");
++ dprintk(MANTIS_DEBUG, 1, "Write Acknowledged");
+ mantis->gpif_status &= ~MANTIS_GPIF_WRACK;
+ while (!opdone) {
+ opdone = (mmread(MANTIS_GPIF_STATUS) & MANTIS_SBUF_OPDONE);
+ udelay(500);
+ timeout++;
+ if (timeout > 100) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Adater(%d) Slot(0): Write operation timed out!", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adater(%d) Slot(0): Write operation timed out!", mantis->num);
+ rc = -ETIMEDOUT;
+ break;
+ }
+ }
+- dprintk(verbose, MANTIS_DEBUG, 1, "HIF Write success");
++ dprintk(MANTIS_DEBUG, 1, "HIF Write success");
+ return rc;
+ }
+
+@@ -91,7 +109,7 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0, data, count = 4;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Read", mantis->num);
+ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAIOM;
+@@ -104,13 +122,13 @@ int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr)
+ mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): GPIF Smart Buffer operation failed", mantis->num);
+ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+ data = mmread(MANTIS_GPIF_DIN);
+ mutex_unlock(&ca->ca_lock);
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mem Read: 0x%02x", data);
++ dprintk(MANTIS_DEBUG, 1, "Mem Read: 0x%02x", data);
+ return (data >> 24) & 0xff;
+ }
+
+@@ -120,7 +138,7 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Write", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF Mem Write", mantis->num);
+ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+@@ -133,11 +151,11 @@ int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data)
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+ if (mantis_hif_write_wait(ca) != 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+- dprintk(verbose, MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr);
++ dprintk(MANTIS_DEBUG, 1, "Mem Write: (0x%02x to 0x%02x)", data, addr);
+ mutex_unlock(&ca->ca_lock);
+
+ return 0;
+@@ -148,7 +166,7 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 data, hif_addr = 0;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Read", mantis->num);
+ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr |= MANTIS_GPIF_PCMCIAIOM;
+@@ -161,12 +179,12 @@ int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr)
+ mmwrite(hif_addr | MANTIS_GPIF_HIFRDWRN, MANTIS_GPIF_ADDR);
+
+ if (mantis_hif_sbuf_opdone_wait(ca) != 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+ data = mmread(MANTIS_GPIF_DIN);
+- dprintk(verbose, MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
++ dprintk(MANTIS_DEBUG, 1, "I/O Read: 0x%02x", data);
+ udelay(50);
+ mutex_unlock(&ca->ca_lock);
+
+@@ -178,7 +196,7 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 hif_addr = 0;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Write", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Adapter(%d) Slot(0): Request HIF I/O Write", mantis->num);
+ mutex_lock(&ca->ca_lock);
+ hif_addr &= ~MANTIS_GPIF_PCMCIAREG;
+ hif_addr &= ~MANTIS_GPIF_HIFRDWRN;
+@@ -190,11 +208,11 @@ int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data)
+ mmwrite(data, MANTIS_GPIF_DOUT);
+
+ if (mantis_hif_write_wait(ca) != 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Smart Buffer operation failed", mantis->num);
+ mutex_unlock(&ca->ca_lock);
+ return -EREMOTEIO;
+ }
+- dprintk(verbose, MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
++ dprintk(MANTIS_DEBUG, 1, "I/O Write: (0x%02x to 0x%02x)", data, addr);
+ mutex_unlock(&ca->ca_lock);
+ udelay(50);
+
+@@ -208,7 +226,7 @@ int mantis_hif_init(struct mantis_ca *ca)
+ u32 irqcfg;
+
+ slot[0].slave_cfg = 0x70773028;
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Initializing Mantis Host Interface", mantis->num);
+
+ mutex_lock(&ca->ca_lock);
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+@@ -230,7 +248,7 @@ void mantis_hif_exit(struct mantis_ca *ca)
+ struct mantis_pci *mantis = ca->ca_priv;
+ u32 irqcfg;
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Adapter(%d) Exiting Mantis Host Interface", mantis->num);
++ dprintk(MANTIS_ERROR, 1, "Adapter(%d) Exiting Mantis Host Interface", mantis->num);
+ mutex_lock(&ca->ca_lock);
+ irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+ irqcfg &= ~MANTIS_MASK_BRRDY;
+diff --git a/drivers/media/dvb/mantis/mantis_hif.h b/drivers/media/dvb/mantis/mantis_hif.h
+index 7ef45ce..f960c0a 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.h
++++ b/drivers/media/dvb/mantis/mantis_hif.h
+@@ -26,4 +26,4 @@
+ #define MANTIS_HIF_IOMRD 3
+ #define MANTIS_HIF_IOMWR 4
+
+-#endif // __MANTIS_HIF_H
++#endif /* __MANTIS_HIF_H */
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 45d9e6b..ba55f0a 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -18,15 +18,20 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <linux/module.h>
+-#include <linux/moduleparam.h>
+-#include <linux/init.h>
+-#include <linux/delay.h>
+ #include <asm/io.h>
+ #include <linux/ioport.h>
+-#include <asm/pgtable.h>
+-#include <asm/page.h>
++#include <linux/pci.h>
++#include <linux/i2c.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
++#include "mantis_reg.h"
++#include "mantis_i2c.h"
+
+ #define I2C_HW_B_MANTIS 0x1c
+
+@@ -35,20 +40,21 @@ static int mantis_ack_wait(struct mantis_pci *mantis)
+ int rc = 0;
+ u32 timeout = 0;
+
+- if (wait_event_interruptible_timeout(mantis->i2c_wq,
+- mantis->mantis_int_stat & MANTIS_INT_I2CDONE,
+- msecs_to_jiffies(50)) == -ERESTARTSYS) {
++ if (wait_event_timeout(mantis->i2c_wq,
++ mantis->mantis_int_stat & MANTIS_INT_I2CDONE,
++ msecs_to_jiffies(50)) == -ERESTARTSYS) {
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Master !I2CDONE");
++ dprintk(MANTIS_DEBUG, 1, "Master !I2CDONE");
+ rc = -EREMOTEIO;
+ }
++
+ while (!(mantis->mantis_int_stat & MANTIS_INT_I2CRACK)) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Waiting for Slave RACK");
++ dprintk(MANTIS_DEBUG, 1, "Waiting for Slave RACK");
+ mantis->mantis_int_stat = mmread(MANTIS_INT_STAT);
+ msleep(5);
+ timeout++;
+ if (timeout > 500) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Slave RACK Fail !");
++ dprintk(MANTIS_ERROR, 1, "Slave RACK Fail !");
+ rc = -EREMOTEIO;
+ break;
+ }
+@@ -62,7 +68,7 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ {
+ u32 rxd, i;
+
+- dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ",
++ dprintk(MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ",
+ __func__, msg->addr);
+
+ for (i = 0; i < msg->len; i++) {
+@@ -77,14 +83,14 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
+ mmwrite(rxd, MANTIS_I2CDATA_CTL);
+ if (mantis_ack_wait(mantis) != 0) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<R>");
++ dprintk(MANTIS_DEBUG, 1, "ACK failed<R>");
+ return -EREMOTEIO;
+ }
+ rxd = mmread(MANTIS_I2CDATA_CTL);
+ msg->buf[i] = (u8)((rxd >> 8) & 0xFF);
+- dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
++ dprintk(MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+ }
+- dprintk(verbose, MANTIS_INFO, 0, "]\n");
++ dprintk(MANTIS_INFO, 0, "]\n");
+
+ return 0;
+ }
+@@ -94,11 +100,11 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ int i;
+ u32 txd = 0;
+
+- dprintk(verbose, MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ",
++ dprintk(MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ",
+ __func__, msg->addr);
+
+ for (i = 0; i < msg->len; i++) {
+- dprintk(verbose, MANTIS_INFO, 0, "%02x ", msg->buf[i]);
++ dprintk(MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+ txd = (msg->addr << 25) | (msg->buf[i] << 8)
+ | MANTIS_I2C_RATE_3
+ | MANTIS_I2C_STOP
+@@ -110,11 +116,11 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
+ mmwrite(txd, MANTIS_I2CDATA_CTL);
+ if (mantis_ack_wait(mantis) != 0) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "ACK failed<W>");
++ dprintk(MANTIS_DEBUG, 1, "ACK failed<W>");
+ return -EREMOTEIO;
+ }
+ }
+- dprintk(verbose, MANTIS_INFO, 0, "]\n");
++ dprintk(MANTIS_INFO, 0, "]\n");
+
+ return 0;
+ }
+@@ -154,43 +160,46 @@ static struct i2c_algorithm mantis_algo = {
+ .functionality = mantis_i2c_func,
+ };
+
+-static struct i2c_adapter mantis_i2c_adapter = {
+- .owner = THIS_MODULE,
+- .name = "Mantis I2C",
+- .id = I2C_HW_B_MANTIS,
+- .class = I2C_CLASS_TV_DIGITAL,
+- .algo = &mantis_algo,
+-};
+-
+ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ {
+ u32 intstat, intmask;
+ struct i2c_adapter *i2c_adapter = &mantis->adapter;
+ struct pci_dev *pdev = mantis->pdev;
+
++ init_waitqueue_head(&mantis->i2c_wq);
+ mutex_init(&mantis->i2c_lock);
+- memcpy(i2c_adapter, &mantis_i2c_adapter, sizeof (mantis_i2c_adapter));
++ strncpy(i2c_adapter->name, "Mantis I2C", sizeof (i2c_adapter->name));
+ i2c_set_adapdata(i2c_adapter, mantis);
+
+- i2c_adapter->dev.parent = &pdev->dev;
++ i2c_adapter->owner = THIS_MODULE;
++ i2c_adapter->class = I2C_CLASS_TV_DIGITAL;
++ i2c_adapter->algo = &mantis_algo;
++ i2c_adapter->algo_data = NULL;
++ i2c_adapter->id = I2C_HW_B_MANTIS;
++ i2c_adapter->timeout = 500;
++ i2c_adapter->retries = 3;
++ i2c_adapter->dev.parent = &pdev->dev;
++
+ mantis->i2c_rc = i2c_add_adapter(i2c_adapter);
+ if (mantis->i2c_rc < 0)
+ return mantis->i2c_rc;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Initializing I2C ..");
++ dprintk(MANTIS_DEBUG, 1, "Initializing I2C ..");
+
+ intstat = mmread(MANTIS_INT_STAT);
+ intmask = mmread(MANTIS_INT_MASK);
+ mmwrite(intstat, MANTIS_INT_STAT);
+ mmwrite(intmask | MANTIS_INT_I2CDONE, MANTIS_INT_MASK);
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "[0x%08x/%08x]", intstat, intmask);
++ dprintk(MANTIS_DEBUG, 1, "Status=<%02x> Mask=<%02x>", intstat, intmask);
+
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(mantis_i2c_init);
+
+ int __devexit mantis_i2c_exit(struct mantis_pci *mantis)
+ {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Removing I2C adapter");
++ dprintk(MANTIS_DEBUG, 1, "Removing I2C adapter");
+ return i2c_del_adapter(&mantis->adapter);
+ }
++EXPORT_SYMBOL_GPL(mantis_i2c_exit);
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.h b/drivers/media/dvb/mantis/mantis_i2c.h
+new file mode 100644
+index 0000000..1e49ecf
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_i2c.h
+@@ -0,0 +1,7 @@
++#ifndef __MANTIS_I2C_H
++#define __MANTIS_I2C_H
++
++extern int mantis_i2c_init(struct mantis_pci *mantis);
++extern int mantis_i2c_exit(struct mantis_pci *mantis);
++
++#endif /* __MANTIS_I2C_H */
+diff --git a/drivers/media/dvb/mantis/mantis_ioc.c b/drivers/media/dvb/mantis/mantis_ioc.c
+new file mode 100644
+index 0000000..4700088
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_ioc.c
+@@ -0,0 +1,145 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <linux/kernel.h>
++#include <linux/i2c.h>
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "mantis_common.h"
++#include "mantis_reg.h"
++#include "mantis_ioc.h"
++
++static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ int err;
++ struct i2c_msg msg[] = {
++ { .addr = 0x50, .flags = 0, .buf = data, .len = 1 },
++ { .addr = 0x50, .flags = I2C_M_RD, .buf = data, .len = length },
++ };
++
++ err = i2c_transfer(adapter, msg, 2);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: i2c read: < err=%i d0=0x%02x d1=0x%02x >",
++ err, data[0], data[1]);
++
++ return err;
++ }
++
++ return 0;
++}
++
++static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++ int err;
++
++ struct i2c_msg msg = { .addr = 0x50, .flags = 0, .buf = data, .len = length };
++
++ err = i2c_transfer(adapter, &msg, 1);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: i2c write: < err=%i length=0x%02x d0=0x%02x, d1=0x%02x >",
++ err, length, data[0], data[1]);
++
++ return err;
++ }
++
++ return 0;
++}
++
++int mantis_get_mac(struct mantis_pci *mantis)
++{
++ int err;
++
++ mantis->mac_address[0] = 0x08;
++
++ err = read_eeprom_byte(mantis, &mantis->mac_address[0], 6);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis EEPROM read error <%d>", err);
++
++ return err;
++ }
++
++ dprintk(MANTIS_ERROR, 0,
++ " MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]\n",
++ mantis->mac_address[0], mantis->mac_address[1],
++ mantis->mac_address[2], mantis->mac_address[3],
++ mantis->mac_address[4], mantis->mac_address[5]);
++
++ return 0;
++}
++EXPORT_SYMBOL_GPL(mantis_get_mac);
++
++/* Turn the given bit on or off. */
++void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
++{
++ u32 cur;
++
++ cur = mmread(MANTIS_GPIF_ADDR);
++ if (value)
++ mantis->gpio_status = cur | (1 << bitpos);
++ else
++ mantis->gpio_status = cur & (~(1 << bitpos));
++
++ mmwrite(mantis->gpio_status, MANTIS_GPIF_ADDR);
++ mmwrite(0x00, MANTIS_GPIF_DOUT);
++}
++EXPORT_SYMBOL_GPL(gpio_set_bits);
++
++int mantis_stream_control(struct mantis_pci *mantis, enum mantis_stream_control stream_ctl)
++{
++ u32 reg;
++
++ reg = mmread(MANTIS_CONTROL);
++ switch (stream_ctl) {
++ case STREAM_TO_HIF:
++ dprintk(MANTIS_DEBUG, 1, "Set stream to HIF");
++ reg &= 0xff - MANTIS_BYPASS;
++ mmwrite(reg, MANTIS_CONTROL);
++ reg |= MANTIS_BYPASS;
++ mmwrite(reg, MANTIS_CONTROL);
++ break;
++
++ case STREAM_TO_CAM:
++ dprintk(MANTIS_DEBUG, 1, "Set stream to CAM");
++ reg |= MANTIS_BYPASS;
++ mmwrite(reg, MANTIS_CONTROL);
++ reg &= 0xff - MANTIS_BYPASS;
++ mmwrite(reg, MANTIS_CONTROL);
++ break;
++ default:
++ dprintk(MANTIS_ERROR, 1, "Unknown MODE <%02x>", stream_ctl);
++ return -1;
++ }
++
++ return 0;
++}
++EXPORT_SYMBOL_GPL(mantis_stream_control);
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index f9aaaa5..f6030c9 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -58,7 +58,6 @@ struct mantis_ca {
+
+ enum mantis_slot_state slot_state;
+
+-// struct dvb_device *ca_dev;
+ void *ca_priv;
+
+ struct dvb_ca_en50221 en50221;
+@@ -81,4 +80,4 @@ extern int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data);
+ extern int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr);
+ extern int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data);
+
+-#endif // __MANTIS_LINK_H
++#endif /* __MANTIS_LINK_H */
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index d1eac40..5165a39 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -18,6 +18,9 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
+ #include <asm/io.h>
+ #include <asm/pgtable.h>
+ #include <asm/page.h>
+@@ -25,264 +28,149 @@
+ #include <linux/vmalloc.h>
+ #include <linux/init.h>
+ #include <linux/device.h>
+-#include "mantis_common.h"
+-#include "mantis_core.h"
+-#include "mantis_uart.h"
++#include <linux/pci.h>
+
+ #include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+
+-unsigned int verbose = 1;
+-module_param(verbose, int, 0644);
+-MODULE_PARM_DESC(verbose, "verbose startup messages, default is 1 (yes)");
+-
+-unsigned int devs;
+-
+-#define PCI_VENDOR_ID_MANTIS 0x1822
+-#define PCI_DEVICE_ID_MANTIS_R11 0x4e35
+-#define DRIVER_NAME "Mantis"
+-
+-static struct pci_device_id mantis_pci_table[] = {
+- { PCI_DEVICE(PCI_VENDOR_ID_MANTIS, PCI_DEVICE_ID_MANTIS_R11) },
+- { 0 },
+-};
+-
+-MODULE_DEVICE_TABLE(pci, mantis_pci_table);
+-
+-static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
+-{
+- u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
+- u32 rst_stat = 0, rst_mask = 0;
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
+
+- struct mantis_pci *mantis;
+- struct mantis_ca *ca;
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
+
+- mantis = (struct mantis_pci *) dev_id;
+- if (unlikely(mantis == NULL)) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis == NULL");
+- return IRQ_NONE;
+- }
+- ca = mantis->mantis_ca;
+-
+- stat = mmread(MANTIS_INT_STAT);
+- mask = mmread(MANTIS_INT_MASK);
+- mstat = lstat = stat & ~MANTIS_INT_RISCSTAT;
+- if (!(stat & mask))
+- return IRQ_NONE;
+-
+- rst_mask = MANTIS_GPIF_WRACK |
+- MANTIS_GPIF_OTHERR |
+- MANTIS_SBUF_WSTO |
+- MANTIS_GPIF_EXTIRQ;
+-
+- rst_stat = mmread(MANTIS_GPIF_STATUS);
+- rst_stat &= rst_mask;
+- mmwrite(rst_stat, MANTIS_GPIF_STATUS);
+-
+- mantis->mantis_int_stat = stat;
+- mantis->mantis_int_mask = mask;
+- dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]= [", stat, mask);
+- if (stat & MANTIS_INT_RISCEN) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* DMA enabl *");
+- }
+- if (stat & MANTIS_INT_IRQ0) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
+- mantis->gpif_status = rst_stat;
+- wake_up(&ca->hif_write_wq);
+- schedule_work(&ca->hif_evm_work);
+- }
+- if (stat & MANTIS_INT_IRQ1) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-1 *");
+- schedule_work(&mantis->uart_work);
+- }
+- if (stat & MANTIS_INT_OCERR) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT OCERR *");
+- }
+- if (stat & MANTIS_INT_PABORT) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT PABRT *");
+- }
+- if (stat & MANTIS_INT_RIPERR) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT RIPRR *");
+- }
+- if (stat & MANTIS_INT_PPERR) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT PPERR *");
+- }
+- if (stat & MANTIS_INT_FTRGT) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT FTRGT *");
+- }
+- if (stat & MANTIS_INT_RISCI) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* INT RISCI *");
+- mantis->finished_block = (stat & MANTIS_INT_RISCSTAT) >> 28;
+- tasklet_schedule(&mantis->tasklet);
+- }
+- if (stat & MANTIS_INT_I2CDONE) {
+- dprintk(verbose, MANTIS_DEBUG, 0, "* I2C DONE *");
+- wake_up(&mantis->i2c_wq);
+- }
+- mmwrite(stat, MANTIS_INT_STAT);
+- stat &= ~(MANTIS_INT_RISCEN | MANTIS_INT_I2CDONE |
+- MANTIS_INT_I2CRACK | MANTIS_INT_PCMCIA7 |
+- MANTIS_INT_PCMCIA6 | MANTIS_INT_PCMCIA5 |
+- MANTIS_INT_PCMCIA4 | MANTIS_INT_PCMCIA3 |
+- MANTIS_INT_PCMCIA2 | MANTIS_INT_PCMCIA1 |
+- MANTIS_INT_PCMCIA0 | MANTIS_INT_IRQ1 |
+- MANTIS_INT_IRQ0 | MANTIS_INT_OCERR |
+- MANTIS_INT_PABORT | MANTIS_INT_RIPERR |
+- MANTIS_INT_PPERR | MANTIS_INT_FTRGT |
+- MANTIS_INT_RISCI);
+-
+- if (stat)
+- dprintk(verbose, MANTIS_DEBUG, 0, "* Unknown [%04x] *", stat);
+-
+- dprintk(verbose, MANTIS_DEBUG, 0, "] ===\n");
+-
+- return IRQ_HANDLED;
+-}
++#include "mantis_common.h"
++#include "mantis_reg.h"
++#include "mantis_pci.h"
+
++#define DRIVER_NAME "Mantis Core"
+
+-static int __devinit mantis_pci_probe(struct pci_dev *pdev,
+- const struct pci_device_id *mantis_pci_table)
++int __devinit mantis_pci_init(struct mantis_pci *mantis)
+ {
+ u8 revision, latency;
+- struct mantis_pci *mantis;
+- int ret = 0;
++ struct mantis_hwconfig *config = mantis->hwconfig;
++ struct pci_dev *pdev = mantis->pdev;
++ int err, ret = 0;
++
++ dprintk(MANTIS_ERROR, 0, "found a %s PCI %s device on (%02x:%02x.%x),\n",
++ config->model_name,
++ config->dev_type,
++ mantis->pdev->bus->number,
++ PCI_SLOT(mantis->pdev->devfn),
++ PCI_FUNC(mantis->pdev->devfn));
++
++ err = pci_enable_device(pdev);
++ if (err != 0) {
++ ret = -ENODEV;
++ dprintk(MANTIS_ERROR, 1, "ERROR: PCI enable failed <%i>", err);
++ goto fail0;
++ }
+
+- mantis = kmalloc(sizeof (struct mantis_pci), GFP_KERNEL);
+- if (mantis == NULL) {
+- printk("%s: Out of memory\n", __func__);
++ err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
++ if (err != 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Unable to obtain 32 bit DMA <%i>", err);
+ ret = -ENOMEM;
+- goto err;
++ goto fail1;
+ }
+- memset(mantis, 0, sizeof (struct mantis_pci));
+- mantis->num = devs;
+- devs++;
+
+- if (pci_enable_device(pdev)) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis PCI enable failed");
+- ret = -ENODEV;
+- goto err;
+- }
+- mantis->mantis_addr = pci_resource_start(pdev, 0);
+- if (!request_mem_region(pci_resource_start(pdev, 0),
+- pci_resource_len(pdev, 0), DRIVER_NAME)) {
+- ret = -ENODEV;
+- goto err0;
+- }
++ pci_set_master(pdev);
+
+- mantis->mantis_mmio = ioremap(pci_resource_start(pdev, 0),
+- pci_resource_len(pdev, 0));
++ if (!request_mem_region(pci_resource_start(pdev, 0),
++ pci_resource_len(pdev, 0),
++ DRIVER_NAME)) {
+
+- if (!mantis->mantis_mmio) {
+- dprintk(verbose, MANTIS_ERROR, 1, "IO remap failed");
++ dprintk(MANTIS_ERROR, 1, "ERROR: BAR0 Request failed !");
+ ret = -ENODEV;
+- goto err1;
++ goto fail1;
+ }
+
+- // Clear and disable all interrupts at startup
+- // to avoid lockup situations
+- mmwrite(0x00, MANTIS_INT_MASK);
+- if (request_irq(pdev->irq,
+- mantis_pci_irq,
+- IRQF_SHARED,
+- DRIVER_NAME,
+- mantis) < 0) {
++ mantis->mmio = ioremap(pci_resource_start(pdev, 0),
++ pci_resource_len(pdev, 0));
+
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis IRQ reg failed");
++ if (!mantis->mmio) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: BAR0 remap failed !");
+ ret = -ENODEV;
+- goto err2;
++ goto fail2;
+ }
+- pci_set_master(pdev);
+- pci_set_drvdata(pdev, mantis);
++
+ pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &latency);
+ pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
+ mantis->latency = latency;
+ mantis->revision = revision;
+- mantis->pdev = pdev;
+- mantis->subsystem_vendor = pdev->subsystem_vendor;
+- mantis->subsystem_device = pdev->subsystem_device;
+- init_waitqueue_head(&mantis->i2c_wq);
+
+- mantis_set_direction(mantis, 0); /* CAM bypass */
++ dprintk(MANTIS_ERROR, 0, " Mantis Rev %d [%04x:%04x], ",
++ mantis->revision,
++ mantis->pdev->subsystem_vendor,
++ mantis->pdev->subsystem_device);
++
++ dprintk(MANTIS_ERROR, 0,
++ "irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
++ mantis->pdev->irq,
++ mantis->latency,
++ mantis->mantis_addr,
++ mantis->mmio);
+
+- if (!latency)
+- pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 32);
++ err = request_irq(pdev->irq,
++ config->irq_handler,
++ IRQF_SHARED,
++ DRIVER_NAME,
++ mantis);
+
+- dprintk(verbose, MANTIS_ERROR, 0,
+- "irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p\n",
+- pdev->irq, mantis->latency,
+- mantis->mantis_addr, mantis->mantis_mmio);
++ if (err != 0) {
+
+- // No more PCI specific stuff !
+- if (mantis_core_init(mantis) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Mantis core init failed");
++ dprintk(MANTIS_ERROR, 1, "ERROR: IRQ registration failed ! <%d>", err);
+ ret = -ENODEV;
+- goto err2;
++ goto fail3;
+ }
+
+- return 0;
++ pci_set_drvdata(pdev, mantis);
++ return ret;
+
+- // Error conditions ..
+-err2:
+- dprintk(verbose, MANTIS_DEBUG, 1, "Err: IO Unmap");
+- if (mantis->mantis_mmio)
+- iounmap(mantis->mantis_mmio);
+-err1:
+- dprintk(verbose, MANTIS_DEBUG, 1, "Err: Release regions");
++ /* Error conditions */
++fail3:
++ dprintk(MANTIS_ERROR, 1, "ERROR: <%d> I/O unmap", ret);
++ if (mantis->mmio)
++ iounmap(mantis->mmio);
++
++fail2:
++ dprintk(MANTIS_ERROR, 1, "ERROR: <%d> releasing regions", ret);
+ release_mem_region(pci_resource_start(pdev, 0),
+- pci_resource_len(pdev, 0));
++ pci_resource_len(pdev, 0));
++
++fail1:
++ dprintk(MANTIS_ERROR, 1, "ERROR: <%d> disabling device", ret);
+ pci_disable_device(pdev);
+-err0:
+- dprintk(verbose, MANTIS_DEBUG, 1, "Err: Free");
+- kfree(mantis);
+-err:
+- dprintk(verbose, MANTIS_DEBUG, 1, "Err:");
++
++fail0:
++ dprintk(MANTIS_ERROR, 1, "ERROR: <%d> exiting", ret);
++ pci_set_drvdata(pdev, NULL);
+ return ret;
+ }
++EXPORT_SYMBOL_GPL(mantis_pci_init);
+
+-static void __devexit mantis_pci_remove(struct pci_dev *pdev)
++void __devexit mantis_pci_exit(struct mantis_pci *mantis)
+ {
+- struct mantis_pci *mantis = pci_get_drvdata(pdev);
+-
+- if (mantis == NULL) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Aeio, Mantis NULL ptr");
+- return;
+- }
+- mantis_core_exit(mantis);
+- dprintk(verbose, MANTIS_ERROR, 1, "Removing -->Mantis irq: %d, latency: %d\n memory: 0x%lx, mmio: 0x%p",
+- pdev->irq, mantis->latency, mantis->mantis_addr,
+- mantis->mantis_mmio);
++ struct pci_dev *pdev = mantis->pdev;
+
++ dprintk(MANTIS_NOTICE, 1, " mem: 0x%p", mantis->mmio);
+ free_irq(pdev->irq, mantis);
+- pci_release_regions(pdev);
+- if (mantis_dma_exit(mantis) < 0)
+- dprintk(verbose, MANTIS_ERROR, 1, "DMA exit failed");
++ if (mantis->mmio) {
++ iounmap(mantis->mmio);
++ release_mem_region(pci_resource_start(pdev, 0),
++ pci_resource_len(pdev, 0));
++ }
+
+- pci_set_drvdata(pdev, NULL);
+ pci_disable_device(pdev);
+- kfree(mantis);
+-}
+-
+-static struct pci_driver mantis_pci_driver = {
+- .name = DRIVER_NAME,
+- .id_table = mantis_pci_table,
+- .probe = mantis_pci_probe,
+- .remove = mantis_pci_remove,
+-};
+-
+-static int __devinit mantis_pci_init(void)
+-{
+- return pci_register_driver(&mantis_pci_driver);
+-}
+-
+-static void __devexit mantis_pci_exit(void)
+-{
+- pci_unregister_driver(&mantis_pci_driver);
++ pci_set_drvdata(pdev, NULL);
+ }
+-
+-module_init(mantis_pci_init);
+-module_exit(mantis_pci_exit);
++EXPORT_SYMBOL_GPL(mantis_pci_exit);
+
+ MODULE_DESCRIPTION("Mantis PCI DTV bridge driver");
+ MODULE_AUTHOR("Manu Abraham");
+diff --git a/drivers/media/dvb/mantis/mantis_pci.h b/drivers/media/dvb/mantis/mantis_pci.h
+new file mode 100644
+index 0000000..5ce776f
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_pci.h
+@@ -0,0 +1,7 @@
++#ifndef __MANTIS_PCI_H
++#define __MANTIS_PCI_H
++
++extern int mantis_pci_init(struct mantis_pci *mantis);
++extern void mantis_pci_exit(struct mantis_pci *mantis);
++
++#endif /* __MANTIS_PCI_H */
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index 4156a08..90ca356 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -18,8 +18,22 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <linux/kernel.h>
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
+ #include "mantis_link.h" /* temporary due to physical layer stuff */
++#include "mantis_reg.h"
+
+ /*
+ * If Slot state is already PLUG_IN event and we are called
+@@ -32,7 +46,7 @@ void mantis_event_cam_plugin(struct mantis_ca *ca)
+ u32 gpif_irqcfg;
+
+ if (ca->slot_state == MODULE_XTRACTED) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event: CAM Plugged IN: Adapter(%d) Slot(0)", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event: CAM Plugged IN: Adapter(%d) Slot(0)", mantis->num);
+ udelay(50);
+ mmwrite(0xda000000, MANTIS_CARD_RESET);
+ gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+@@ -56,7 +70,7 @@ void mantis_event_cam_unplug(struct mantis_ca *ca)
+ u32 gpif_irqcfg;
+
+ if (ca->slot_state == MODULE_INSERTED) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Event: CAM Unplugged: Adapter(%d) Slot(0)", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Event: CAM Unplugged: Adapter(%d) Slot(0)", mantis->num);
+ udelay(50);
+ mmwrite(0x00da0000, MANTIS_CARD_RESET);
+ gpif_irqcfg = mmread(MANTIS_GPIF_IRQCFG);
+@@ -80,14 +94,14 @@ int mantis_pcmcia_init(struct mantis_ca *ca)
+ card_stat = mmread(MANTIS_GPIF_IRQCFG);
+
+ if (gpif_stat & MANTIS_GPIF_DETSTAT) {
+- dprintk(verbose, MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "CAM found on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGOUT, MANTIS_GPIF_IRQCFG);
+ ca->slot_state = MODULE_INSERTED;
+ dvb_ca_en50221_camchange_irq(&ca->en50221,
+ 0,
+ DVB_CA_EN50221_CAMCHANGE_INSERTED);
+ } else {
+- dprintk(verbose, MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
++ dprintk(MANTIS_DEBUG, 1, "Empty Slot on Adapter(%d) Slot(0)", mantis->num);
+ mmwrite(card_stat | MANTIS_MASK_PLUGIN, MANTIS_GPIF_IRQCFG);
+ ca->slot_state = MODULE_XTRACTED;
+ dvb_ca_en50221_camchange_irq(&ca->en50221,
+diff --git a/drivers/media/dvb/mantis/mantis_reg.h b/drivers/media/dvb/mantis/mantis_reg.h
+index 6f5cd49..0072e14 100644
+--- a/drivers/media/dvb/mantis/mantis_reg.h
++++ b/drivers/media/dvb/mantis/mantis_reg.h
+@@ -21,7 +21,7 @@
+ #ifndef __MANTIS_REG_H
+ #define __MANTIS_REG_H
+
+-// Interrupts
++/* Interrupts */
+ #define MANTIS_INT_STAT 0x00
+ #define MANTIS_INT_MASK 0x04
+
+@@ -49,8 +49,12 @@
+ #define MANTIS_INT_RISCI (0x01 << 1)
+ #define MANTIS_INT_I2CDONE (0x01 << 0)
+
+-// DMA
++/* DMA */
+ #define MANTIS_DMA_CTL 0x08
++#define MANTIS_GPIF_RD (0xff << 24)
++#define MANTIS_GPIF_WR (0xff << 16)
++#define MANTIS_CPU_DO (0x01 << 10)
++#define MANTIS_DRV_DO (0x01 << 9)
+ #define MANTIS_I2C_RD (0x01 << 7)
+ #define MANTIS_I2C_WR (0x01 << 6)
+ #define MANTIS_DCAP_MODE (0x01 << 5)
+@@ -61,10 +65,16 @@
+ #define MANTIS_DCAP_EN (0x01 << 1)
+ #define MANTIS_RISC_EN (0x01 << 0)
+
++/* DEBUG */
++#define MANTIS_DEBUGREG 0x0c
++#define MANTIS_DATINV (0x0e << 7)
++#define MANTIS_TOP_DEBUGSEL (0x07 << 4)
++#define MANTIS_PCMCIA_DEBUGSEL (0x0f << 0)
++
+ #define MANTIS_RISC_START 0x10
+ #define MANTIS_RISC_PC 0x14
+
+-// I2C
++/* I2C */
+ #define MANTIS_I2CDATA_CTL 0x18
+ #define MANTIS_I2C_RATE_1 (0x00 << 6)
+ #define MANTIS_I2C_RATE_2 (0x01 << 6)
+@@ -73,6 +83,28 @@
+ #define MANTIS_I2C_STOP (0x01 << 5)
+ #define MANTIS_I2C_PGMODE (0x01 << 3)
+
++/* DATA */
++#define MANTIS_CMD_DATA_R1 0x20
++#define MANTIS_CMD_DATA_3 (0xff << 24)
++#define MANTIS_CMD_DATA_2 (0xff << 16)
++#define MANTIS_CMD_DATA_1 (0xff << 8)
++#define MANTIS_CMD_DATA_0 (0xff << 0)
++
++#define MANTIS_CMD_DATA_R2 0x24
++#define MANTIS_CMD_DATA_7 (0xff << 24)
++#define MANTIS_CMD_DATA_6 (0xff << 16)
++#define MANTIS_CMD_DATA_5 (0xff << 8)
++#define MANTIS_CMD_DATA_4 (0xff << 0)
++
++#define MANTIS_CONTROL 0x28
++#define MANTIS_DET (0x01 << 7)
++#define MANTIS_DAT_CF_EN (0x01 << 6)
++#define MANTIS_ACS (0x03 << 4)
++#define MANTIS_VCCEN (0x01 << 3)
++#define MANTIS_BYPASS (0x01 << 2)
++#define MANTIS_MRST (0x01 << 1)
++#define MANTIS_CRST_INT (0x01 << 0)
++
+ #define MANTIS_GPIF_CFGSLA 0x84
+ #define MANTIS_GPIF_WAITSMPL (0x07 << 28)
+ #define MANTIS_GPIF_BYTEADDRSUB (0x01 << 25)
+@@ -162,4 +194,4 @@
+ #define MANTIS_GPIF_LOGICRD (0xffff << 16)
+ #define MANTIS_GPIF_LOGICRW (0xffff << 0)
+
+-#endif //__MANTIS_REG_H
++#endif /* __MANTIS_REG_H */
+diff --git a/drivers/media/dvb/mantis/mantis_uart.c b/drivers/media/dvb/mantis/mantis_uart.c
+index 786fcc3..fb423b0 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.c
++++ b/drivers/media/dvb/mantis/mantis_uart.c
+@@ -1,5 +1,20 @@
++#include <linux/kernel.h>
+ #include <linux/spinlock.h>
++
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
++#include "mantis_reg.h"
++#include "mantis_uart.h"
+
+ struct mantis_uart_params {
+ enum mantis_baud baud_rate;
+@@ -18,20 +33,20 @@ int mantis_uart_read(struct mantis_pci *mantis, u8 *data)
+ for (i = 0; i < (config->bytes + 1); i++) {
+
+ if (stat & MANTIS_UART_RXFIFO_FULL) {
+- dprintk(verbose, MANTIS_ERROR, 1, "RX Fifo FULL");
++ dprintk(MANTIS_ERROR, 1, "RX Fifo FULL");
+ }
+ data[i] = mmread(MANTIS_UART_RXD) & 0x3f;
+
+ stat = mmread(MANTIS_UART_STAT);
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Reading ... <%02x>", data[i] & 0x3f);
++ dprintk(MANTIS_DEBUG, 1, "Reading ... <%02x>", data[i] & 0x3f);
+
+ if (data[i] & (1 << 7)) {
+- dprintk(verbose, MANTIS_ERROR, 1, "UART framing error");
++ dprintk(MANTIS_ERROR, 1, "UART framing error");
+ return -EINVAL;
+ }
+ if (data[i] & (1 << 6)) {
+- dprintk(verbose, MANTIS_ERROR, 1, "UART parity error");
++ dprintk(MANTIS_ERROR, 1, "UART parity error");
+ return -EINVAL;
+ }
+ }
+@@ -46,14 +61,14 @@ static void mantis_uart_work(struct work_struct *work)
+ u8 buf[16];
+ int i;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "UART read");
++ dprintk(MANTIS_DEBUG, 1, "UART read");
+ mantis_uart_read(mantis, buf);
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "UART: ");
++ dprintk(MANTIS_DEBUG, 1, "UART: ");
+ for (i = 0; i < (config->bytes + 1); i++)
+- dprintk(verbose, MANTIS_DEBUG, 0, "<%02x> ", buf[i]);
++ dprintk(MANTIS_DEBUG, 0, "<%02x> ", buf[i]);
+
+- dprintk(verbose, MANTIS_DEBUG, 0, "\n");
++ dprintk(MANTIS_DEBUG, 0, "\n");
+ }
+
+ static int mantis_uart_setup(struct mantis_pci *mantis,
+@@ -64,7 +79,7 @@ static int mantis_uart_setup(struct mantis_pci *mantis,
+
+ u32 reg;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Set Parity <%s> Baud Rate <%s>",
++ dprintk(MANTIS_DEBUG, 1, "Set Parity <%s> Baud Rate <%s>",
+ parity[params->parity],
+ rates[params->baud_rate]);
+
+@@ -102,7 +117,7 @@ int mantis_uart_init(struct mantis_pci *mantis)
+ struct mantis_hwconfig *config = mantis->hwconfig;
+ struct mantis_uart_params params;
+
+- dprintk(verbose, MANTIS_DEBUG, 1, "Initializing UART ..");
++ dprintk(MANTIS_DEBUG, 1, "Initializing UART ..");
+ /* default parity: */
+ params.baud_rate = config->baud_rate;
+ params.parity = config->parity;
+@@ -131,9 +146,11 @@ int mantis_uart_init(struct mantis_pci *mantis)
+
+ return 0;
+ }
++EXPORT_SYMBOL_GPL(mantis_uart_init);
+
+ void mantis_uart_exit(struct mantis_pci *mantis)
+ {
+ /* disable interrupt */
+ mmwrite(mmread(MANTIS_UART_CTL) & 0xffef, MANTIS_UART_CTL);
+ }
++EXPORT_SYMBOL_GPL(mantis_uart_exit);
+diff --git a/drivers/media/dvb/mantis/mantis_uart.h b/drivers/media/dvb/mantis/mantis_uart.h
+index e9f938d..0a42cd0 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.h
++++ b/drivers/media/dvb/mantis/mantis_uart.h
+@@ -56,4 +56,4 @@ struct mantis_pci;
+ extern int mantis_uart_init(struct mantis_pci *mantis);
+ extern void mantis_uart_exit(struct mantis_pci *mantis);
+
+-#endif // __MANTIS_UART_H
++#endif /* __MANTIS_UART_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index 64cdfb8..f2092ce 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -18,6 +18,18 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "stv0299.h"
+ #include "mantis_common.h"
+ #include "mantis_vp1033.h"
+
+@@ -66,47 +78,21 @@ u8 lgtdqcs001f_inittab[] = {
+ 0xff, 0xff,
+ };
+
+-struct stv0299_config lgtdqcs001f_config = {
+- .demod_address = 0x68,
+- .inittab = lgtdqcs001f_inittab,
+- .mclk = 88000000UL,
+-// .invert = 0,
+- .invert = 1,
+-// .enhanced_tuning = 0,
+- .skip_reinit = 0,
+-// .lock_output = STV0229_LOCKOUTPUT_0,
+- .volt13_op0_op1 = STV0299_VOLT13_OP0,
+- .min_delay_ms = 100,
+- .set_symbol_rate = lgtdqcs001f_set_symbol_rate,
+-// .pll_set = lgtdqcs001f_pll_set,
+-};
+-
+ #define MANTIS_MODEL_NAME "VP-1033"
+ #define MANTIS_DEV_TYPE "DVB-S/DSS"
+
+-struct mantis_hwconfig vp1033_mantis_config = {
+- .model_name = MANTIS_MODEL_NAME,
+- .dev_type = MANTIS_DEV_TYPE,
+- .ts_size = MANTIS_TS_204,
+- .baud_rate = MANTIS_BAUD_9600,
+- .parity = MANTIS_PARITY_NONE,
+- .bytes = 0,
+-};
+-
+ int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params)
+ {
++ struct mantis_pci *mantis = fe->dvb->priv;
++ struct i2c_adapter *adapter = &mantis->adapter;
++
+ u8 buf[4];
+ u32 div;
+
+- struct mantis_pci *mantis = fe->dvb->priv;
+
+- struct i2c_msg msg = {
+- .addr = 0x61,
+- .flags = 0,
+- .buf = buf,
+- .len = sizeof (buf)
+- };
++ struct i2c_msg msg = {.addr = 0x61, .flags = 0, .buf = buf, .len = sizeof (buf) };
++
+ div = params->frequency / 250;
+
+ buf[0] = (div >> 8) & 0x7f;
+@@ -118,8 +104,8 @@ int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+ buf[3] |= 0x04;
+ else
+ buf[3] &= ~0x04;
+- if (i2c_transfer(&mantis->adapter, &msg, 1) < 0) {
+- dprintk(verbose, MANTIS_ERROR, 1, "Write: I2C Transfer failed");
++ if (i2c_transfer(adapter, &msg, 1) < 0) {
++ dprintk(MANTIS_ERROR, 1, "Write: I2C Transfer failed");
+ return -EIO;
+ }
+ msleep_interruptible(100);
+@@ -161,3 +147,49 @@ int lgtdqcs001f_set_symbol_rate(struct dvb_frontend *fe,
+
+ return 0;
+ }
++
++struct stv0299_config lgtdqcs001f_config = {
++ .demod_address = 0x68,
++ .inittab = lgtdqcs001f_inittab,
++ .mclk = 88000000UL,
++ .invert = 0,
++ .skip_reinit = 0,
++ .volt13_op0_op1 = STV0299_VOLT13_OP0,
++ .min_delay_ms = 100,
++ .set_symbol_rate = lgtdqcs001f_set_symbol_rate,
++};
++
++static int vp1033_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ dprintk(MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
++ fe = stv0299_attach(&lgtdqcs001f_config, adapter);
++
++ if (fe) {
++ fe->ops.tuner_ops.set_params = lgtdqcs001f_tuner_set;
++ dprintk(MANTIS_ERROR, 1, "found STV0299 DVB-S frontend @ 0x%02x",
++ lgtdqcs001f_config.demod_address);
++
++ dprintk(MANTIS_ERROR, 1, "Mantis DVB-S STV0299 frontend attach success");
++ } else {
++ return -1;
++ }
++
++ mantis->fe = fe;
++ dprintk(MANTIS_ERROR, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp1033_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_204,
++
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++
++ .frontend_init = vp1033_frontend_init,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.h b/drivers/media/dvb/mantis/mantis_vp1033.h
+index e245706..2c18d21 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.h
++++ b/drivers/media/dvb/mantis/mantis_vp1033.h
+@@ -21,19 +21,10 @@
+ #ifndef __MANTIS_VP1033_H
+ #define __MANTIS_VP1033_H
+
+-#include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "stv0299.h"
+
+ #define MANTIS_VP_1033_DVB_S 0x0016
+
+-extern struct stv0299_config lgtdqcs001f_config;
+-extern struct mantis_hwconfig vp1033_mantis_config;
++extern struct mantis_hwconfig vp1033_config;
+
+-extern int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+- struct dvb_frontend_parameters *params);
+-
+-extern int lgtdqcs001f_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio);
+-
+-
+-#endif // __MANTIS_VP1033_H
++#endif /* __MANTIS_VP1033_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index 28f3420..40778ec 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -18,10 +18,24 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "mb86a16.h"
+ #include "mantis_common.h"
++#include "mantis_ioc.h"
+ #include "mantis_vp1034.h"
++#include "mantis_reg.h"
+
+-struct mb86a16_config vp1034_config = {
++struct mb86a16_config vp1034_mb86a16_config = {
+ .demod_address = 0x08,
+ .set_voltage = vp1034_set_voltage,
+ };
+@@ -29,38 +43,62 @@ struct mb86a16_config vp1034_config = {
+ #define MANTIS_MODEL_NAME "VP-1034"
+ #define MANTIS_DEV_TYPE "DVB-S/DSS"
+
+-struct mantis_hwconfig vp1034_mantis_config = {
+- .model_name = MANTIS_MODEL_NAME,
+- .dev_type = MANTIS_DEV_TYPE,
+- .ts_size = MANTIS_TS_204,
+- .baud_rate = MANTIS_BAUD_9600,
+- .parity = MANTIS_PARITY_NONE,
+- .bytes = 0,
+-};
+-
+ int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+ {
+ struct mantis_pci *mantis = fe->dvb->priv;
+
+ switch (voltage) {
+ case SEC_VOLTAGE_13:
+- dprintk(verbose, MANTIS_ERROR, 1, "Polarization=[13V]");
++ dprintk(MANTIS_ERROR, 1, "Polarization=[13V]");
+ gpio_set_bits(mantis, 13, 1);
+ gpio_set_bits(mantis, 14, 0);
+ break;
+ case SEC_VOLTAGE_18:
+- dprintk(verbose, MANTIS_ERROR, 1, "Polarization=[18V]");
++ dprintk(MANTIS_ERROR, 1, "Polarization=[18V]");
+ gpio_set_bits(mantis, 13, 1);
+ gpio_set_bits(mantis, 14, 1);
+ break;
+ case SEC_VOLTAGE_OFF:
+- dprintk(verbose, MANTIS_ERROR, 1, "Frontend (dummy) POWERDOWN");
++ dprintk(MANTIS_ERROR, 1, "Frontend (dummy) POWERDOWN");
+ break;
+ default:
+- dprintk(verbose, MANTIS_ERROR, 1, "Invalid = (%d)", (u32 ) voltage);
++ dprintk(MANTIS_ERROR, 1, "Invalid = (%d)", (u32 ) voltage);
+ return -EINVAL;
+ }
+ mmwrite(0x00, MANTIS_GPIF_DOUT);
+
+ return 0;
+ }
++
++static int vp1034_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ dprintk(MANTIS_ERROR, 1, "Probing for MB86A16 (DVB-S/DSS)");
++ fe = mb86a16_attach(&vp1034_mb86a16_config, adapter);
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found MB86A16 DVB-S/DSS frontend @0x%02x",
++ vp1034_mb86a16_config.demod_address);
++
++ } else {
++ return -1;
++ }
++
++ mantis->fe = fe;
++ dprintk(MANTIS_ERROR, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp1034_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_204,
++
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++
++ .frontend_init = vp1034_frontend_init,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.h b/drivers/media/dvb/mantis/mantis_vp1034.h
+index 2194857..3026912 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.h
++++ b/drivers/media/dvb/mantis/mantis_vp1034.h
+@@ -23,13 +23,11 @@
+
+ #include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "mb86a16.h"
+
+
+ #define MANTIS_VP_1034_DVB_S 0x0014
+
+-extern struct mantis_hwconfig vp1034_mantis_config;
+-extern struct mb86a16_config vp1034_config;
++extern struct mantis_hwconfig vp1034_config;
+ extern int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
+
+-#endif // __MANTIS_VP1034_H
++#endif /* __MANTIS_VP1034_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 90df80b..1181fad 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -18,24 +18,31 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
+ #include "mantis_common.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
+ #include "mantis_vp1041.h"
+ #include "stb0899_reg.h"
++#include "stb0899_drv.h"
+ #include "stb0899_cfg.h"
+ #include "stb6100_cfg.h"
++#include "stb6100.h"
++#include "lnbp21.h"
+
+ #define MANTIS_MODEL_NAME "VP-1041"
+ #define MANTIS_DEV_TYPE "DSS/DVB-S/DVB-S2"
+
+-struct mantis_hwconfig vp1041_mantis_config = {
+- .model_name = MANTIS_MODEL_NAME,
+- .dev_type = MANTIS_DEV_TYPE,
+- .ts_size = MANTIS_TS_188,
+- .baud_rate = MANTIS_BAUD_9600,
+- .parity = MANTIS_PARITY_NONE,
+- .bytes = 0,
+-};
+-
+ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
+
+ // 0x0000000b , /* SYSREG */
+@@ -258,7 +265,7 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
+ { 0xffff , 0xff },
+ };
+
+-struct stb0899_config vp1041_config = {
++struct stb0899_config vp1041_stb0899_config = {
+ .init_dev = vp1041_stb0899_s1_init_1,
+ .init_s2_demod = stb0899_s2_init_2,
+ .init_s1_demod = vp1041_stb0899_s1_init_3,
+@@ -299,3 +306,55 @@ struct stb6100_config vp1041_stb6100_config = {
+ .tuner_address = 0x60,
+ .refclock = 27000000,
+ };
++
++static int vp1041_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ int err = 0;
++
++ err = mantis_frontend_power(mantis, POWER_ON);
++ if (err == 0) {
++ mantis_frontend_soft_reset(mantis);
++ msleep(250);
++ mantis->fe = stb0899_attach(&vp1041_stb0899_config, adapter);
++ if (mantis->fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found STB0899 DVB-S/DVB-S2 frontend @0x%02x",
++ vp1041_stb0899_config.demod_address);
++
++ if (stb6100_attach(mantis->fe, &vp1041_stb6100_config, adapter)) {
++ if (!lnbp21_attach(mantis->fe, adapter, 0, 0)) {
++ printk("%s: No LNBP21 found!\n", __func__);
++ }
++ }
++ } else {
++ return -EREMOTEIO;
++ }
++ } else {
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
++
++ return -EIO;
++ }
++
++
++ dprintk(MANTIS_ERROR, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp1041_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
++
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++
++ .frontend_init = vp1041_frontend_init,
++ .power = GPIF_A12,
++ .reset = GPIF_A13,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.h b/drivers/media/dvb/mantis/mantis_vp1041.h
+index 2cc83a6..1ae5b3d 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.h
++++ b/drivers/media/dvb/mantis/mantis_vp1041.h
+@@ -21,17 +21,13 @@
+ #ifndef __MANTIS_VP1041_H
+ #define __MANTIS_VP1041_H
+
+-#include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "stb0899_drv.h"
+-#include "stb6100.h"
+-#include "lnbp21.h"
+
+ #define MANTIS_VP_1041_DVB_S2 0x0031
+-#define TECHNISAT_SKYSTAR_HD2 0x0001
++#define SKYSTAR_HD2_10 0x0001
++#define SKYSTAR_HD2_20 0x0003
++#define CINERGY_S2_PCI_HD 0x1179
+
+-extern struct mantis_hwconfig vp1041_mantis_config;
+-extern struct stb0899_config vp1041_config;
+-extern struct stb6100_config vp1041_stb6100_config;
++extern struct mantis_hwconfig vp1041_config;
+
+-#endif // __MANTIS_VP1041_H
++#endif /* __MANTIS_VP1041_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 1171e69..8773291 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -18,48 +18,59 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "tda1002x.h"
+ #include "mantis_common.h"
+ #include "mantis_vp2033.h"
+
+ #define MANTIS_MODEL_NAME "VP-2033"
+ #define MANTIS_DEV_TYPE "DVB-C"
+
+-struct mantis_hwconfig vp2033_mantis_config = {
+- .model_name = MANTIS_MODEL_NAME,
+- .dev_type = MANTIS_DEV_TYPE,
+- .ts_size = MANTIS_TS_204,
+- .baud_rate = MANTIS_BAUD_9600,
+- .parity = MANTIS_PARITY_NONE,
+- .bytes = 0,
++struct tda1002x_config vp2033_tda1002x_cu1216_config = {
++ .demod_address = 0x18 >> 1,
++ .invert = 1,
+ };
+
+-struct tda1002x_config philips_cu1216_config = {
++struct tda10023_config vp2033_tda10023_cu1216_config = {
+ .demod_address = 0x18 >> 1,
+ .invert = 1,
+ };
+
+-u8 read_pwm(struct mantis_pci *mantis)
++static u8 read_pwm(struct mantis_pci *mantis)
+ {
++ struct i2c_adapter *adapter = &mantis->adapter;
++
+ u8 b = 0xff;
+ u8 pwm;
+ struct i2c_msg msg[] = {
+- {.addr = 0x50,.flags = 0,.buf = &b,.len = 1},
+- {.addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1}
++ {.addr = 0x50, .flags = 0, .buf = &b, .len = 1},
++ {.addr = 0x50, .flags = I2C_M_RD, .buf = &pwm, .len = 1}
+ };
+
+- if ((i2c_transfer(&mantis->adapter, msg, 2) != 2)
++ if ((i2c_transfer(adapter, msg, 2) != 2)
+ || (pwm == 0xff))
+ pwm = 0x48;
+
+ return pwm;
+ }
+
+-int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
++static int tda1002x_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
+ {
+ struct mantis_pci *mantis = fe->dvb->priv;
++ struct i2c_adapter *adapter = &mantis->adapter;
+
+ u8 buf[6];
+- struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = buf,.len = sizeof(buf) };
++ struct i2c_msg msg = {.addr = 0x60, .flags = 0, .buf = buf, .len = sizeof (buf) };
+ int i;
+
+ #define CU1216_IF 36125000
+@@ -78,7 +89,7 @@ int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parame
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+
+- if (i2c_transfer(&mantis->adapter, &msg, 1) != 1)
++ if (i2c_transfer(adapter, &msg, 1) != 1)
+ return -EIO;
+
+ /* wait for the pll lock */
+@@ -88,7 +99,7 @@ int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parame
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+
+- if (i2c_transfer(&mantis->adapter, &msg, 1) == 1 && (buf[0] & 0x40))
++ if (i2c_transfer(adapter, &msg, 1) == 1 && (buf[0] & 0x40))
+ break;
+
+ msleep(10);
+@@ -102,8 +113,58 @@ int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parame
+ if (fe->ops.i2c_gate_ctrl)
+ fe->ops.i2c_gate_ctrl(fe, 1);
+
+- if (i2c_transfer(&mantis->adapter, &msg, 1) != 1)
++ if (i2c_transfer(adapter, &msg, 1) != 1)
+ return -EIO;
+
+ return 0;
+ }
++
++static int vp2033_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ dprintk(MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ fe = tda10021_attach(&vp2033_tda1002x_cu1216_config,
++ adapter,
++ read_pwm(mantis));
++
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
++ vp2033_tda1002x_cu1216_config.demod_address);
++ } else {
++ fe = tda10023_attach(&vp2033_tda10023_cu1216_config,
++ adapter,
++ read_pwm(mantis));
++
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ vp2033_tda1002x_cu1216_config.demod_address);
++ }
++ }
++
++ if (fe) {
++ fe->ops.tuner_ops.set_params = tda1002x_cu1216_tuner_set;
++ dprintk(MANTIS_ERROR, 1, "Mantis DVB-C Philips CU1216 frontend attach success");
++ } else {
++ return -1;
++ }
++
++ mantis->fe = fe;
++ dprintk(MANTIS_DEBUG, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp2033_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_204,
++
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++
++ .frontend_init = vp2033_frontend_init,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+index fcf8b85..e6c5fe8 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.h
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -21,17 +21,10 @@
+ #ifndef __MANTIS_VP2033_H
+ #define __MANTIS_VP2033_H
+
+-#include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "tda1002x.h"
+
+ #define MANTIS_VP_2033_DVB_C 0x0008
+
+-extern struct tda1002x_config philips_cu1216_config;
+-extern struct mantis_hwconfig vp2033_mantis_config;
++extern struct mantis_hwconfig vp2033_config;
+
+-extern int philips_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params);
+-
+-extern u8 read_pwm(struct mantis_pci *mantis);
+-
+-#endif // __MANTIS_VP2033_H
++#endif /* __MANTIS_VP2033_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+index ce73d6b..51b082f 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.c
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -18,22 +18,153 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "tda1002x.h"
+ #include "mantis_common.h"
+ #include "mantis_vp2040.h"
+
+ #define MANTIS_MODEL_NAME "VP-2040"
+ #define MANTIS_DEV_TYPE "DVB-C"
+
+-struct mantis_hwconfig vp2040_mantis_config = {
++struct tda1002x_config vp2040_tda1002x_cu1216_config = {
++ .demod_address = 0x18 >> 1,
++ .invert = 1,
++};
++
++struct tda10023_config vp2040_tda10023_cu1216_config = {
++ .demod_address = 0x18 >> 1,
++ .invert = 1,
++};
++
++static int tda1002x_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
++{
++ struct mantis_pci *mantis = fe->dvb->priv;
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ u8 buf[6];
++ struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = buf,.len = sizeof (buf) };
++ int i;
++
++#define CU1216_IF 36125000
++#define TUNER_MUL 62500
++
++ u32 div = (params->frequency + CU1216_IF + TUNER_MUL / 2) / TUNER_MUL;
++
++ buf[0] = (div >> 8) & 0x7f;
++ buf[1] = div & 0xff;
++ buf[2] = 0xce;
++ buf[3] = (params->frequency < 150000000 ? 0x01 :
++ params->frequency < 445000000 ? 0x02 : 0x04);
++ buf[4] = 0xde;
++ buf[5] = 0x20;
++
++ if (fe->ops.i2c_gate_ctrl)
++ fe->ops.i2c_gate_ctrl(fe, 1);
++
++ if (i2c_transfer(adapter, &msg, 1) != 1)
++ return -EIO;
++
++ /* wait for the pll lock */
++ msg.flags = I2C_M_RD;
++ msg.len = 1;
++ for (i = 0; i < 20; i++) {
++ if (fe->ops.i2c_gate_ctrl)
++ fe->ops.i2c_gate_ctrl(fe, 1);
++
++ if (i2c_transfer(adapter, &msg, 1) == 1 && (buf[0] & 0x40))
++ break;
++
++ msleep(10);
++ }
++
++ /* switch the charge pump to the lower current */
++ msg.flags = 0;
++ msg.len = 2;
++ msg.buf = &buf[2];
++ buf[2] &= ~0x40;
++ if (fe->ops.i2c_gate_ctrl)
++ fe->ops.i2c_gate_ctrl(fe, 1);
++
++ if (i2c_transfer(adapter, &msg, 1) != 1)
++ return -EIO;
++
++ return 0;
++}
++
++static u8 read_pwm(struct mantis_pci *mantis)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ u8 b = 0xff;
++ u8 pwm;
++ struct i2c_msg msg[] = {
++ {.addr = 0x50, .flags = 0, .buf = &b, .len = 1},
++ {.addr = 0x50, .flags = I2C_M_RD, .buf = &pwm, .len = 1}
++ };
++
++ if ((i2c_transfer(adapter, msg, 2) != 2)
++ || (pwm == 0xff))
++ pwm = 0x48;
++
++ return pwm;
++}
++
++static int vp2040_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ dprintk(MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ fe = tda10021_attach(&vp2040_tda1002x_cu1216_config,
++ adapter,
++ read_pwm(mantis));
++
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
++ vp2040_tda1002x_cu1216_config.demod_address);
++ } else {
++ fe = tda10023_attach(&vp2040_tda10023_cu1216_config,
++ adapter,
++ read_pwm(mantis));
++
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ vp2040_tda1002x_cu1216_config.demod_address);
++ }
++ }
++
++ if (fe) {
++ fe->ops.tuner_ops.set_params = tda1002x_cu1216_tuner_set;
++ dprintk(MANTIS_ERROR, 1, "Mantis DVB-C Philips CU1216 frontend attach success");
++ } else {
++ return -1;
++ }
++
++ mantis->fe = fe;
++ dprintk(MANTIS_DEBUG, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp2040_config = {
+ .model_name = MANTIS_MODEL_NAME,
+ .dev_type = MANTIS_DEV_TYPE,
+ .ts_size = MANTIS_TS_204,
++
+ .baud_rate = MANTIS_BAUD_9600,
+ .parity = MANTIS_PARITY_NONE,
+ .bytes = 0,
+-};
+
+-struct tda10023_config tda10023_cu1216_config = {
+- .demod_address = 0x18 >> 1,
+- .invert = 1,
++ .frontend_init = vp2040_frontend_init,
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.h b/drivers/media/dvb/mantis/mantis_vp2040.h
+index c745754..d125e21 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.h
++++ b/drivers/media/dvb/mantis/mantis_vp2040.h
+@@ -21,15 +21,12 @@
+ #ifndef __MANTIS_VP2040_H
+ #define __MANTIS_VP2040_H
+
+-#include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "tda1002x.h"
+
+ #define MANTIS_VP_2040_DVB_C 0x0043
+-#define TERRATEC_CINERGY_C_PCI 0x1178
+-#define TECHNISAT_CABLESTAR_HD2 0x0002
++#define CINERGY_C 0x1178
++#define CABLESTAR_HD2 0x0002
+
+-extern struct tda10023_config tda10023_cu1216_config;
+-extern struct mantis_hwconfig vp2040_mantis_config;
++extern struct mantis_hwconfig vp2040_config;
+
+-#endif //__MANTIS_VP2040_H
++#endif /* __MANTIS_VP2040_H */
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index 9ca8040..4b974ee 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -18,6 +18,18 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
++#include <asm/irq.h>
++#include <linux/signal.h>
++#include <linux/sched.h>
++#include <linux/interrupt.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "zl10353.h"
+ #include "mantis_common.h"
+ #include "mantis_vp3030.h"
+
+@@ -28,15 +40,6 @@ struct zl10353_config mantis_vp3030_config = {
+ #define MANTIS_MODEL_NAME "VP-3030"
+ #define MANTIS_DEV_TYPE "DVB-T"
+
+-struct mantis_hwconfig vp3030_mantis_config = {
+- .model_name = MANTIS_MODEL_NAME,
+- .dev_type = MANTIS_DEV_TYPE,
+- .ts_size = MANTIS_TS_188,
+- .baud_rate = MANTIS_BAUD_9600,
+- .parity = MANTIS_PARITY_NONE,
+- .bytes = 0,
+-};
+-
+ int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
+ struct dvb_frontend_parameters *params)
+ {
+@@ -63,3 +66,31 @@ int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
+
+ return 0;
+ }
++
++static int vp3030_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
++{
++ struct i2c_adapter *adapter = &mantis->adapter;
++
++ dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
++ fe = zl10353_attach(&mantis_vp3030_config, adapter);
++
++ if (!fe)
++ return -1;
++
++ mantis->fe = fe;
++ dprintk(MANTIS_ERROR, 1, "Done!");
++
++ return 0;
++}
++
++struct mantis_hwconfig vp3030_config = {
++ .model_name = MANTIS_MODEL_NAME,
++ .dev_type = MANTIS_DEV_TYPE,
++ .ts_size = MANTIS_TS_188,
++
++ .baud_rate = MANTIS_BAUD_9600,
++ .parity = MANTIS_PARITY_NONE,
++ .bytes = 0,
++
++ .frontend_init = vp3030_frontend_init,
++};
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.h b/drivers/media/dvb/mantis/mantis_vp3030.h
+index acc50a4..0a110ba 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.h
++++ b/drivers/media/dvb/mantis/mantis_vp3030.h
+@@ -21,14 +21,10 @@
+ #ifndef __MANTIS_VP3030_H
+ #define __MANTIS_VP3030_H
+
+-#include "dvb_frontend.h"
+ #include "mantis_common.h"
+-#include "dvb-pll.h"
+-#include "zl10353.h"
+
+ #define MANTIS_VP_3030_DVB_T 0x0024
+
+-extern struct zl10353_config mantis_vp3030_config;
+-extern struct mantis_hwconfig vp3030_mantis_config;
++extern struct mantis_hwconfig vp3030_config;
+
+-#endif // __MANTIS_VP3030_H
++#endif /* __MANTIS_VP3030_H */
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0096-V4L-DVB-13796-Mantis-Add-missing-file-in-previous-co.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0096-V4L-DVB-13796-Mantis-Add-missing-file-in-previous-co.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,58 @@
+From b25634d125f19cc7836dd9a7ec202feb7ea54c37 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:41:52 -0300
+Subject: [PATCH 096/120] V4L/DVB (13796): [Mantis] Add missing file in previous commit
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit ad0ac434cb3b34640a4e81d7e80a1512c6e40253)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_ioc.h | 31 +++++++++++++++++++++++++++++++
+ 1 files changed, 31 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_ioc.h
+
+diff --git a/drivers/media/dvb/mantis/mantis_ioc.h b/drivers/media/dvb/mantis/mantis_ioc.h
+new file mode 100644
+index 0000000..2052640
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_ioc.h
+@@ -0,0 +1,31 @@
++#ifndef __MANTIS_IOC_H
++#define __MANTIS_IOC_H
++
++#define GPIF_A00 0x00
++#define GPIF_A01 0x01
++#define GPIF_A02 0x02
++#define GPIF_A03 0x03
++#define GPIF_A04 0x04
++#define GPIF_A05 0x05
++#define GPIF_A06 0x06
++#define GPIF_A07 0x07
++#define GPIF_A08 0x08
++#define GPIF_A09 0x09
++#define GPIF_A10 0x0a
++#define GPIF_A11 0x0b
++
++#define GPIF_A12 0x0c
++#define GPIF_A13 0x0d
++#define GPIF_A14 0x0e
++
++enum mantis_stream_control {
++ STREAM_TO_HIF = 0,
++ STREAM_TO_CAM
++};
++
++extern int mantis_get_mac(struct mantis_pci *mantis);
++extern void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value);
++
++extern int mantis_stream_control(struct mantis_pci *mantis, enum mantis_stream_control stream_ctl);
++
++#endif /* __MANTIS_IOC_H */
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0097-V4L-DVB-13797-Mantis-Hopper-TDA665x-Large-overhaul.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0097-V4L-DVB-13797-Mantis-Hopper-TDA665x-Large-overhaul.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,902 @@
+From 5cda8f1fd8c3f76a70ce98448e17fa738e15a63c Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:56:35 -0300
+Subject: [PATCH 097/120] V4L/DVB (13797): [Mantis/Hopper/TDA665x] Large overhaul,
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* Initial go at VP-3028, VP-3030 devices.
+* I2C communication improvements,
+* Add TDA665x support
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked with minor conflict from commit 3e978a8284080d801d20cda377d9cf7c12fe68b9)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/Kconfig | 11 ++
+ drivers/media/dvb/frontends/Makefile | 1 +
+ drivers/media/dvb/frontends/tda665x.c | 257 ++++++++++++++++++++++++++++++
+ drivers/media/dvb/frontends/tda665x.h | 52 ++++++
+ drivers/media/dvb/mantis/hopper_cards.c | 1 -
+ drivers/media/dvb/mantis/mantis_cards.c | 11 +-
+ drivers/media/dvb/mantis/mantis_dma.c | 3 +-
+ drivers/media/dvb/mantis/mantis_dvb.c | 22 ++-
+ drivers/media/dvb/mantis/mantis_i2c.c | 141 +++++++++++------
+ drivers/media/dvb/mantis/mantis_i2c.h | 3 +
+ drivers/media/dvb/mantis/mantis_ioc.c | 42 ++----
+ drivers/media/dvb/mantis/mantis_vp3030.c | 52 +++---
+ 12 files changed, 479 insertions(+), 117 deletions(-)
+ create mode 100644 drivers/media/dvb/frontends/tda665x.c
+ create mode 100644 drivers/media/dvb/frontends/tda665x.h
+
+diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig
+index d7c4837..5a1d66c 100644
+--- a/drivers/media/dvb/frontends/Kconfig
++++ b/drivers/media/dvb/frontends/Kconfig
+@@ -557,6 +557,17 @@ config DVB_LGS8GXX
+ help
+ A DMB-TH tuner module. Say Y when you want to support this frontend.
+
++config DVB_TDA665x
++ tristate "TDA665x tuner"
++ depends on DVB_CORE && I2C
++ default m if DVB_FE_CUSTOMISE
++ help
++ Support for tuner modules based on Philips TDA6650/TDA6651 chips.
++ Say Y when you want to support this chip.
++
++ Currently supported tuners:
++ * Panasonic ENV57H12D5 (ET-50DT)
++
+ comment "Tools to develop new frontends"
+
+ config DVB_DUMMY_FE
+diff --git a/drivers/media/dvb/frontends/Makefile b/drivers/media/dvb/frontends/Makefile
+index 3523767..af944a8 100644
+--- a/drivers/media/dvb/frontends/Makefile
++++ b/drivers/media/dvb/frontends/Makefile
+@@ -63,6 +63,7 @@ obj-$(CONFIG_DVB_TDA10048) += tda10048.o
+ obj-$(CONFIG_DVB_TUNER_CX24113) += cx24113.o
+ obj-$(CONFIG_DVB_S5H1411) += s5h1411.o
+ obj-$(CONFIG_DVB_LGS8GL5) += lgs8gl5.o
++obj-$(CONFIG_DVB_TDA665x) += tda665x.o
+ obj-$(CONFIG_DVB_LGS8GXX) += lgs8gxx.o
+ obj-$(CONFIG_DVB_DUMMY_FE) += dvb_dummy_fe.o
+ obj-$(CONFIG_DVB_AF9013) += af9013.o
+diff --git a/drivers/media/dvb/frontends/tda665x.c b/drivers/media/dvb/frontends/tda665x.c
+new file mode 100644
+index 0000000..0732a2d
+--- /dev/null
++++ b/drivers/media/dvb/frontends/tda665x.c
+@@ -0,0 +1,257 @@
++/*
++ TDA665x tuner driver
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++
++#include "dvb_frontend.h"
++#include "tda665x.h"
++
++struct tda665x_state {
++ struct dvb_frontend *fe;
++ struct i2c_adapter *i2c;
++ const struct tda665x_config *config;
++
++ u32 frequency;
++ u32 bandwidth;
++};
++
++static int tda665x_read(struct tda665x_state *state, u8 *buf)
++{
++ const struct tda665x_config *config = state->config;
++ int err = 0;
++ struct i2c_msg msg = { .addr = config->addr, .flags = I2C_M_RD, .buf = buf, .len = 2 };
++
++ err = i2c_transfer(state->i2c, &msg, 1);
++ if (err != 1)
++ goto exit;
++
++ return err;
++exit:
++ printk("%s: I/O Error err=<%d>\n", __func__, err);
++ return err;
++}
++
++static int tda665x_write(struct tda665x_state *state, u8 *buf, u8 length)
++{
++ const struct tda665x_config *config = state->config;
++ int err = 0;
++ struct i2c_msg msg = { .addr = config->addr, .flags = 0, .buf = buf, .len = length };
++
++ err = i2c_transfer(state->i2c, &msg, 1);
++ if (err != 1)
++ goto exit;
++
++ return err;
++exit:
++ printk("%s: I/O Error err=<%d>\n", __func__, err);
++ return err;
++}
++
++static int tda665x_get_state(struct dvb_frontend *fe,
++ enum tuner_param param,
++ struct tuner_state *tstate)
++{
++ struct tda665x_state *state = fe->tuner_priv;
++ int err = 0;
++
++ switch (param) {
++ case DVBFE_TUNER_FREQUENCY:
++ tstate->frequency = state->frequency;
++ break;
++ case DVBFE_TUNER_BANDWIDTH:
++ break;
++ default:
++ printk("%s: Unknown parameter (param=%d)\n", __func__, param);
++ err = -EINVAL;
++ break;
++ }
++
++ return err;
++}
++
++static int tda665x_get_status(struct dvb_frontend *fe, u32 *status)
++{
++ struct tda665x_state *state = fe->tuner_priv;
++ u8 result = 0;
++ int err = 0;
++
++ *status = 0;
++
++ err = tda665x_read(state, &result);
++ if (err < 0)
++ goto exit;
++
++ if ((result >> 6) & 0x01) {
++ printk("%s: Tuner Phase Locked\n", __func__);
++ *status = 1;
++ }
++
++ return err;
++exit:
++ printk("%s: I/O Error\n", __func__);
++ return err;
++}
++
++static int tda665x_set_state(struct dvb_frontend *fe,
++ enum tuner_param param,
++ struct tuner_state *tstate)
++{
++ struct tda665x_state *state = fe->tuner_priv;
++ const struct tda665x_config *config = state->config;
++ u32 frequency, status = 0;
++ u8 buf[4];
++ int err = 0;
++
++ if (param & DVBFE_TUNER_FREQUENCY) {
++
++ frequency = tstate->frequency;
++ if ((frequency < config->frequency_max) || (frequency > config->frequency_min)) {
++ printk("%s: Frequency beyond limits, frequency=%d\n", __func__, frequency);
++ return -EINVAL;
++ }
++
++ frequency += config->frequency_offst;
++ frequency *= config->ref_multiplier;
++ frequency += config->ref_divider >> 1;
++ frequency /= config->ref_divider;
++
++ buf[0] = (u8 ) (frequency & 0x7f00) >> 8;
++ buf[1] = (u8 ) (frequency & 0x00ff) >> 0;
++ buf[2] = 0x80 | 0x40 | 0x02;
++ buf[3] = 0x00;
++
++ /* restore frequency */
++ frequency = tstate->frequency;
++
++ if (frequency < 153000000) {
++ /* VHF-L */
++ buf[3] |= 0x01; /* fc, Low Band, 47 - 153 MHz */
++ if (frequency < 68000000)
++ buf[3] |= 0x40; /* 83uA */
++ if (frequency < 1040000000)
++ buf[3] |= 0x60; /* 122uA */
++ if (frequency < 1250000000)
++ buf[3] |= 0x80; /* 163uA */
++ else
++ buf[3] |= 0xa0; /* 254uA */
++ } else if (frequency < 438000000) {
++ /* VHF-H */
++ buf[3] |= 0x02; /* fc, Mid Band, 153 - 438 MHz */
++ if (frequency < 230000000)
++ buf[3] |= 0x40;
++ if (frequency < 300000000)
++ buf[3] |= 0x60;
++ else
++ buf[3] |= 0x80;
++ } else {
++ /* UHF */
++ buf[3] |= 0x04; /* fc, High Band, 438 - 862 MHz */
++ if (frequency < 470000000)
++ buf[3] |= 0x60;
++ if (frequency < 526000000)
++ buf[3] |= 0x80;
++ else
++ buf[3] |= 0xa0;
++ }
++
++ /* Set params */
++ err = tda665x_write(state, buf, 5);
++ if (err < 0)
++ goto exit;
++
++ /* sleep for some time */
++ printk("%s: Waiting to Phase LOCK\n", __func__);
++ msleep(20);
++ /* check status */
++ err = tda665x_get_status(fe, &status);
++ if (err < 0)
++ goto exit;
++
++ if (status == 1) {
++ printk("%s: Tuner Phase locked: status=%d\n", __func__, status);
++ state->frequency = frequency; /* cache successful state */
++ } else {
++ printk("%s: No Phase lock: status=%d\n", __func__, status);
++ }
++ } else {
++ printk("%s: Unknown parameter (param=%d)\n", __func__, param);
++ return -EINVAL;
++ }
++
++ return 0;
++exit:
++ printk("%s: I/O Error\n", __func__);
++ return err;
++}
++
++static int tda665x_release(struct dvb_frontend *fe)
++{
++ struct tda665x_state *state = fe->tuner_priv;
++
++ fe->tuner_priv = NULL;
++ kfree(state);
++ return 0;
++}
++
++static struct dvb_tuner_ops tda665x_ops = {
++
++ .set_state = tda665x_set_state,
++ .get_state = tda665x_get_state,
++ .get_status = tda665x_get_status,
++ .release = tda665x_release
++};
++
++struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
++ const struct tda665x_config *config,
++ struct i2c_adapter *i2c)
++{
++ struct tda665x_state *state = NULL;
++ struct dvb_tuner_info *info;
++
++ state = kzalloc(sizeof (struct tda665x_state), GFP_KERNEL);
++ if (state == NULL)
++ goto exit;
++
++ state->config = config;
++ state->i2c = i2c;
++ state->fe = fe;
++ fe->tuner_priv = state;
++ fe->ops.tuner_ops = tda665x_ops;
++ info = &fe->ops.tuner_ops.info;
++
++ memcpy(info->name, config->name, sizeof (config->name));
++ info->frequency_min = config->frequency_min;
++ info->frequency_max = config->frequency_max;
++ info->frequency_step = config->frequency_offst;
++
++ printk("%s: Attaching TDA665x (%s) tuner\n", __func__, info->name);
++
++ return fe;
++
++exit:
++ kfree(state);
++ return NULL;
++}
++EXPORT_SYMBOL(tda665x_attach);
++
++MODULE_DESCRIPTION("TDA665x driver");
++MODULE_AUTHOR("Manu Abraham");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/media/dvb/frontends/tda665x.h b/drivers/media/dvb/frontends/tda665x.h
+new file mode 100644
+index 0000000..c0b544d
+--- /dev/null
++++ b/drivers/media/dvb/frontends/tda665x.h
+@@ -0,0 +1,52 @@
++/*
++ TDA665x tuner driver
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#ifndef __TDA665x_H
++#define __TDA665x_H
++
++struct tda665x_config {
++ char name[128];
++
++ u8 addr;
++ u32 frequency_min;
++ u32 frequency_max;
++ u32 frequency_offst;
++ u32 ref_multiplier;
++ u32 ref_divider;
++};
++
++#if defined(CONFIG_DVB_TDA665x) || (defined(CONFIG_DVB_TDA665x_MODULE) && defined(MODULE))
++
++extern struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
++ const struct tda665x_config *config,
++ struct i2c_adapter *i2c);
++
++#else
++
++static inline struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
++ const struct tda665x_config *config,
++ struct i2c_adapter *i2c)
++{
++ printk(KERN_WARNING "%s: Driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++
++#endif /* CONFIG_DVB_TDA665x */
++
++#endif /* __TDA665x_H */
+diff --git a/drivers/media/dvb/mantis/hopper_cards.c b/drivers/media/dvb/mantis/hopper_cards.c
+index 749e3f3..01a9ff0 100644
+--- a/drivers/media/dvb/mantis/hopper_cards.c
++++ b/drivers/media/dvb/mantis/hopper_cards.c
+@@ -219,7 +219,6 @@ static void __devexit hopper_pci_remove(struct pci_dev *pdev)
+ struct mantis_pci *mantis = pci_get_drvdata(pdev);
+
+ if (mantis) {
+-// mantis_uart_exit(mantis);
+ mantis_dvb_exit(mantis);
+ mantis_dma_exit(mantis);
+ mantis_i2c_exit(mantis);
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+index d486c7f..638177c 100644
+--- a/drivers/media/dvb/mantis/mantis_cards.c
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -50,7 +50,6 @@ static char *label[10] = {
+ "RACK"
+ };
+
+-
+ static irqreturn_t mantis_irq_handler(int irq, void *dev_id)
+ {
+ u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
+@@ -199,6 +198,14 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev, const struct pci_dev
+
+ return err;
+
++fail7:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis UART exit! <%d>", err);
++ mantis_uart_exit(mantis);
++
++fail6:
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis CA exit! <%d>", err);
++ mantis_ca_exit(mantis);
++
+ fail5:
+ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB exit! <%d>", err);
+ mantis_dvb_exit(mantis);
+@@ -228,8 +235,6 @@ static void __devexit mantis_pci_remove(struct pci_dev *pdev)
+ struct mantis_pci *mantis = pci_get_drvdata(pdev);
+
+ if (mantis) {
+- mantis_uart_exit(mantis);
+-// mantis_ca_exit(mantis);
+ mantis_dvb_exit(mantis);
+ mantis_dma_exit(mantis);
+ mantis_i2c_exit(mantis);
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index 8ebcd96..eab3645 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -153,8 +153,7 @@ int mantis_dma_init(struct mantis_pci *mantis)
+ if (mantis_alloc_buffers(mantis) < 0) {
+ dprintk(MANTIS_ERROR, 1, "Error allocating DMA buffer");
+
+- // Stop RISC Engine
+-// mmwrite(mmread(MANTIS_DMA_CTL) & ~MANTIS_RISC_EN, MANTIS_DMA_CTL);
++ /* Stop RISC Engine */
+ mmwrite(0, MANTIS_DMA_CTL);
+
+ goto err;
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index be911d7..42f658b 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -252,14 +252,19 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ err5:
+ tasklet_kill(&mantis->tasklet);
+ dvb_net_release(&mantis->dvbnet);
++
+ err4:
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
++
+ err3:
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_hw);
++
+ err2:
+ dvb_dmxdev_release(&mantis->dmxdev);
++
+ err1:
+ dvb_dmx_release(&mantis->demux);
++
+ err0:
+ dvb_unregister_adapter(&mantis->dvb_adapter);
+
+@@ -271,21 +276,24 @@ int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+ {
+ int err;
+
+- err = mantis_frontend_shutdown(mantis);
+- if (err != 0)
+- dprintk(MANTIS_ERROR, 1, "Frontend exit while POWER ON! <%d>", err);
++ if (mantis->fe) {
++// mantis_ca_exit(mantis);
++ err = mantis_frontend_shutdown(mantis);
++ if (err != 0)
++ dprintk(MANTIS_ERROR, 1, "Frontend exit while POWER ON! <%d>", err);
++
++ dvb_unregister_frontend(mantis->fe);
++ }
+
+-// mantis_ca_exit(mantis);
+ tasklet_kill(&mantis->tasklet);
+ dvb_net_release(&mantis->dvbnet);
++
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_hw);
++
+ dvb_dmxdev_release(&mantis->dmxdev);
+ dvb_dmx_release(&mantis->demux);
+
+- if (mantis->fe)
+- dvb_unregister_frontend(mantis->fe);
+-
+ dprintk(MANTIS_DEBUG, 1, "dvb_unregister_adapter");
+ dvb_unregister_adapter(&mantis->dvb_adapter);
+
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index ba55f0a..16b9e7e 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -35,38 +35,9 @@
+
+ #define I2C_HW_B_MANTIS 0x1c
+
+-static int mantis_ack_wait(struct mantis_pci *mantis)
+-{
+- int rc = 0;
+- u32 timeout = 0;
+-
+- if (wait_event_timeout(mantis->i2c_wq,
+- mantis->mantis_int_stat & MANTIS_INT_I2CDONE,
+- msecs_to_jiffies(50)) == -ERESTARTSYS) {
+-
+- dprintk(MANTIS_DEBUG, 1, "Master !I2CDONE");
+- rc = -EREMOTEIO;
+- }
+-
+- while (!(mantis->mantis_int_stat & MANTIS_INT_I2CRACK)) {
+- dprintk(MANTIS_DEBUG, 1, "Waiting for Slave RACK");
+- mantis->mantis_int_stat = mmread(MANTIS_INT_STAT);
+- msleep(5);
+- timeout++;
+- if (timeout > 500) {
+- dprintk(MANTIS_ERROR, 1, "Slave RACK Fail !");
+- rc = -EREMOTEIO;
+- break;
+- }
+- }
+- udelay(350);
+-
+- return rc;
+-}
+-
+ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ {
+- u32 rxd, i;
++ u32 rxd, i, stat, trials;
+
+ dprintk(MANTIS_INFO, 0, " %s: Address=[0x%02x] <R>[ ",
+ __func__, msg->addr);
+@@ -82,10 +53,15 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+
+ mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
+ mmwrite(rxd, MANTIS_I2CDATA_CTL);
+- if (mantis_ack_wait(mantis) != 0) {
+- dprintk(MANTIS_DEBUG, 1, "ACK failed<R>");
+- return -EREMOTEIO;
++
++ /* wait for xfer completion */
++ for (trials = 0; trials < 100; trials++) {
++ udelay(500);
++ stat = mmread(MANTIS_INT_STAT);
++ if (stat & MANTIS_INT_I2CDONE)
++ break;
+ }
++
+ rxd = mmread(MANTIS_I2CDATA_CTL);
+ msg->buf[i] = (u8)((rxd >> 8) & 0xFF);
+ dprintk(MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+@@ -98,7 +74,7 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ {
+ int i;
+- u32 txd = 0;
++ u32 txd = 0, stat, trials;
+
+ dprintk(MANTIS_INFO, 0, " %s: Address=[0x%02x] <W>[ ",
+ __func__, msg->addr);
+@@ -115,9 +91,13 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+
+ mmwrite(MANTIS_INT_I2CDONE, MANTIS_INT_STAT);
+ mmwrite(txd, MANTIS_I2CDATA_CTL);
+- if (mantis_ack_wait(mantis) != 0) {
+- dprintk(MANTIS_DEBUG, 1, "ACK failed<W>");
+- return -EREMOTEIO;
++
++ /* wait for xfer completion */
++ for (trials = 0; trials < 100; trials++) {
++ udelay(500);
++ stat = mmread(MANTIS_INT_STAT);
++ if (stat & MANTIS_INT_I2CDONE)
++ break;
+ }
+ }
+ dprintk(MANTIS_INFO, 0, "]\n");
+@@ -127,20 +107,77 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+
+ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
+ {
+- int ret = 0, i;
++ int ret = 0, i = 0, trials;
++ u32 stat, data, txd;
+ struct mantis_pci *mantis;
++ struct mantis_hwconfig *config;
+
+ mantis = i2c_get_adapdata(adapter);
++ BUG_ON(!mantis);
++ config = mantis->hwconfig;
++ BUG_ON(!config);
++
++ dprintk(MANTIS_DEBUG, 1, "Messages:%d", num);
+ mutex_lock(&mantis->i2c_lock);
+- for (i = 0; i < num; i++) {
+- if (msgs[i].flags & I2C_M_RD)
+- ret = mantis_i2c_read(mantis, &msgs[i]);
+- else
+- ret = mantis_i2c_write(mantis, &msgs[i]);
+-
+- if (ret < 0)
+- goto bail_out;
++
++ while (i < num) {
++ /* Byte MODE */
++ if (((i + 1) < num) &&
++ (msgs[i].len < 2) &&
++ (msgs[i + 1].len < 2) &&
++ (msgs[i + 1].flags & I2C_M_RD)) {
++
++ dprintk(MANTIS_DEBUG, 0, " Byte MODE:\n");
++
++ /* Read operation */
++ txd = msgs[i].addr << 25 | (0x1 << 24)
++ | (msgs[i].buf[0] << 16)
++ | MANTIS_I2C_RATE_3;
++
++ mmwrite(txd, MANTIS_I2CDATA_CTL);
++ /* wait for xfer completion */
++ for (trials = 0; trials < 100; trials++) {
++ udelay(500);
++ stat = mmread(MANTIS_INT_STAT);
++ if (stat & MANTIS_INT_I2CDONE)
++ break;
++ }
++
++ /* check for xfer completion */
++ if (stat & MANTIS_INT_I2CDONE) {
++ /* check xfer was acknowledged */
++ if (stat & MANTIS_INT_I2CRACK) {
++ data = mmread(MANTIS_I2CDATA_CTL);
++ msgs[i + 1].buf[0] = (data >> 8) & 0xff;
++ dprintk(MANTIS_DEBUG, 0, " Byte <%d> RXD=0x%02x [%02x]\n", 0x0, data, msgs[i + 1].buf[0]);
++ } else {
++ /* I/O error */
++ dprintk(MANTIS_ERROR, 1, " I/O error, LINE:%d", __LINE__);
++ ret = -EIO;
++ break;
++ }
++ } else {
++ /* I/O error */
++ dprintk(MANTIS_ERROR, 1, " I/O error, LINE:%d", __LINE__);
++ ret = -EIO;
++ break;
++ }
++ i += 2; /* Write/Read operation in one go */
++ }
++
++ if (i < num) {
++ if (msgs[i].flags & I2C_M_RD)
++ ret = mantis_i2c_read(mantis, &msgs[i]);
++ else
++ ret = mantis_i2c_write(mantis, &msgs[i]);
++
++ i++;
++ if (ret < 0)
++ goto bail_out;
++ }
++
+ }
++
+ mutex_unlock(&mantis->i2c_lock);
+
+ return num;
+@@ -189,9 +226,9 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ intstat = mmread(MANTIS_INT_STAT);
+ intmask = mmread(MANTIS_INT_MASK);
+ mmwrite(intstat, MANTIS_INT_STAT);
+- mmwrite(intmask | MANTIS_INT_I2CDONE, MANTIS_INT_MASK);
+-
+- dprintk(MANTIS_DEBUG, 1, "Status=<%02x> Mask=<%02x>", intstat, intmask);
++ dprintk(MANTIS_DEBUG, 1, "Disabling I2C interrupt");
++ intmask = mmread(MANTIS_INT_MASK);
++ mmwrite((intmask & ~MANTIS_INT_I2CDONE), MANTIS_INT_MASK);
+
+ return 0;
+ }
+@@ -199,6 +236,12 @@ EXPORT_SYMBOL_GPL(mantis_i2c_init);
+
+ int __devexit mantis_i2c_exit(struct mantis_pci *mantis)
+ {
++ u32 intmask;
++
++ dprintk(MANTIS_DEBUG, 1, "Disabling I2C interrupt");
++ intmask = mmread(MANTIS_INT_MASK);
++ mmwrite((intmask & ~MANTIS_INT_I2CDONE), MANTIS_INT_MASK);
++
+ dprintk(MANTIS_DEBUG, 1, "Removing I2C adapter");
+ return i2c_del_adapter(&mantis->adapter);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.h b/drivers/media/dvb/mantis/mantis_i2c.h
+index 1e49ecf..d40da4f 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.h
++++ b/drivers/media/dvb/mantis/mantis_i2c.h
+@@ -1,6 +1,9 @@
+ #ifndef __MANTIS_I2C_H
+ #define __MANTIS_I2C_H
+
++#define I2C_STOP (1 << 0)
++#define I2C_READ (1 << 1)
++
+ extern int mantis_i2c_init(struct mantis_pci *mantis);
+ extern int mantis_i2c_exit(struct mantis_pci *mantis);
+
+diff --git a/drivers/media/dvb/mantis/mantis_ioc.c b/drivers/media/dvb/mantis/mantis_ioc.c
+index 4700088..448e2c3 100644
+--- a/drivers/media/dvb/mantis/mantis_ioc.c
++++ b/drivers/media/dvb/mantis/mantis_ioc.c
+@@ -36,13 +36,14 @@
+ #include "mantis_reg.h"
+ #include "mantis_ioc.h"
+
+-static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
++static int read_eeprom_bytes(struct mantis_pci *mantis, u8 reg, u8 *data, u8 length)
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
+-
+ int err;
++ u8 buf = reg;
++
+ struct i2c_msg msg[] = {
+- { .addr = 0x50, .flags = 0, .buf = data, .len = 1 },
++ { .addr = 0x50, .flags = 0, .buf = &buf, .len = 1 },
+ { .addr = 0x50, .flags = I2C_M_RD, .buf = data, .len = length },
+ };
+
+@@ -56,32 +57,12 @@ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+
+ return 0;
+ }
+-
+-static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+-{
+- struct i2c_adapter *adapter = &mantis->adapter;
+- int err;
+-
+- struct i2c_msg msg = { .addr = 0x50, .flags = 0, .buf = data, .len = length };
+-
+- err = i2c_transfer(adapter, &msg, 1);
+- if (err < 0) {
+- dprintk(MANTIS_ERROR, 1, "ERROR: i2c write: < err=%i length=0x%02x d0=0x%02x, d1=0x%02x >",
+- err, length, data[0], data[1]);
+-
+- return err;
+- }
+-
+- return 0;
+-}
+-
+ int mantis_get_mac(struct mantis_pci *mantis)
+ {
+ int err;
++ u8 mac_addr[6] = {0};
+
+- mantis->mac_address[0] = 0x08;
+-
+- err = read_eeprom_byte(mantis, &mantis->mac_address[0], 6);
++ err = read_eeprom_bytes(mantis, 0x08, mac_addr, 6);
+ if (err < 0) {
+ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis EEPROM read error <%d>", err);
+
+@@ -90,9 +71,12 @@ int mantis_get_mac(struct mantis_pci *mantis)
+
+ dprintk(MANTIS_ERROR, 0,
+ " MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]\n",
+- mantis->mac_address[0], mantis->mac_address[1],
+- mantis->mac_address[2], mantis->mac_address[3],
+- mantis->mac_address[4], mantis->mac_address[5]);
++ mac_addr[0],
++ mac_addr[1],
++ mac_addr[2],
++ mac_addr[3],
++ mac_addr[4],
++ mac_addr[5]);
+
+ return 0;
+ }
+@@ -103,12 +87,14 @@ void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
+ {
+ u32 cur;
+
++ dprintk(MANTIS_DEBUG, 1, "Set Bit <%d> to <%d>", bitpos, value);
+ cur = mmread(MANTIS_GPIF_ADDR);
+ if (value)
+ mantis->gpio_status = cur | (1 << bitpos);
+ else
+ mantis->gpio_status = cur & (~(1 << bitpos));
+
++ dprintk(MANTIS_DEBUG, 1, "GPIO Value <%02x>", mantis->gpio_status);
+ mmwrite(mantis->gpio_status, MANTIS_GPIF_ADDR);
+ mmwrite(0x00, MANTIS_GPIF_DOUT);
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index 4b974ee..9efcfa7 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -30,46 +30,41 @@
+ #include "dvb_net.h"
+
+ #include "zl10353.h"
++#include "tda665x.h"
+ #include "mantis_common.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
+ #include "mantis_vp3030.h"
+
+ struct zl10353_config mantis_vp3030_config = {
+- .demod_address = 0x0f,
++ .demod_address = 0x0f,
++};
++
++struct tda665x_config env57h12d5_config = {
++ .name = "ENV57H12D5 (ET-50DT)",
++ .addr = 0x60,
++ .frequency_min = 47000000,
++ .frequency_max = 862000000,
++ .frequency_offst = 3616667,
++ .ref_multiplier = 6, /* 1/6 MHz */
++ .ref_divider = 100000, /* 1/6 MHz */
+ };
+
+ #define MANTIS_MODEL_NAME "VP-3030"
+ #define MANTIS_DEV_TYPE "DVB-T"
+
+-int panasonic_en57h12d5_set_params(struct dvb_frontend *fe,
+- struct dvb_frontend_parameters *params)
+-{
+- u8 buf[4];
+- int rc;
+- struct mantis_pci *mantis = fe->dvb->priv;
+-
+- struct i2c_msg tuner_msg = {
+- .addr = 0x60,
+- .flags = 0,
+- .buf = buf,
+- .len = sizeof (buf)
+- };
+-
+- if ((params->frequency < 950000) || (params->frequency > 2150000))
+- return -EINVAL;
+- rc = i2c_transfer(&mantis->adapter, &tuner_msg, 1);
+- if (rc != 1) {
+- printk("%s: I2C Transfer returned [%d]\n", __func__, rc);
+- return -EIO;
+- }
+- msleep_interruptible(1);
+- printk("%s: Send params to tuner ok!!!\n", __func__);
+-
+- return 0;
+-}
+
+ static int vp3030_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
++ struct mantis_hwconfig *config = mantis->hwconfig;
++ int err = 0;
++
++ gpio_set_bits(mantis, config->reset, 0);
++ msleep(100);
++ err = mantis_frontend_power(mantis, POWER_ON);
++ msleep(100);
++ gpio_set_bits(mantis, config->reset, 1);
+
+ dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
+ fe = zl10353_attach(&mantis_vp3030_config, adapter);
+@@ -77,6 +72,7 @@ static int vp3030_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ if (!fe)
+ return -1;
+
++ tda665x_attach(fe, &env57h12d5_config, adapter);
+ mantis->fe = fe;
+ dprintk(MANTIS_ERROR, 1, "Done!");
+
+@@ -93,4 +89,6 @@ struct mantis_hwconfig vp3030_config = {
+ .bytes = 0,
+
+ .frontend_init = vp3030_frontend_init,
++ .power = GPIF_A12,
++ .reset = GPIF_A13,
+ };
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0098-V4L-DVB-13798-Mantis-Enable-power-for-all-cards-use-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0098-V4L-DVB-13798-Mantis-Enable-power-for-all-cards-use-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,546 @@
+From bed5750526eb93a1e12733dd2c4d6baba0299cc5 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 05:57:28 -0300
+Subject: [PATCH 098/120] V4L/DVB (13798): [Mantis] Enable power for all cards, use byte mode only on relevant devices
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit bc832fa2c0310c25ed60204616ccef4f8db088f3)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/hopper_vp3028.c | 27 ++++++++++++----
+ drivers/media/dvb/mantis/mantis_common.h | 13 ++++++--
+ drivers/media/dvb/mantis/mantis_i2c.c | 47 +++++++++++++++++++++------
+ drivers/media/dvb/mantis/mantis_vp1033.c | 36 ++++++++++++++++-----
+ drivers/media/dvb/mantis/mantis_vp1034.c | 32 ++++++++++++++-----
+ drivers/media/dvb/mantis/mantis_vp2033.c | 50 ++++++++++++++++++++---------
+ drivers/media/dvb/mantis/mantis_vp2040.c | 51 ++++++++++++++++++++----------
+ drivers/media/dvb/mantis/mantis_vp3030.c | 22 ++++++++++---
+ 8 files changed, 203 insertions(+), 75 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/hopper_vp3028.c b/drivers/media/dvb/mantis/hopper_vp3028.c
+index ba0c7e5..16b39d3 100644
+--- a/drivers/media/dvb/mantis/hopper_vp3028.c
++++ b/drivers/media/dvb/mantis/hopper_vp3028.c
+@@ -45,17 +45,30 @@ struct zl10353_config hopper_vp3028_config = {
+ static int vp3028_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *fe)
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
++ struct mantis_hwconfig *config = mantis->hwconfig;
+ int err = 0;
+
++ gpio_set_bits(mantis, config->reset, 0);
++ msleep(100);
+ err = mantis_frontend_power(mantis, POWER_ON);
+- mantis_frontend_soft_reset(mantis);
+-
+- dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
+- fe = zl10353_attach(&hopper_vp3028_config, adapter);
+-
+- if (!fe)
+- return -1;
++ msleep(100);
++ gpio_set_bits(mantis, config->reset, 1);
+
++ err = mantis_frontend_power(mantis, POWER_ON);
++ if (err == 0) {
++ msleep(250);
++ dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
++ fe = zl10353_attach(&hopper_vp3028_config, adapter);
++
++ if (!fe)
++ return -1;
++ } else {
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
++
++ return -EIO;
++ }
+ dprintk(MANTIS_ERROR, 1, "Done!");
+
+ return 0;
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index e912c59..6ae3aab 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -32,6 +32,7 @@
+ #define MANTIS_NOTICE 1
+ #define MANTIS_INFO 2
+ #define MANTIS_DEBUG 3
++#define MANTIS_TMG 9
+
+ #define dprintk(y, z, format, arg...) do { \
+ if (z) { \
+@@ -43,6 +44,8 @@
+ printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
+ else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y)) \
+ printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
++ else if ((mantis->verbose > MANTIS_TMG) && (mantis->verbose > y)) \
++ printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
+ } else { \
+ if (mantis->verbose > y) \
+ printk(format , ##arg); \
+@@ -54,9 +57,6 @@
+
+ #define mmwrite(dat, addr) mwrite((dat), (mantis->mmio + (addr)))
+ #define mmread(addr) mread(mantis->mmio + (addr))
+-#define mmand(dat, addr) mmwrite((dat) & mmread(addr), addr)
+-#define mmor(dat, addr) mmwrite((dat) | mmread(addr), addr)
+-#define mmaor(dat, addr) mmwrite((dat) | ((mask) & mmread(addr)), addr)
+
+ #define MANTIS_TS_188 0
+ #define MANTIS_TS_204 1
+@@ -75,6 +75,11 @@
+ .driver_data = (unsigned long) (__configptr) \
+ }
+
++enum mantis_i2c_mode {
++ MANTIS_PAGE_MODE = 0,
++ MANTIS_BYTE_MODE,
++};
++
+ struct mantis_pci;
+
+ struct mantis_hwconfig {
+@@ -91,6 +96,8 @@ struct mantis_hwconfig {
+
+ u8 power;
+ u8 reset;
++
++ enum mantis_i2c_mode i2c_mode;
+ };
+
+ struct mantis_pci {
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 16b9e7e..758f32a 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -35,6 +35,8 @@
+
+ #define I2C_HW_B_MANTIS 0x1c
+
++#define TRIALS 10000
++
+ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ {
+ u32 rxd, i, stat, trials;
+@@ -55,13 +57,25 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ mmwrite(rxd, MANTIS_I2CDATA_CTL);
+
+ /* wait for xfer completion */
+- for (trials = 0; trials < 100; trials++) {
+- udelay(500);
++ for (trials = 0; trials < TRIALS; trials++) {
++ msleep(1);
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CDONE)
+ break;
+ }
+
++ dprintk(MANTIS_TMG, 0, "I2CDONE: trials=%d\n", trials);
++
++ /* wait for xfer completion */
++ for (trials = 0; trials < TRIALS; trials++) {
++ stat = mmread(MANTIS_INT_STAT);
++ if (stat & MANTIS_INT_I2CRACK)
++ break;
++ msleep(1);
++ }
++
++ dprintk(MANTIS_TMG, 0, "I2CRACK: trials=%d\n", trials);
++
+ rxd = mmread(MANTIS_I2CDATA_CTL);
+ msg->buf[i] = (u8)((rxd >> 8) & 0xFF);
+ dprintk(MANTIS_INFO, 0, "%02x ", msg->buf[i]);
+@@ -93,12 +107,24 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ mmwrite(txd, MANTIS_I2CDATA_CTL);
+
+ /* wait for xfer completion */
+- for (trials = 0; trials < 100; trials++) {
+- udelay(500);
++ for (trials = 0; trials < TRIALS; trials++) {
++ msleep(1);
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CDONE)
+ break;
+ }
++
++ dprintk(MANTIS_TMG, 0, "I2CDONE: trials=%d\n", trials);
++
++ /* wait for xfer completion */
++ for (trials = 0; trials < TRIALS; trials++) {
++ stat = mmread(MANTIS_INT_STAT);
++ if (stat & MANTIS_INT_I2CRACK)
++ break;
++ msleep(1);
++ }
++
++ dprintk(MANTIS_TMG, 0, "I2CRACK: trials=%d\n", trials);
+ }
+ dprintk(MANTIS_INFO, 0, "]\n");
+
+@@ -122,10 +148,11 @@ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, in
+
+ while (i < num) {
+ /* Byte MODE */
+- if (((i + 1) < num) &&
+- (msgs[i].len < 2) &&
+- (msgs[i + 1].len < 2) &&
+- (msgs[i + 1].flags & I2C_M_RD)) {
++ if ((config->i2c_mode & MANTIS_BYTE_MODE) &&
++ ((i + 1) < num) &&
++ (msgs[i].len < 2) &&
++ (msgs[i + 1].len < 2) &&
++ (msgs[i + 1].flags & I2C_M_RD)) {
+
+ dprintk(MANTIS_DEBUG, 0, " Byte MODE:\n");
+
+@@ -136,8 +163,8 @@ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, in
+
+ mmwrite(txd, MANTIS_I2CDATA_CTL);
+ /* wait for xfer completion */
+- for (trials = 0; trials < 100; trials++) {
+- udelay(500);
++ for (trials = 0; trials < TRIALS; trials++) {
++ msleep(1);
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CDONE)
+ break;
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index f2092ce..0bea6e8 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -31,7 +31,10 @@
+
+ #include "stv0299.h"
+ #include "mantis_common.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
+ #include "mantis_vp1033.h"
++#include "mantis_reg.h"
+
+ u8 lgtdqcs001f_inittab[] = {
+ 0x01, 0x15,
+@@ -163,19 +166,32 @@ static int vp1033_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
+
+- dprintk(MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
+- fe = stv0299_attach(&lgtdqcs001f_config, adapter);
++ int err = 0;
+
+- if (fe) {
+- fe->ops.tuner_ops.set_params = lgtdqcs001f_tuner_set;
+- dprintk(MANTIS_ERROR, 1, "found STV0299 DVB-S frontend @ 0x%02x",
+- lgtdqcs001f_config.demod_address);
++ err = mantis_frontend_power(mantis, POWER_ON);
++ if (err == 0) {
++ mantis_frontend_soft_reset(mantis);
++ msleep(250);
+
+- dprintk(MANTIS_ERROR, 1, "Mantis DVB-S STV0299 frontend attach success");
++ dprintk(MANTIS_ERROR, 1, "Probing for STV0299 (DVB-S)");
++ fe = stv0299_attach(&lgtdqcs001f_config, adapter);
++
++ if (fe) {
++ fe->ops.tuner_ops.set_params = lgtdqcs001f_tuner_set;
++ dprintk(MANTIS_ERROR, 1, "found STV0299 DVB-S frontend @ 0x%02x",
++ lgtdqcs001f_config.demod_address);
++
++ dprintk(MANTIS_ERROR, 1, "Mantis DVB-S STV0299 frontend attach success");
++ } else {
++ return -1;
++ }
+ } else {
+- return -1;
+- }
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
+
++ return -EIO;
++ }
+ mantis->fe = fe;
+ dprintk(MANTIS_ERROR, 1, "Done!");
+
+@@ -192,4 +208,6 @@ struct mantis_hwconfig vp1033_config = {
+ .bytes = 0,
+
+ .frontend_init = vp1033_frontend_init,
++ .power = GPIF_A12,
++ .reset = GPIF_A13,
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index 40778ec..98a4ec8 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -32,6 +32,7 @@
+ #include "mb86a16.h"
+ #include "mantis_common.h"
+ #include "mantis_ioc.h"
++#include "mantis_dvb.h"
+ #include "mantis_vp1034.h"
+ #include "mantis_reg.h"
+
+@@ -74,17 +75,30 @@ static int vp1034_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
+
+- dprintk(MANTIS_ERROR, 1, "Probing for MB86A16 (DVB-S/DSS)");
+- fe = mb86a16_attach(&vp1034_mb86a16_config, adapter);
+- if (fe) {
+- dprintk(MANTIS_ERROR, 1,
+- "found MB86A16 DVB-S/DSS frontend @0x%02x",
+- vp1034_mb86a16_config.demod_address);
++ int err = 0;
+
++ err = mantis_frontend_power(mantis, POWER_ON);
++ if (err == 0) {
++ mantis_frontend_soft_reset(mantis);
++ msleep(250);
++
++ dprintk(MANTIS_ERROR, 1, "Probing for MB86A16 (DVB-S/DSS)");
++ fe = mb86a16_attach(&vp1034_mb86a16_config, adapter);
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found MB86A16 DVB-S/DSS frontend @0x%02x",
++ vp1034_mb86a16_config.demod_address);
++
++ } else {
++ return -1;
++ }
+ } else {
+- return -1;
+- }
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
+
++ return -EIO;
++ }
+ mantis->fe = fe;
+ dprintk(MANTIS_ERROR, 1, "Done!");
+
+@@ -101,4 +115,6 @@ struct mantis_hwconfig vp1034_config = {
+ .bytes = 0,
+
+ .frontend_init = vp1034_frontend_init,
++ .power = GPIF_A12,
++ .reset = GPIF_A13,
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 8773291..cef108c 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -31,6 +31,8 @@
+
+ #include "tda1002x.h"
+ #include "mantis_common.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
+ #include "mantis_vp2033.h"
+
+ #define MANTIS_MODEL_NAME "VP-2033"
+@@ -123,32 +125,46 @@ static int vp2033_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
+
+- dprintk(MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- fe = tda10021_attach(&vp2033_tda1002x_cu1216_config,
+- adapter,
+- read_pwm(mantis));
++ int err = 0;
+
+- if (fe) {
+- dprintk(MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+- vp2033_tda1002x_cu1216_config.demod_address);
+- } else {
+- fe = tda10023_attach(&vp2033_tda10023_cu1216_config,
++ err = mantis_frontend_power(mantis, POWER_ON);
++ if (err == 0) {
++ mantis_frontend_soft_reset(mantis);
++ msleep(250);
++
++ dprintk(MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ fe = tda10021_attach(&vp2033_tda1002x_cu1216_config,
+ adapter,
+ read_pwm(mantis));
+
+ if (fe) {
+ dprintk(MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+ vp2033_tda1002x_cu1216_config.demod_address);
++ } else {
++ fe = tda10023_attach(&vp2033_tda10023_cu1216_config,
++ adapter,
++ read_pwm(mantis));
++
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ vp2033_tda1002x_cu1216_config.demod_address);
++ }
+ }
+- }
+
+- if (fe) {
+- fe->ops.tuner_ops.set_params = tda1002x_cu1216_tuner_set;
+- dprintk(MANTIS_ERROR, 1, "Mantis DVB-C Philips CU1216 frontend attach success");
++ if (fe) {
++ fe->ops.tuner_ops.set_params = tda1002x_cu1216_tuner_set;
++ dprintk(MANTIS_ERROR, 1, "Mantis DVB-C Philips CU1216 frontend attach success");
++ } else {
++ return -1;
++ }
+ } else {
+- return -1;
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
++
++ return -EIO;
+ }
+
+ mantis->fe = fe;
+@@ -167,4 +183,6 @@ struct mantis_hwconfig vp2033_config = {
+ .bytes = 0,
+
+ .frontend_init = vp2033_frontend_init,
++ .power = GPIF_A12,
++ .reset = GPIF_A13,
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+index 51b082f..e201988 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.c
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -31,6 +31,8 @@
+
+ #include "tda1002x.h"
+ #include "mantis_common.h"
++#include "mantis_ioc.h"
++#include "mantis_dvb.h"
+ #include "mantis_vp2040.h"
+
+ #define MANTIS_MODEL_NAME "VP-2040"
+@@ -123,34 +125,47 @@ static int vp2040_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ {
+ struct i2c_adapter *adapter = &mantis->adapter;
+
+- dprintk(MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
+- fe = tda10021_attach(&vp2040_tda1002x_cu1216_config,
+- adapter,
+- read_pwm(mantis));
++ int err = 0;
+
+- if (fe) {
+- dprintk(MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+- vp2040_tda1002x_cu1216_config.demod_address);
+- } else {
+- fe = tda10023_attach(&vp2040_tda10023_cu1216_config,
++ err = mantis_frontend_power(mantis, POWER_ON);
++ if (err == 0) {
++ mantis_frontend_soft_reset(mantis);
++ msleep(250);
++
++ dprintk(MANTIS_ERROR, 1, "Probing for CU1216 (DVB-C)");
++ fe = tda10021_attach(&vp2040_tda1002x_cu1216_config,
+ adapter,
+ read_pwm(mantis));
+
+ if (fe) {
+ dprintk(MANTIS_ERROR, 1,
+- "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ "found Philips CU1216 DVB-C frontend (TDA10021) @ 0x%02x",
+ vp2040_tda1002x_cu1216_config.demod_address);
++ } else {
++ fe = tda10023_attach(&vp2040_tda10023_cu1216_config,
++ adapter,
++ read_pwm(mantis));
++
++ if (fe) {
++ dprintk(MANTIS_ERROR, 1,
++ "found Philips CU1216 DVB-C frontend (TDA10023) @ 0x%02x",
++ vp2040_tda1002x_cu1216_config.demod_address);
++ }
+ }
+- }
+
+- if (fe) {
+- fe->ops.tuner_ops.set_params = tda1002x_cu1216_tuner_set;
+- dprintk(MANTIS_ERROR, 1, "Mantis DVB-C Philips CU1216 frontend attach success");
++ if (fe) {
++ fe->ops.tuner_ops.set_params = tda1002x_cu1216_tuner_set;
++ dprintk(MANTIS_ERROR, 1, "Mantis DVB-C Philips CU1216 frontend attach success");
++ } else {
++ return -1;
++ }
+ } else {
+- return -1;
+- }
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
+
++ return -EIO;
++ }
+ mantis->fe = fe;
+ dprintk(MANTIS_DEBUG, 1, "Done!");
+
+@@ -167,4 +182,6 @@ struct mantis_hwconfig vp2040_config = {
+ .bytes = 0,
+
+ .frontend_init = vp2040_frontend_init,
++ .power = GPIF_A12,
++ .reset = GPIF_A13,
+ };
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index 9efcfa7..a44fac3 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -66,13 +66,23 @@ static int vp3030_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ msleep(100);
+ gpio_set_bits(mantis, config->reset, 1);
+
+- dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
+- fe = zl10353_attach(&mantis_vp3030_config, adapter);
++ if (err == 0) {
++ msleep(250);
++ dprintk(MANTIS_ERROR, 1, "Probing for 10353 (DVB-T)");
++ fe = zl10353_attach(&mantis_vp3030_config, adapter);
+
+- if (!fe)
+- return -1;
++ if (!fe)
++ return -1;
+
+- tda665x_attach(fe, &env57h12d5_config, adapter);
++ tda665x_attach(fe, &env57h12d5_config, adapter);
++ } else {
++ dprintk(MANTIS_ERROR, 1, "Frontend on <%s> POWER ON failed! <%d>",
++ adapter->name,
++ err);
++
++ return -EIO;
++
++ }
+ mantis->fe = fe;
+ dprintk(MANTIS_ERROR, 1, "Done!");
+
+@@ -91,4 +101,6 @@ struct mantis_hwconfig vp3030_config = {
+ .frontend_init = vp3030_frontend_init,
+ .power = GPIF_A12,
+ .reset = GPIF_A13,
++
++ .i2c_mode = MANTIS_BYTE_MODE
+ };
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0099-V4L-DVB-13799-Mantis-Unregister-frontend.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0099-V4L-DVB-13799-Mantis-Unregister-frontend.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,43 @@
+From 9d6c22360a60be59a4c7d9d3d102944892f7cd2a Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 09:01:35 -0300
+Subject: [PATCH 099/120] V4L/DVB (13799): [Mantis] Unregister frontend
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 68fe255cd15cf1fe04877fbbb0eafe80c43eff5d)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dvb.c | 5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 42f658b..9d9c558 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -252,7 +252,8 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ err5:
+ tasklet_kill(&mantis->tasklet);
+ dvb_net_release(&mantis->dvbnet);
+-
++ dvb_unregister_frontend(mantis->fe);
++ dvb_frontend_detach(mantis->fe);
+ err4:
+ mantis->demux.dmx.remove_frontend(&mantis->demux.dmx, &mantis->fe_mem);
+
+@@ -281,7 +282,7 @@ int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+ err = mantis_frontend_shutdown(mantis);
+ if (err != 0)
+ dprintk(MANTIS_ERROR, 1, "Frontend exit while POWER ON! <%d>", err);
+-
++ dvb_frontend_detach(mantis->fe);
+ dvb_unregister_frontend(mantis->fe);
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0100-V4L-DVB-13800-Mantis-I2C-optimization.-Required-dela.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0100-V4L-DVB-13800-Mantis-I2C-optimization.-Required-dela.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,66 @@
+From da09e1f2f9a261045f6ebef4f42ad4b6db324846 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 4 Dec 2009 09:02:00 -0300
+Subject: [PATCH 100/120] V4L/DVB (13800): [Mantis] I2C optimization. Required delay is much lesser than 1mS.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Do not wait, keep looping instead.
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 281859179f731b28aae78d13b2e8720219492000)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_i2c.c | 5 -----
+ 1 files changed, 0 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 758f32a..9d2b51d 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -58,7 +58,6 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+
+ /* wait for xfer completion */
+ for (trials = 0; trials < TRIALS; trials++) {
+- msleep(1);
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CDONE)
+ break;
+@@ -71,7 +70,6 @@ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CRACK)
+ break;
+- msleep(1);
+ }
+
+ dprintk(MANTIS_TMG, 0, "I2CRACK: trials=%d\n", trials);
+@@ -108,7 +106,6 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+
+ /* wait for xfer completion */
+ for (trials = 0; trials < TRIALS; trials++) {
+- msleep(1);
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CDONE)
+ break;
+@@ -121,7 +118,6 @@ static int mantis_i2c_write(struct mantis_pci *mantis, const struct i2c_msg *msg
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CRACK)
+ break;
+- msleep(1);
+ }
+
+ dprintk(MANTIS_TMG, 0, "I2CRACK: trials=%d\n", trials);
+@@ -164,7 +160,6 @@ static int mantis_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, in
+ mmwrite(txd, MANTIS_I2CDATA_CTL);
+ /* wait for xfer completion */
+ for (trials = 0; trials < TRIALS; trials++) {
+- msleep(1);
+ stat = mmread(MANTIS_INT_STAT);
+ if (stat & MANTIS_INT_I2CDONE)
+ break;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0101-V4L-DVB-13801-MB86A16-Use-the-search-callback.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0101-V4L-DVB-13801-MB86A16-Use-the-search-callback.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,113 @@
+From 15527b2e2f2c129525e130e271ab20f040302ac4 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Tue, 15 Dec 2009 06:15:27 -0300
+Subject: [PATCH 101/120] V4L/DVB (13801): [MB86A16] Use the search callback
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 5dd83a35bea908ebb8243d67d8c251eed2bb5cc8)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 45 +++++++++++++++-----------------
+ 1 files changed, 21 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index eddb35b..33387b7 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -1487,16 +1487,19 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ } else {
+ dprintk(verbose, MB86A16_INFO, 1, "NO -- SYNC");
+ SEQ_set(state, 1);
++ ret = -1;
+ }
+ }
+ } else {
+ dprintk (verbose, MB86A16_INFO, 1, "NO -- SIGNAL");
++ ret = -1;
+ }
+
+ sync = sync_chk(state, &junk);
+ if (sync) {
+ dprintk(verbose, MB86A16_INFO, 1, "******* SYNC *******");
+ freqerr_chk(state, state->frequency, state->srate, 1);
++ ret = 0;
+ break;
+ }
+ }
+@@ -1610,33 +1613,21 @@ err:
+ return -EREMOTEIO;
+ }
+
+-#define MB86A16_FE_ALGO 1
+-
+-static int mb86a16_frontend_algo(struct dvb_frontend *fe)
+-{
+- return MB86A16_FE_ALGO;
+-}
+-
+-static int mb86a16_set_frontend(struct dvb_frontend *fe,
+- struct dvb_frontend_parameters *p,
+- unsigned int mode_flags,
+- int *delay,
+- fe_status_t *status)
++static enum dvbfe_search mb86a16_search(struct dvb_frontend *fe,
++ struct dvb_frontend_parameters *p)
+ {
+- int ret = 0;
+ struct mb86a16_state *state = fe->demodulator_priv;
+
+- if (p != NULL) {
+- state->frequency = p->frequency / 1000;
+- state->srate = p->u.qpsk.symbol_rate / 1000;
+- ret = mb86a16_set_fe(state);
+- }
+- if (!(mode_flags & FE_TUNE_MODE_ONESHOT))
+- mb86a16_read_status(fe, status);
++ state->frequency = p->frequency / 1000;
++ state->srate = p->u.qpsk.symbol_rate / 1000;
+
+- *delay = HZ/3000;
++ if (!mb86a16_set_fe(state)) {
++ dprintk(verbose, MB86A16_ERROR, 1, "Succesfully acquired LOCK");
++ return DVBFE_ALGO_SEARCH_SUCCESS;
++ }
+
+- return ret;
++ dprintk(verbose, MB86A16_ERROR, 1, "Lock acquisition failed!");
++ return DVBFE_ALGO_SEARCH_FAILED;
+ }
+
+ static void mb86a16_release(struct dvb_frontend *fe)
+@@ -1809,6 +1800,11 @@ static int mb86a16_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
+ return 0;
+ }
+
++static enum dvbfe_algo mb86a16_frontend_algo(struct dvb_frontend *fe)
++{
++ return DVBFE_ALGO_CUSTOM;
++}
++
+ static struct dvb_frontend_ops mb86a16_ops = {
+ .info = {
+ .name = "Fujitsu MB86A16 DVB-S",
+@@ -1826,9 +1822,10 @@ static struct dvb_frontend_ops mb86a16_ops = {
+ FE_CAN_FEC_AUTO
+ },
+ .release = mb86a16_release,
+- .tune = mb86a16_set_frontend,
+- .read_status = mb86a16_read_status,
++
+ .get_frontend_algo = mb86a16_frontend_algo,
++ .search = mb86a16_search,
++ .read_status = mb86a16_read_status,
+ .init = mb86a16_init,
+ .sleep = mb86a16_sleep,
+ .read_status = mb86a16_read_status,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0102-V4L-DVB-13802-Mantis-Hopper-Fix-all-build-related-wa.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0102-V4L-DVB-13802-Mantis-Hopper-Fix-all-build-related-wa.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,280 @@
+From f324c94a03ee7aab57ba08fc496354bed5e25568 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Tue, 15 Dec 2009 06:17:54 -0300
+Subject: [PATCH 102/120] V4L/DVB (13802): [Mantis/Hopper] Fix all build related warnings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 0bdc799b8b82cf61c86604291c53998febc96403)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/hopper_cards.c | 4 ----
+ drivers/media/dvb/mantis/hopper_vp3028.c | 1 -
+ drivers/media/dvb/mantis/mantis_ca.c | 1 -
+ drivers/media/dvb/mantis/mantis_cards.c | 13 -------------
+ drivers/media/dvb/mantis/mantis_dvb.c | 1 -
+ drivers/media/dvb/mantis/mantis_evm.c | 1 -
+ drivers/media/dvb/mantis/mantis_hif.c | 17 -----------------
+ drivers/media/dvb/mantis/mantis_ioc.c | 1 -
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 1 -
+ drivers/media/dvb/mantis/mantis_uart.c | 7 +++----
+ drivers/media/dvb/mantis/mantis_vp1033.c | 1 -
+ drivers/media/dvb/mantis/mantis_vp1034.c | 1 -
+ drivers/media/dvb/mantis/mantis_vp1041.c | 1 -
+ drivers/media/dvb/mantis/mantis_vp2033.c | 1 -
+ drivers/media/dvb/mantis/mantis_vp2040.c | 1 -
+ drivers/media/dvb/mantis/mantis_vp3030.c | 1 -
+ 16 files changed, 3 insertions(+), 50 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/hopper_cards.c b/drivers/media/dvb/mantis/hopper_cards.c
+index 01a9ff0..6d5d101 100644
+--- a/drivers/media/dvb/mantis/hopper_cards.c
++++ b/drivers/media/dvb/mantis/hopper_cards.c
+@@ -190,10 +190,6 @@ static int __devinit hopper_pci_probe(struct pci_dev *pdev, const struct pci_dev
+
+ return err;
+
+-fail5:
+- dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB exit! <%d>", err);
+- mantis_dvb_exit(mantis);
+-
+ fail4:
+ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA exit! <%d>", err);
+ mantis_dma_exit(mantis);
+diff --git a/drivers/media/dvb/mantis/hopper_vp3028.c b/drivers/media/dvb/mantis/hopper_vp3028.c
+index 16b39d3..76cad87 100644
+--- a/drivers/media/dvb/mantis/hopper_vp3028.c
++++ b/drivers/media/dvb/mantis/hopper_vp3028.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 4151cba..88899ac 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+index 638177c..0b52f99 100644
+--- a/drivers/media/dvb/mantis/mantis_cards.c
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -197,19 +197,6 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev, const struct pci_dev
+ devs++;
+
+ return err;
+-
+-fail7:
+- dprintk(MANTIS_ERROR, 1, "ERROR: Mantis UART exit! <%d>", err);
+- mantis_uart_exit(mantis);
+-
+-fail6:
+- dprintk(MANTIS_ERROR, 1, "ERROR: Mantis CA exit! <%d>", err);
+- mantis_ca_exit(mantis);
+-
+-fail5:
+- dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB exit! <%d>", err);
+- mantis_dvb_exit(mantis);
+-
+ fail4:
+ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA exit! <%d>", err);
+ mantis_dma_exit(mantis);
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 9d9c558..1e08e31 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -20,7 +20,6 @@
+ #include <linux/kernel.h>
+ #include <linux/bitops.h>
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 2005b24..9304b0e 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -20,7 +20,6 @@
+
+ #include <linux/kernel.h>
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index bb05427..73e5ca0 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -22,7 +22,6 @@
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+@@ -40,22 +39,6 @@
+
+ #include "mantis_reg.h"
+
+-static int mantis_hif_data_available(struct mantis_ca *ca)
+-{
+- struct mantis_pci *mantis = ca->ca_priv;
+- int rc = 0;
+-
+- if (wait_event_interruptible_timeout(ca->hif_data_wq,
+- ca->sbuf_status & MANTIS_SBUF_DATA_AVAIL,
+- msecs_to_jiffies(500)) == -ERESTARTSYS) {
+-
+- dprintk(MANTIS_ERROR, 1, "Adapter(%d) Slot(0): HIF Read wait event timeout !", mantis->num);
+- rc = -EREMOTEIO;
+- }
+- ca->sbuf_status &= ~MANTIS_SBUF_DATA_AVAIL;
+- udelay(2);
+- return rc;
+-}
+
+ static int mantis_hif_sbuf_opdone_wait(struct mantis_ca *ca)
+ {
+diff --git a/drivers/media/dvb/mantis/mantis_ioc.c b/drivers/media/dvb/mantis/mantis_ioc.c
+index 448e2c3..dd66369 100644
+--- a/drivers/media/dvb/mantis/mantis_ioc.c
++++ b/drivers/media/dvb/mantis/mantis_ioc.c
+@@ -21,7 +21,6 @@
+ #include <linux/kernel.h>
+ #include <linux/i2c.h>
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index 90ca356..d6bca3e 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -20,7 +20,6 @@
+
+ #include <linux/kernel.h>
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_uart.c b/drivers/media/dvb/mantis/mantis_uart.c
+index fb423b0..03b47cf 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.c
++++ b/drivers/media/dvb/mantis/mantis_uart.c
+@@ -26,19 +26,18 @@ struct mantis_uart_params {
+ int mantis_uart_read(struct mantis_pci *mantis, u8 *data)
+ {
+ struct mantis_hwconfig *config = mantis->hwconfig;
+- u32 stat, i;
+- unsigned long flags;
++ u32 stat = 0, i;
+
+ /* get data */
+ for (i = 0; i < (config->bytes + 1); i++) {
+
++ stat = mmread(MANTIS_UART_STAT);
++
+ if (stat & MANTIS_UART_RXFIFO_FULL) {
+ dprintk(MANTIS_ERROR, 1, "RX Fifo FULL");
+ }
+ data[i] = mmread(MANTIS_UART_RXD) & 0x3f;
+
+- stat = mmread(MANTIS_UART_STAT);
+-
+ dprintk(MANTIS_DEBUG, 1, "Reading ... <%02x>", data[i] & 0x3f);
+
+ if (data[i] & (1 << 7)) {
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index 0bea6e8..c9760b0 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index 98a4ec8..7ddd149 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 1181fad..368fc81 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index cef108c..45f7174 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+index e201988..8471bff 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.c
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index a44fac3..1895e95 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -18,7 +18,6 @@
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0103-V4L-DVB-13803-Remove-unused-dependency-on-CU1216.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0103-V4L-DVB-13803-Remove-unused-dependency-on-CU1216.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,35 @@
+From c1a744100db3fb31154003bbb220c960312a2db1 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 9 Dec 2009 19:00:33 -0300
+Subject: [PATCH 103/120] V4L/DVB (13803): Remove unused dependency on CU1216
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to Matthias Wachter <mathias at waechter.wiz.at>
+for pointing it out.
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 83dbe82bd7766e5045e6561bd44e22b801e7ad76)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Kconfig | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/Kconfig b/drivers/media/dvb/mantis/Kconfig
+index aaf0250..f9219cd 100644
+--- a/drivers/media/dvb/mantis/Kconfig
++++ b/drivers/media/dvb/mantis/Kconfig
+@@ -11,7 +11,6 @@ config DVB_MANTIS
+ tristate "MANTIS based cards"
+ depends on MANTIS_CORE && DVB_CORE && PCI && I2C
+ select DVB_MB86A16
+- select DVB_CU1216
+ select DVB_ZL10353
+ select DVB_STV0299
+ select DVB_PLL
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0104-V4L-DVB-13804-Remove-unused-I2C-Adapter-ID.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0104-V4L-DVB-13804-Remove-unused-I2C-Adapter-ID.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,41 @@
+From 216a7c10f02f68b1244c635de46c62db57d97841 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 9 Dec 2009 19:27:17 -0300
+Subject: [PATCH 104/120] V4L/DVB (13804): Remove unused I2C Adapter ID
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 0ac6e141eb105f5845eb7066b5279709393b1c78)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_i2c.c | 3 ---
+ 1 files changed, 0 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 9d2b51d..7bb4e78 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -33,8 +33,6 @@
+ #include "mantis_reg.h"
+ #include "mantis_i2c.h"
+
+-#define I2C_HW_B_MANTIS 0x1c
+-
+ #define TRIALS 10000
+
+ static int mantis_i2c_read(struct mantis_pci *mantis, const struct i2c_msg *msg)
+@@ -234,7 +232,6 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ i2c_adapter->class = I2C_CLASS_TV_DIGITAL;
+ i2c_adapter->algo = &mantis_algo;
+ i2c_adapter->algo_data = NULL;
+- i2c_adapter->id = I2C_HW_B_MANTIS;
+ i2c_adapter->timeout = 500;
+ i2c_adapter->retries = 3;
+ i2c_adapter->dev.parent = &pdev->dev;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0105-V4L-DVB-13805-Fix-Unregister-the-frontend-before-det.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0105-V4L-DVB-13805-Fix-Unregister-the-frontend-before-det.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,34 @@
+From 3616fb28fc495609da45b8bc07a51dfe6a144ef6 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Wed, 9 Dec 2009 19:59:26 -0300
+Subject: [PATCH 105/120] V4L/DVB (13805): Fix: Unregister the frontend before detaching
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit c5e598a6f89ca7335db9f327e24e3abd13d137cf)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_dvb.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 1e08e31..54bf4ea 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -281,8 +281,8 @@ int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+ err = mantis_frontend_shutdown(mantis);
+ if (err != 0)
+ dprintk(MANTIS_ERROR, 1, "Frontend exit while POWER ON! <%d>", err);
+- dvb_frontend_detach(mantis->fe);
+ dvb_unregister_frontend(mantis->fe);
++ dvb_frontend_detach(mantis->fe);
+ }
+
+ tasklet_kill(&mantis->tasklet);
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0106-V4L-DVB-13806-Register-and-Initialize-Remote-control.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0106-V4L-DVB-13806-Register-and-Initialize-Remote-control.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,366 @@
+From d39695d4641b444297e375989ffb2e07f0b810bb Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Fri, 11 Dec 2009 20:41:07 -0300
+Subject: [PATCH 106/120] V4L/DVB (13806): Register and Initialize Remote control
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit a1497357dce240880d984f4b657b54245f739dbc)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Makefile | 3 +-
+ drivers/media/dvb/mantis/mantis_cards.c | 14 +++
+ drivers/media/dvb/mantis/mantis_common.h | 2 +
+ drivers/media/dvb/mantis/mantis_input.c | 147 ++++++++++++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_uart.c | 55 +++++++++---
+ drivers/media/dvb/mantis/mantis_uart.h | 3 +-
+ 6 files changed, 209 insertions(+), 15 deletions(-)
+ create mode 100644 drivers/media/dvb/mantis/mantis_input.c
+
+diff --git a/drivers/media/dvb/mantis/Makefile b/drivers/media/dvb/mantis/Makefile
+index 399c901..98dc5cd 100644
+--- a/drivers/media/dvb/mantis/Makefile
++++ b/drivers/media/dvb/mantis/Makefile
+@@ -7,7 +7,8 @@ mantis_core-objs := mantis_ioc.o \
+ mantis_evm.o \
+ mantis_hif.o \
+ mantis_ca.o \
+- mantis_pcmcia.o
++ mantis_pcmcia.o \
++ mantis_input.o
+
+ mantis-objs := mantis_cards.o \
+ mantis_vp1033.o \
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+index 0b52f99..f3fefbb 100644
+--- a/drivers/media/dvb/mantis/mantis_cards.c
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -194,9 +194,21 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev, const struct pci_dev
+ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DVB initialization failed <%d>", err);
+ goto fail4;
+ }
++ err = mantis_uart_init(mantis);
++ if (err < 0) {
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis UART initialization failed <%d>", err);
++ goto fail6;
++ }
++
+ devs++;
+
+ return err;
++
++
++ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis UART exit! <%d>", err);
++ mantis_uart_exit(mantis);
++
++fail6:
+ fail4:
+ dprintk(MANTIS_ERROR, 1, "ERROR: Mantis DMA exit! <%d>", err);
+ mantis_dma_exit(mantis);
+@@ -222,6 +234,8 @@ static void __devexit mantis_pci_remove(struct pci_dev *pdev)
+ struct mantis_pci *mantis = pci_get_drvdata(pdev);
+
+ if (mantis) {
++
++ mantis_uart_exit(mantis);
+ mantis_dvb_exit(mantis);
+ mantis_dma_exit(mantis);
+ mantis_i2c_exit(mantis);
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index 6ae3aab..c2d0854 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -170,6 +170,8 @@ struct mantis_pci {
+ wait_queue_head_t uart_wq;
+ struct work_struct uart_work;
+ spinlock_t uart_lock;
++
++ struct input_dev *rc;
+ };
+
+ #define MANTIS_HIF_STATUS (mantis->gpio_status)
+diff --git a/drivers/media/dvb/mantis/mantis_input.c b/drivers/media/dvb/mantis/mantis_input.c
+new file mode 100644
+index 0000000..9395fcf
+--- /dev/null
++++ b/drivers/media/dvb/mantis/mantis_input.c
+@@ -0,0 +1,147 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
++#include <linux/input.h>
++#include <media/ir-common.h>
++#include <linux/pci.h>
++
++#include "dmxdev.h"
++#include "dvbdev.h"
++#include "dvb_demux.h"
++#include "dvb_frontend.h"
++#include "dvb_net.h"
++
++#include "mantis_common.h"
++#include "mantis_reg.h"
++#include "mantis_uart.h"
++
++static struct ir_scancode mantis_ir_table[] = {
++ { 0x29, KEY_POWER },
++ { 0x28, KEY_FAVORITES },
++ { 0x30, KEY_TEXT },
++ { 0x17, KEY_INFO }, // Preview
++ { 0x23, KEY_EPG },
++ { 0x3b, KEY_F22 },// Record List
++ { 0x3c, KEY_1 },
++ { 0x3e, KEY_2 },
++ { 0x39, KEY_3 },
++ { 0x36, KEY_4 },
++ { 0x22, KEY_5 },
++ { 0x20, KEY_6 },
++ { 0x32, KEY_7 },
++ { 0x26, KEY_8 },
++ { 0x24, KEY_9 },
++ { 0x2a, KEY_0 },
++
++ { 0x33, KEY_CANCEL },
++ { 0x2c, KEY_BACK },
++ { 0x15, KEY_CLEAR },
++ { 0x3f, KEY_TAB },
++ { 0x10, KEY_ENTER },
++ { 0x14, KEY_UP },
++ { 0x0d, KEY_RIGHT },
++ { 0x0e, KEY_DOWN },
++ { 0x11, KEY_LEFT },
++
++ { 0x21, KEY_VOLUMEUP },
++ { 0x35, KEY_VOLUMEDOWN },
++ { 0x3d, KEY_CHANNELDOWN },
++ { 0x3a, KEY_CHANNELUP },
++ { 0x2e, KEY_RECORD },
++ { 0x2b, KEY_PLAY },
++ { 0x13, KEY_PAUSE },
++ { 0x25, KEY_STOP },
++
++ { 0x1f, KEY_REWIND },
++ { 0x2d, KEY_FASTFORWARD },
++ { 0x1e, KEY_PREVIOUS }, // Replay |<
++ { 0x1d, KEY_NEXT }, // Skip >|
++
++ { 0x0b, KEY_CAMERA }, // Capture
++ { 0x0f, KEY_LANGUAGE }, // SAP
++ { 0x18, KEY_MODE }, // PIP
++ { 0x12, KEY_ZOOM }, // Full screen,
++ { 0x1c, KEY_SUBTITLE },
++ { 0x2f, KEY_MUTE },
++ { 0x16, KEY_F20 }, // L/R,
++ { 0x38, KEY_F21 }, // Hibernate,
++
++ { 0x37, KEY_SWITCHVIDEOMODE }, // A/V
++ { 0x31, KEY_AGAIN }, // Recall,
++ { 0x1a, KEY_KPPLUS }, // Zoom+,
++ { 0x19, KEY_KPMINUS }, // Zoom-,
++ { 0x27, KEY_RED },
++ { 0x0C, KEY_GREEN },
++ { 0x01, KEY_YELLOW },
++ { 0x00, KEY_BLUE },
++};
++
++struct ir_scancode_table ir_mantis = {
++ .scan = mantis_ir_table,
++ .size = ARRAY_SIZE(mantis_ir_table),
++};
++EXPORT_SYMBOL_GPL(ir_mantis);
++
++int mantis_input_init(struct mantis_pci *mantis)
++{
++ struct input_dev *rc;
++ struct ir_input_state rc_state;
++ char name[80], dev[80];
++ int err;
++
++ rc = input_allocate_device();
++ if (!rc) {
++ dprintk(MANTIS_ERROR, 1, "Input device allocate failed");
++ return -ENOMEM;
++ }
++
++ sprintf(name, "Mantis %s IR receiver", mantis->hwconfig->model_name);
++ sprintf(dev, "pci-%s/ir0", pci_name(mantis->pdev));
++
++ rc->name = name;
++ rc->phys = dev;
++
++ ir_input_init(rc, &rc_state, IR_TYPE_OTHER, &ir_mantis);
++
++ rc->id.bustype = BUS_PCI;
++ rc->id.vendor = mantis->vendor_id;
++ rc->id.product = mantis->device_id;
++ rc->id.version = 1;
++ rc->dev = mantis->pdev->dev;
++
++ err = input_register_device(rc);
++ if (err) {
++ dprintk(MANTIS_ERROR, 1, "IR device registration failed, ret = %d", err);
++ return -ENODEV;
++ }
++
++ mantis->rc = rc;
++
++ return 0;
++}
++
++int mantis_exit(struct mantis_pci *mantis)
++{
++ struct input_dev *rc = mantis->rc;
++
++ input_unregister_device(rc);
++
++ return 0;
++}
+diff --git a/drivers/media/dvb/mantis/mantis_uart.c b/drivers/media/dvb/mantis/mantis_uart.c
+index 03b47cf..7d2f239 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.c
++++ b/drivers/media/dvb/mantis/mantis_uart.c
+@@ -1,7 +1,26 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #include <linux/kernel.h>
+ #include <linux/spinlock.h>
+
+-#include <asm/irq.h>
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+ #include <linux/interrupt.h>
+@@ -21,6 +40,24 @@ struct mantis_uart_params {
+ enum mantis_parity parity;
+ };
+
++static struct {
++ char string[7];
++} rates[5] = {
++ { "9600" },
++ { "19200" },
++ { "38400" },
++ { "57600" },
++ { "115200" }
++};
++
++static struct {
++ char string[5];
++} parity[3] = {
++ { "NONE" },
++ { "ODD" },
++ { "EVEN" }
++};
++
+ #define UART_MAX_BUF 16
+
+ int mantis_uart_read(struct mantis_pci *mantis, u8 *data)
+@@ -60,12 +97,10 @@ static void mantis_uart_work(struct work_struct *work)
+ u8 buf[16];
+ int i;
+
+- dprintk(MANTIS_DEBUG, 1, "UART read");
+ mantis_uart_read(mantis, buf);
+
+- dprintk(MANTIS_DEBUG, 1, "UART: ");
+ for (i = 0; i < (config->bytes + 1); i++)
+- dprintk(MANTIS_DEBUG, 0, "<%02x> ", buf[i]);
++ dprintk(MANTIS_INFO, 1, "UART BUF:%d <%02x> ", i, buf[i]);
+
+ dprintk(MANTIS_DEBUG, 0, "\n");
+ }
+@@ -73,15 +108,8 @@ static void mantis_uart_work(struct work_struct *work)
+ static int mantis_uart_setup(struct mantis_pci *mantis,
+ struct mantis_uart_params *params)
+ {
+- char* rates[] = { "B_9600", "B_19200", "B_38400", "B_57600", "B_115200" };
+- char* parity[] = { "NONE", "ODD", "EVEN" };
+-
+ u32 reg;
+
+- dprintk(MANTIS_DEBUG, 1, "Set Parity <%s> Baud Rate <%s>",
+- parity[params->parity],
+- rates[params->baud_rate]);
+-
+ mmwrite((mmread(MANTIS_UART_CTL) | (params->parity & 0x3)), MANTIS_UART_CTL);
+
+ reg = mmread(MANTIS_UART_BAUD);
+@@ -116,10 +144,12 @@ int mantis_uart_init(struct mantis_pci *mantis)
+ struct mantis_hwconfig *config = mantis->hwconfig;
+ struct mantis_uart_params params;
+
+- dprintk(MANTIS_DEBUG, 1, "Initializing UART ..");
+ /* default parity: */
+ params.baud_rate = config->baud_rate;
+ params.parity = config->parity;
++ dprintk(MANTIS_INFO, 1, "Initializing UART @ %sbps parity:%s",
++ rates[params.baud_rate].string,
++ parity[params.parity].string);
+
+ init_waitqueue_head(&mantis->uart_wq);
+ spin_lock_init(&mantis->uart_lock);
+@@ -142,6 +172,7 @@ int mantis_uart_init(struct mantis_pci *mantis)
+ mmwrite(mmread(MANTIS_UART_CTL) | MANTIS_UART_RXINT, MANTIS_UART_CTL);
+
+ schedule_work(&mantis->uart_work);
++ dprintk(MANTIS_DEBUG, 1, "UART succesfully initialized");
+
+ return 0;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_uart.h b/drivers/media/dvb/mantis/mantis_uart.h
+index 0a42cd0..62ab66e 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.h
++++ b/drivers/media/dvb/mantis/mantis_uart.h
+@@ -45,10 +45,9 @@ enum mantis_baud {
+ };
+
+ enum mantis_parity {
+- MANTIS_PARITY_UNDEFINED = 0,
++ MANTIS_PARITY_NONE = 0,
+ MANTIS_PARITY_EVEN,
+ MANTIS_PARITY_ODD,
+- MANTIS_PARITY_NONE
+ };
+
+ struct mantis_pci;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0107-V4L-DVB-13807-Fix-Free-device-in-the-device-registra.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0107-V4L-DVB-13807-Fix-Free-device-in-the-device-registra.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,32 @@
+From 4196e6642ec1628011591b27d7a098b4c0e77fbb Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Sat, 12 Dec 2009 03:14:25 -0300
+Subject: [PATCH 107/120] V4L/DVB (13807): Fix: Free device in the device registration failure case
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 1e42dc78900e9d0ce89d77f3ba6aca00abd5f1b5)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_input.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_input.c b/drivers/media/dvb/mantis/mantis_input.c
+index 9395fcf..b27d775 100644
+--- a/drivers/media/dvb/mantis/mantis_input.c
++++ b/drivers/media/dvb/mantis/mantis_input.c
+@@ -129,6 +129,7 @@ int mantis_input_init(struct mantis_pci *mantis)
+ err = input_register_device(rc);
+ if (err) {
+ dprintk(MANTIS_ERROR, 1, "IR device registration failed, ret = %d", err);
++ input_free_device(rc);
+ return -ENODEV;
+ }
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0108-V4L-DVB-13809-Fix-Checkpatch-violations.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0108-V4L-DVB-13809-Fix-Checkpatch-violations.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,1073 @@
+From f776c0aa9bf28b3ba46d7663f3dfc48c7dfea2f6 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Tue, 15 Dec 2009 08:47:21 -0300
+Subject: [PATCH 108/120] V4L/DVB (13809): Fix Checkpatch violations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit f5ae4f6f482191c531ea9e50ac91d9bd2ffca171)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 109 +++++++++++++++-------------
+ drivers/media/dvb/frontends/mb86a16.h | 2 +-
+ drivers/media/dvb/frontends/mb86a16_priv.h | 2 +-
+ drivers/media/dvb/frontends/tda665x.c | 32 ++++----
+ drivers/media/dvb/frontends/tda665x.h | 2 +-
+ drivers/media/dvb/mantis/hopper_cards.c | 2 +-
+ drivers/media/dvb/mantis/mantis_ca.c | 4 +-
+ drivers/media/dvb/mantis/mantis_cards.c | 2 +-
+ drivers/media/dvb/mantis/mantis_core.c | 48 ++++++++-----
+ drivers/media/dvb/mantis/mantis_core.h | 14 ++--
+ drivers/media/dvb/mantis/mantis_dma.c | 11 ++--
+ drivers/media/dvb/mantis/mantis_dvb.c | 12 +---
+ drivers/media/dvb/mantis/mantis_i2c.c | 2 +-
+ drivers/media/dvb/mantis/mantis_input.c | 28 ++++----
+ drivers/media/dvb/mantis/mantis_reg.h | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1033.c | 12 ++--
+ drivers/media/dvb/mantis/mantis_vp1034.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1041.c | 9 +--
+ drivers/media/dvb/mantis/mantis_vp2033.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp2040.c | 2 +-
+ 20 files changed, 155 insertions(+), 144 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 33387b7..32f20c6 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -37,11 +37,11 @@ struct mb86a16_state {
+ const struct mb86a16_config *config;
+ struct dvb_frontend frontend;
+
+- // tuning parameters
++ /* tuning parameters */
+ int frequency;
+ int srate;
+
+- // Internal stuff
++ /* Internal stuff */
+ int master_clk;
+ int deci;
+ int csel;
+@@ -105,7 +105,7 @@ static int mb86a16_read(struct mb86a16_state *state, u8 reg, u8 *val)
+ .flags = 0,
+ .buf = b0,
+ .len = 1
+- },{
++ }, {
+ .addr = state->config->demod_address,
+ .flags = I2C_M_RD,
+ .buf = b1,
+@@ -435,7 +435,7 @@ static int signal_det(struct mb86a16_state *state,
+ wait_sym = 80000;
+ }
+ for (i = 0; i < 3; i++) {
+- if (i == 0 )
++ if (i == 0)
+ smrtd = smrt * 98 / 100;
+ else if (i == 1)
+ smrtd = smrt;
+@@ -480,11 +480,11 @@ static int rf_val_set(struct mb86a16_state *state,
+ unsigned char rf_val[5];
+ int ack = -1;
+
+- if (smrt > 37750 )
++ if (smrt > 37750)
+ C = 1;
+ else if (smrt > 18875)
+ C = 2;
+- else if (smrt > 5500 )
++ else if (smrt > 5500)
+ C = 3;
+ else
+ C = 4;
+@@ -526,7 +526,7 @@ static int rf_val_set(struct mb86a16_state *state,
+ rf_val[2] = (M & 0x00ff0) >> 4;
+ rf_val[3] = ((M & 0x0000f) << 4) | B;
+
+- // Frequency Set
++ /* Frequency Set */
+ if (mb86a16_write(state, 0x21, rf_val[0]) < 0)
+ ack = 0;
+ if (mb86a16_write(state, 0x22, rf_val[1]) < 0)
+@@ -655,8 +655,8 @@ static int freqerr_chk(struct mb86a16_state *state,
+ unsigned char CRM, AFCML, AFCMH;
+ unsigned char temp1, temp2, temp3;
+ int crm, afcm, AFCM;
+- int crrerr, afcerr; // [kHz]
+- int frqerr; // [MHz]
++ int crrerr, afcerr; /* kHz */
++ int frqerr; /* MHz */
+ int afcen, afcexen = 0;
+ int R, M, fOSC, fOSC_OFS;
+
+@@ -718,12 +718,12 @@ static int freqerr_chk(struct mb86a16_state *state,
+
+ fOSC_OFS = fOSC - fTP;
+
+- if (unit == 0) { //[MHz]
++ if (unit == 0) { /* MHz */
+ if (crrerr + afcerr + fOSC_OFS * 1000 >= 0)
+ frqerr = (crrerr + afcerr + fOSC_OFS * 1000 + 500) / 1000;
+ else
+ frqerr = (crrerr + afcerr + fOSC_OFS * 1000 - 500) / 1000;
+- } else { //[kHz]
++ } else { /* kHz */
+ frqerr = crrerr + afcerr + fOSC_OFS * 1000;
+ }
+
+@@ -760,13 +760,13 @@ static void swp_info_get(struct mb86a16_state *state,
+
+ crnt_swp_freq = fOSC_start * 1000 + v * swp_ofs;
+
+- if (R == 0 )
++ if (R == 0)
+ *fOSC = (crnt_swp_freq + 1000) / 2000 * 2;
+ else
+ *fOSC = (crnt_swp_freq + 500) / 1000;
+
+ if (*fOSC >= crnt_swp_freq)
+- *afcex_freq = *fOSC *1000 - crnt_swp_freq;
++ *afcex_freq = *fOSC * 1000 - crnt_swp_freq;
+ else
+ *afcex_freq = crnt_swp_freq - *fOSC * 1000;
+
+@@ -782,7 +782,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ int swp_freq ;
+
+ if ((i % 2 == 1) && (v <= vmax)) {
+- // positive v (case 1)
++ /* positive v (case 1) */
+ if ((v - 1 == vmin) &&
+ (*(V + 30 + v) >= 0) &&
+ (*(V + 30 + v - 1) >= 0) &&
+@@ -796,7 +796,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v - 1) >= 0) &&
+ (*(V + 30 + v) > *(V + 30 + v - 1)) &&
+ (*(V + 30 + v) > SIGMIN)) {
+- // (case 2)
++ /* (case 2) */
+ swp_freq = fOSC * 1000 + afcex_freq;
+ *SIG1 = *(V + 30 + v);
+ } else if ((*(V + 30 + v) > 0) &&
+@@ -807,7 +807,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v - 2) > *(V + 30 + v - 3)) &&
+ ((*(V + 30 + v - 1) > SIGMIN) ||
+ (*(V + 30 + v - 2) > SIGMIN))) {
+- // (case 3)
++ /* (case 3) */
+ if (*(V + 30 + v - 1) >= *(V + 30 + v - 2)) {
+ swp_freq = fOSC * 1000 + afcex_freq - swp_ofs;
+ *SIG1 = *(V + 30 + v - 1);
+@@ -823,7 +823,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v - 1) > *(V + 30 + v - 2)) &&
+ ((*(V + 30 + v) > SIGMIN) ||
+ (*(V + 30 + v - 1) > SIGMIN))) {
+- // (case 4)
++ /* (case 4) */
+ if (*(V + 30 + v) >= *(V + 30 + v - 1)) {
+ swp_freq = fOSC * 1000 + afcex_freq;
+ *SIG1 = *(V + 30 + v);
+@@ -835,7 +835,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ swp_freq = -1 ;
+ }
+ } else if ((i % 2 == 0) && (v >= vmin)) {
+- // Negative v (case 1)
++ /* Negative v (case 1) */
+ if ((*(V + 30 + v) > 0) &&
+ (*(V + 30 + v + 1) > 0) &&
+ (*(V + 30 + v + 2) > 0) &&
+@@ -850,7 +850,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v + 1) >= 0) &&
+ (*(V + 30 + v + 1) > *(V + 30 + v)) &&
+ (*(V + 30 + v + 1) > SIGMIN)) {
+- // (case 2)
++ /* (case 2) */
+ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
+ *SIG1 = *(V + 30 + v);
+ } else if ((v == vmin) &&
+@@ -860,18 +860,18 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v) > *(V + 30 + v + 1)) &&
+ (*(V + 30 + v) > *(V + 30 + v + 2)) &&
+ (*(V + 30 + v) > SIGMIN)) {
+- // (case 3)
++ /* (case 3) */
+ swp_freq = fOSC * 1000 + afcex_freq;
+ *SIG1 = *(V + 30 + v);
+ } else if ((*(V + 30 + v) >= 0) &&
+ (*(V + 30 + v + 1) >= 0) &&
+ (*(V + 30 + v + 2) >= 0) &&
+- (*(V +30 + v + 3) >= 0) &&
++ (*(V + 30 + v + 3) >= 0) &&
+ (*(V + 30 + v + 1) > *(V + 30 + v)) &&
+ (*(V + 30 + v + 2) > *(V + 30 + v + 3)) &&
+ ((*(V + 30 + v + 1) > SIGMIN) ||
+ (*(V + 30 + v + 2) > SIGMIN))) {
+- // (case 4)
++ /* (case 4) */
+ if (*(V + 30 + v + 1) >= *(V + 30 + v + 2)) {
+ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
+ *SIG1 = *(V + 30 + v + 1);
+@@ -889,7 +889,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v + 1) > *(V + 30 + v + 3)) &&
+ ((*(V + 30 + v) > SIGMIN) ||
+ (*(V + 30 + v + 1) > SIGMIN))) {
+- // (case 5)
++ /* (case 5) */
+ if (*(V + 30 + v) >= *(V + 30 + v + 1)) {
+ swp_freq = fOSC * 1000 + afcex_freq;
+ *SIG1 = *(V + 30 + v);
+@@ -905,7 +905,7 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ (*(V + 30 + v + 2) > *(V + 30 + v)) &&
+ ((*(V + 30 + v + 1) > SIGMIN) ||
+ (*(V + 30 + v + 2) > SIGMIN))) {
+- // (case 6)
++ /* (case 6) */
+ if (*(V + 30 + v + 1) >= *(V + 30 + v + 2)) {
+ swp_freq = fOSC * 1000 + afcex_freq + swp_ofs;
+ *SIG1 = *(V + 30 + v + 1);
+@@ -916,8 +916,10 @@ static int swp_freq_calcuation(struct mb86a16_state *state, int i, int v, int *V
+ } else if ((vmax == 0) && (vmin == 0) && (*(V + 30 + v) > SIGMIN)) {
+ swp_freq = fOSC * 1000;
+ *SIG1 = *(V + 30 + v);
+- } else swp_freq = -1;
+- } else swp_freq = -1;
++ } else
++ swp_freq = -1;
++ } else
++ swp_freq = -1;
+
+ return swp_freq;
+ }
+@@ -962,7 +964,7 @@ static void afcex_info_get(struct mb86a16_state *state,
+
+ static int SEQ_set(struct mb86a16_state *state, unsigned char loop)
+ {
+- // SLOCK0 = 0
++ /* SLOCK0 = 0 */
+ if (mb86a16_write(state, 0x32, 0x02 | (loop << 2)) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
+ return -EREMOTEIO;
+@@ -973,7 +975,7 @@ static int SEQ_set(struct mb86a16_state *state, unsigned char loop)
+
+ static int iq_vt_set(struct mb86a16_state *state, unsigned char IQINV)
+ {
+- // Viterbi Rate, IQ Settings
++ /* Viterbi Rate, IQ Settings */
+ if (mb86a16_write(state, 0x06, 0xdf | (IQINV << 5)) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "I2C transfer error");
+ return -EREMOTEIO;
+@@ -1031,7 +1033,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ unsigned char TIMINT1, TIMINT2, TIMEXT;
+ unsigned char S0T, S1T;
+ unsigned char S2T;
+-// unsigned char S2T, S3T;
++/* unsigned char S2T, S3T; */
+ unsigned char S4T, S5T;
+ unsigned char AFCEX_L, AFCEX_H;
+ unsigned char R;
+@@ -1052,7 +1054,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ int temp_freq, delta_freq;
+ int dagcm[4];
+ int smrt_d;
+-// int freq_err;
++/* int freq_err; */
+ int n;
+ int ret = -1;
+ int sync;
+@@ -1093,19 +1095,19 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ }
+ if (EN_set(state, CREN, AFCEN) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "EN set error");
+- return -1; // (0, 0)
++ return -1; /* (0, 0) */
+ }
+ if (AFCEXEN_set(state, AFCEXEN, state->srate) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "AFCEXEN set error");
+- return -1; // (1, smrt) = (1, symbolrate)
++ return -1; /* (1, smrt) = (1, symbolrate) */
+ }
+ if (CNTM_set(state, TIMINT1, TIMINT2, TIMEXT) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "CNTM set error");
+- return -1; // (0, 1, 2)
++ return -1; /* (0, 1, 2) */
+ }
+ if (S01T_set(state, S1T, S0T) < 0) {
+ dprintk(verbose, MB86A16_ERROR, 1, "S01T set error");
+- return -1; // (0, 0)
++ return -1; /* (0, 0) */
+ }
+ smrt_info_get(state, state->srate);
+ if (smrt_set(state, state->srate) < 0) {
+@@ -1133,13 +1135,15 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ ftemp = ftemp + swp_ofs;
+ vmax++;
+
+- // Upper bound
++ /* Upper bound */
+ if (ftemp > 2150000) {
+ loop = 0;
+ vmax--;
++ } else {
++ if ((ftemp == 2150000) ||
++ (ftemp - state->frequency * 1000 >= fcp + state->srate / 4))
++ loop = 0;
+ }
+- else if ((ftemp == 2150000) || (ftemp - state->frequency * 1000 >= fcp + state->srate / 4))
+- loop = 0;
+ }
+
+ loop = 1;
+@@ -1149,13 +1153,15 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ ftemp = ftemp - swp_ofs;
+ vmin--;
+
+- // Lower bound
++ /* Lower bound */
+ if (ftemp < 950000) {
+ loop = 0;
+ vmin++;
++ } else {
++ if ((ftemp == 950000) ||
++ (state->frequency * 1000 - ftemp >= fcp + state->srate / 4))
++ loop = 0;
+ }
+- else if ((ftemp == 950000) || (state->frequency * 1000 - ftemp >= fcp + state->srate / 4))
+- loop = 0;
+ }
+
+ wait_t = (8000 + state->srate / 2) / state->srate;
+@@ -1199,7 +1205,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ V[30 + v] = SIG1 ;
+ swp_freq = swp_freq_calcuation(state, i, v, V, vmax, vmin,
+ SIG1MIN, fOSC, afcex_freq,
+- swp_ofs, &SIG1); //changed
++ swp_ofs, &SIG1); /* changed */
+
+ signal_dupl = 0;
+ for (j = 0; j < prev_freq_num; j++) {
+@@ -1291,7 +1297,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ dprintk(verbose, MB86A16_ERROR, 1, "srst error");
+ return -1;
+ }
+- // delay 4~200
++ /* delay 4~200 */
+ wait_t = 200000 / state->master_clk + 200000 / state->srate;
+ msleep(wait_t);
+ afcerr = afcerr_chk(state);
+@@ -1452,7 +1458,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ S2T = 7; S4T = 2; S5T = 8; ETH = 7; VIA = 2;
+ wait_t = 7 + (2097152 + state->srate / 2) / state->srate;
+ }
+- wait_t *= 2; /* FOS */
++ wait_t *= 2; /* FOS */
+ S2T_set(state, S2T);
+ S45T_set(state, S4T, S5T);
+ Vi_set(state, ETH, VIA);
+@@ -1461,13 +1467,14 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ sync = sync_chk(state, &VIRM);
+ dprintk(verbose, MB86A16_INFO, 1, "-------- Viterbi=[%d] SYNC=[%d] ---------", VIRM, sync);
+ if (VIRM) {
+- if (VIRM == 4) { // 5/6
++ if (VIRM == 4) {
++ /* 5/6 */
+ if (SIG1 > 110)
+- wait_t = ( 786432 + state->srate / 2) / state->srate;
++ wait_t = (786432 + state->srate / 2) / state->srate;
+ else
+ wait_t = (1572864 + state->srate / 2) / state->srate;
+ if (state->srate < 5000)
+- // FIXME ! , should be a long wait !
++ /* FIXME ! , should be a long wait ! */
+ msleep_interruptible(wait_t);
+ else
+ msleep_interruptible(wait_t);
+@@ -1477,9 +1484,9 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ FEC_srst(state);
+ }
+ }
+- // 1/2, 2/3, 3/4, 7/8
++ /* 1/2, 2/3, 3/4, 7/8 */
+ if (SIG1 > 110)
+- wait_t = ( 786432 + state->srate / 2) / state->srate;
++ wait_t = (786432 + state->srate / 2) / state->srate;
+ else
+ wait_t = (1572864 + state->srate / 2) / state->srate;
+ msleep_interruptible(wait_t);
+@@ -1491,7 +1498,7 @@ static int mb86a16_set_fe(struct mb86a16_state *state)
+ }
+ }
+ } else {
+- dprintk (verbose, MB86A16_INFO, 1, "NO -- SIGNAL");
++ dprintk(verbose, MB86A16_INFO, 1, "NO -- SIGNAL");
+ ret = -1;
+ }
+
+@@ -1846,7 +1853,7 @@ struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
+ u8 dev_id = 0;
+ struct mb86a16_state *state = NULL;
+
+- state = kmalloc(sizeof (struct mb86a16_state), GFP_KERNEL);
++ state = kmalloc(sizeof(struct mb86a16_state), GFP_KERNEL);
+ if (state == NULL)
+ goto error;
+
+@@ -1857,7 +1864,7 @@ struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
+ if (dev_id != 0xfe)
+ goto error;
+
+- memcpy(&state->frontend.ops, &mb86a16_ops, sizeof (struct dvb_frontend_ops));
++ memcpy(&state->frontend.ops, &mb86a16_ops, sizeof(struct dvb_frontend_ops));
+ state->frontend.demodulator_priv = state;
+ state->frontend.ops.set_voltage = state->config->set_voltage;
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.h b/drivers/media/dvb/frontends/mb86a16.h
+index b7545d0..68f25a6 100644
+--- a/drivers/media/dvb/frontends/mb86a16.h
++++ b/drivers/media/dvb/frontends/mb86a16.h
+@@ -35,4 +35,4 @@ extern struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
+ struct i2c_adapter *i2c_adap);
+
+
+-#endif //__MB86A16_H
++#endif /* __MB86A16_H */
+diff --git a/drivers/media/dvb/frontends/mb86a16_priv.h b/drivers/media/dvb/frontends/mb86a16_priv.h
+index 5de5700..d8757fa 100644
+--- a/drivers/media/dvb/frontends/mb86a16_priv.h
++++ b/drivers/media/dvb/frontends/mb86a16_priv.h
+@@ -148,4 +148,4 @@
+ #define MB86A16_DISTMON 0x52
+ #define MB86A16_VERSION 0x7f
+
+-#endif //__MB86A16_PRIV_H
++#endif /* __MB86A16_PRIV_H */
+diff --git a/drivers/media/dvb/frontends/tda665x.c b/drivers/media/dvb/frontends/tda665x.c
+index 0732a2d..87d5273 100644
+--- a/drivers/media/dvb/frontends/tda665x.c
++++ b/drivers/media/dvb/frontends/tda665x.c
+@@ -45,7 +45,7 @@ static int tda665x_read(struct tda665x_state *state, u8 *buf)
+
+ return err;
+ exit:
+- printk("%s: I/O Error err=<%d>\n", __func__, err);
++ printk(KERN_ERR "%s: I/O Error err=<%d>\n", __func__, err);
+ return err;
+ }
+
+@@ -61,7 +61,7 @@ static int tda665x_write(struct tda665x_state *state, u8 *buf, u8 length)
+
+ return err;
+ exit:
+- printk("%s: I/O Error err=<%d>\n", __func__, err);
++ printk(KERN_ERR "%s: I/O Error err=<%d>\n", __func__, err);
+ return err;
+ }
+
+@@ -79,7 +79,7 @@ static int tda665x_get_state(struct dvb_frontend *fe,
+ case DVBFE_TUNER_BANDWIDTH:
+ break;
+ default:
+- printk("%s: Unknown parameter (param=%d)\n", __func__, param);
++ printk(KERN_ERR "%s: Unknown parameter (param=%d)\n", __func__, param);
+ err = -EINVAL;
+ break;
+ }
+@@ -100,13 +100,13 @@ static int tda665x_get_status(struct dvb_frontend *fe, u32 *status)
+ goto exit;
+
+ if ((result >> 6) & 0x01) {
+- printk("%s: Tuner Phase Locked\n", __func__);
++ printk(KERN_DEBUG "%s: Tuner Phase Locked\n", __func__);
+ *status = 1;
+ }
+
+ return err;
+ exit:
+- printk("%s: I/O Error\n", __func__);
++ printk(KERN_ERR "%s: I/O Error\n", __func__);
+ return err;
+ }
+
+@@ -124,7 +124,7 @@ static int tda665x_set_state(struct dvb_frontend *fe,
+
+ frequency = tstate->frequency;
+ if ((frequency < config->frequency_max) || (frequency > config->frequency_min)) {
+- printk("%s: Frequency beyond limits, frequency=%d\n", __func__, frequency);
++ printk(KERN_ERR "%s: Frequency beyond limits, frequency=%d\n", __func__, frequency);
+ return -EINVAL;
+ }
+
+@@ -133,8 +133,8 @@ static int tda665x_set_state(struct dvb_frontend *fe,
+ frequency += config->ref_divider >> 1;
+ frequency /= config->ref_divider;
+
+- buf[0] = (u8 ) (frequency & 0x7f00) >> 8;
+- buf[1] = (u8 ) (frequency & 0x00ff) >> 0;
++ buf[0] = (u8) (frequency & 0x7f00) >> 8;
++ buf[1] = (u8) (frequency & 0x00ff) >> 0;
+ buf[2] = 0x80 | 0x40 | 0x02;
+ buf[3] = 0x00;
+
+@@ -178,7 +178,7 @@ static int tda665x_set_state(struct dvb_frontend *fe,
+ goto exit;
+
+ /* sleep for some time */
+- printk("%s: Waiting to Phase LOCK\n", __func__);
++ printk(KERN_DEBUG "%s: Waiting to Phase LOCK\n", __func__);
+ msleep(20);
+ /* check status */
+ err = tda665x_get_status(fe, &status);
+@@ -186,19 +186,19 @@ static int tda665x_set_state(struct dvb_frontend *fe,
+ goto exit;
+
+ if (status == 1) {
+- printk("%s: Tuner Phase locked: status=%d\n", __func__, status);
++ printk(KERN_DEBUG "%s: Tuner Phase locked: status=%d\n", __func__, status);
+ state->frequency = frequency; /* cache successful state */
+ } else {
+- printk("%s: No Phase lock: status=%d\n", __func__, status);
++ printk(KERN_ERR "%s: No Phase lock: status=%d\n", __func__, status);
+ }
+ } else {
+- printk("%s: Unknown parameter (param=%d)\n", __func__, param);
++ printk(KERN_ERR "%s: Unknown parameter (param=%d)\n", __func__, param);
+ return -EINVAL;
+ }
+
+ return 0;
+ exit:
+- printk("%s: I/O Error\n", __func__);
++ printk(KERN_ERR "%s: I/O Error\n", __func__);
+ return err;
+ }
+
+@@ -226,7 +226,7 @@ struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
+ struct tda665x_state *state = NULL;
+ struct dvb_tuner_info *info;
+
+- state = kzalloc(sizeof (struct tda665x_state), GFP_KERNEL);
++ state = kzalloc(sizeof(struct tda665x_state), GFP_KERNEL);
+ if (state == NULL)
+ goto exit;
+
+@@ -237,12 +237,12 @@ struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
+ fe->ops.tuner_ops = tda665x_ops;
+ info = &fe->ops.tuner_ops.info;
+
+- memcpy(info->name, config->name, sizeof (config->name));
++ memcpy(info->name, config->name, sizeof(config->name));
+ info->frequency_min = config->frequency_min;
+ info->frequency_max = config->frequency_max;
+ info->frequency_step = config->frequency_offst;
+
+- printk("%s: Attaching TDA665x (%s) tuner\n", __func__, info->name);
++ printk(KERN_DEBUG "%s: Attaching TDA665x (%s) tuner\n", __func__, info->name);
+
+ return fe;
+
+diff --git a/drivers/media/dvb/frontends/tda665x.h b/drivers/media/dvb/frontends/tda665x.h
+index c0b544d..ec7927a 100644
+--- a/drivers/media/dvb/frontends/tda665x.h
++++ b/drivers/media/dvb/frontends/tda665x.h
+@@ -40,7 +40,7 @@ extern struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
+ #else
+
+ static inline struct dvb_frontend *tda665x_attach(struct dvb_frontend *fe,
+- const struct tda665x_config *config,
++ const struct tda665x_config *config,
+ struct i2c_adapter *i2c)
+ {
+ printk(KERN_WARNING "%s: Driver disabled by Kconfig\n", __func__);
+diff --git a/drivers/media/dvb/mantis/hopper_cards.c b/drivers/media/dvb/mantis/hopper_cards.c
+index 6d5d101..ca70149 100644
+--- a/drivers/media/dvb/mantis/hopper_cards.c
++++ b/drivers/media/dvb/mantis/hopper_cards.c
+@@ -137,7 +137,7 @@ static int __devinit hopper_pci_probe(struct pci_dev *pdev, const struct pci_dev
+ struct mantis_hwconfig *config;
+ int err = 0;
+
+- mantis = kzalloc(sizeof (struct mantis_pci), GFP_KERNEL);
++ mantis = kzalloc(sizeof(struct mantis_pci), GFP_KERNEL);
+ if (mantis == NULL) {
+ printk(KERN_ERR "%s ERROR: Out of memory\n", __func__);
+ err = -ENOMEM;
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 88899ac..2f3ba81 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -119,7 +119,7 @@ static int mantis_ts_control(struct dvb_ca_en50221 *en50221, int slot)
+ struct mantis_pci *mantis = ca->ca_priv;
+
+ dprintk(MANTIS_DEBUG, 1, "Slot(%d): TS control", slot);
+-// mantis_set_direction(mantis, 1); /* Enable TS through CAM */
++/* mantis_set_direction(mantis, 1); */ /* Enable TS through CAM */
+
+ return 0;
+ }
+@@ -148,7 +148,7 @@ int mantis_ca_init(struct mantis_pci *mantis)
+ int ca_flags = 0, result;
+
+ dprintk(MANTIS_DEBUG, 1, "Initializing Mantis CA");
+- ca = kzalloc(sizeof (struct mantis_ca), GFP_KERNEL);
++ ca = kzalloc(sizeof(struct mantis_ca), GFP_KERNEL);
+ if (!ca) {
+ dprintk(MANTIS_ERROR, 1, "Out of memory!, exiting ..");
+ result = -ENOMEM;
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+index f3fefbb..a4250fa 100644
+--- a/drivers/media/dvb/mantis/mantis_cards.c
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -145,7 +145,7 @@ static int __devinit mantis_pci_probe(struct pci_dev *pdev, const struct pci_dev
+ struct mantis_hwconfig *config;
+ int err = 0;
+
+- mantis = kzalloc(sizeof (struct mantis_pci), GFP_KERNEL);
++ mantis = kzalloc(sizeof(struct mantis_pci), GFP_KERNEL);
+ if (mantis == NULL) {
+ printk(KERN_ERR "%s ERROR: Out of memory\n", __func__);
+ err = -ENOMEM;
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 52b3e9e..3ddc9ba 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -36,14 +36,16 @@ static int read_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+ .flags = 0,
+ .buf = data,
+ .len = 1
+- },{
++ }, {
+ .addr = 0x50,
+ .flags = I2C_M_RD,
+ .buf = data,
+ .len = length
+ },
+ };
+- if ((err = i2c_transfer(&mantis->adapter, msg, 2)) < 0) {
++
++ err = i2c_transfer(&mantis->adapter, msg, 2);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1,
+ "ERROR: i2c read: < err=%i d0=0x%02x d1=0x%02x >",
+ err, data[0], data[1]);
+@@ -65,7 +67,8 @@ static int write_eeprom_byte(struct mantis_pci *mantis, u8 *data, u8 length)
+ .len = length
+ };
+
+- if ((err = i2c_transfer(&mantis->adapter, &msg, 1)) < 0) {
++ err = i2c_transfer(&mantis->adapter, &msg, 1);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1,
+ "ERROR: i2c write: < err=%i length=0x%02x d0=0x%02x, d1=0x%02x >",
+ err, length, data[0], data[1]);
+@@ -81,7 +84,8 @@ static int get_mac_address(struct mantis_pci *mantis)
+ int err;
+
+ mantis->mac_address[0] = 0x08;
+- if ((err = read_eeprom_byte(mantis, &mantis->mac_address[0], 6)) < 0) {
++ err = read_eeprom_byte(mantis, &mantis->mac_address[0], 6);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis EEPROM read error");
+
+ return err;
+@@ -106,25 +110,25 @@ struct mantis_hwconfig unknown_device = {
+ static void mantis_load_config(struct mantis_pci *mantis)
+ {
+ switch (mantis->subsystem_device) {
+- case MANTIS_VP_1033_DVB_S: // VP-1033
++ case MANTIS_VP_1033_DVB_S: /* VP-1033 */
+ mantis->hwconfig = &vp1033_mantis_config;
+ break;
+- case MANTIS_VP_1034_DVB_S: // VP-1034
++ case MANTIS_VP_1034_DVB_S: /* VP-1034 */
+ mantis->hwconfig = &vp1034_mantis_config;
+ break;
+- case MANTIS_VP_1041_DVB_S2: // VP-1041
++ case MANTIS_VP_1041_DVB_S2: /* VP-1041 */
+ case TECHNISAT_SKYSTAR_HD2:
+ mantis->hwconfig = &vp1041_mantis_config;
+ break;
+- case MANTIS_VP_2033_DVB_C: // VP-2033
++ case MANTIS_VP_2033_DVB_C: /* VP-2033 */
+ mantis->hwconfig = &vp2033_mantis_config;
+ break;
+- case MANTIS_VP_2040_DVB_C: // VP-2040
+- case TERRATEC_CINERGY_C_PCI: // VP-2040 clone
++ case MANTIS_VP_2040_DVB_C: /* VP-2040 */
++ case TERRATEC_CINERGY_C_PCI: /* VP-2040 clone */
+ case TECHNISAT_CABLESTAR_HD2:
+ mantis->hwconfig = &vp2040_mantis_config;
+ break;
+- case MANTIS_VP_3030_DVB_T: // VP-3030
++ case MANTIS_VP_3030_DVB_T: /* VP-3030 */
+ mantis->hwconfig = &vp3030_mantis_config;
+ break;
+ default:
+@@ -149,23 +153,28 @@ int mantis_core_init(struct mantis_pci *mantis)
+ mantis->pdev->irq, mantis->latency,
+ mantis->mantis_addr, mantis->mantis_mmio);
+
+- if ((err = mantis_i2c_init(mantis)) < 0) {
++ err = mantis_i2c_init(mantis);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis I2C init failed");
+ return err;
+ }
+- if ((err = get_mac_address(mantis)) < 0) {
++ err = get_mac_address(mantis);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "get MAC address failed");
+ return err;
+ }
+- if ((err = mantis_dma_init(mantis)) < 0) {
++ err = mantis_dma_init(mantis);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_ERROR, 1, "Mantis DMA init failed");
+ return err;
+ }
+- if ((err = mantis_dvb_init(mantis)) < 0) {
++ err = mantis_dvb_init(mantis);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis DVB init failed");
+ return err;
+ }
+- if ((err = mantis_uart_init(mantis)) < 0) {
++ err = mantis_uart_init(mantis);
++ if (err < 0) {
+ dprintk(verbose, MANTIS_DEBUG, 1, "Mantis UART init failed");
+ return err;
+ }
+@@ -191,7 +200,7 @@ int mantis_core_exit(struct mantis_pci *mantis)
+ return 0;
+ }
+
+-// Turn the given bit on or off.
++/* Turn the given bit on or off. */
+ void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
+ {
+ u32 cur;
+@@ -207,14 +216,15 @@ void gpio_set_bits(struct mantis_pci *mantis, u32 bitpos, u8 value)
+ udelay(100);
+ }
+
+-//direction = 0 , no CI passthrough ; 1 , CI passthrough
++/* direction = 0 , no CI passthrough ; 1 , CI passthrough */
+ void mantis_set_direction(struct mantis_pci *mantis, int direction)
+ {
+ u32 reg;
+
+ reg = mmread(0x28);
+ dprintk(verbose, MANTIS_DEBUG, 1, "TS direction setup");
+- if (direction == 0x01) { //to CI
++ if (direction == 0x01) {
++ /* to CI */
+ reg |= 0x04;
+ mmwrite(reg, 0x28);
+ reg &= 0xff - 0x04;
+diff --git a/drivers/media/dvb/mantis/mantis_core.h b/drivers/media/dvb/mantis/mantis_core.h
+index a809394..8511b0c 100644
+--- a/drivers/media/dvb/mantis/mantis_core.h
++++ b/drivers/media/dvb/mantis/mantis_core.h
+@@ -33,15 +33,15 @@
+
+
+ struct vendorname {
+- __u8 *sub_vendor_name;
+- __u32 sub_vendor_id;
++ u8 *sub_vendor_name;
++ u32 sub_vendor_id;
+ };
+
+ struct devicetype {
+- __u8 *sub_device_name;
+- __u32 sub_device_id;
+- __u8 device_type;
+- __u32 type_flags;
++ u8 *sub_device_name;
++ u32 sub_device_id;
++ u8 device_type;
++ u32 type_flags;
+ };
+
+
+@@ -54,4 +54,4 @@ extern int mantis_i2c_exit(struct mantis_pci *mantis);
+ extern int mantis_core_init(struct mantis_pci *mantis);
+ extern int mantis_core_exit(struct mantis_pci *mantis);
+
+-#endif //__MANTIS_CORE_H
++#endif /* __MANTIS_CORE_H */
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index eab3645..adad1f3 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -43,10 +43,10 @@
+ #define RISC_IRQ (0x01 << 24)
+
+ #define RISC_STATUS(status) ((((~status) & 0x0f) << 20) | ((status & 0x0f) << 16))
+-#define RISC_FLUSH() mantis->risc_pos = 0
+-#define RISC_INSTR(opcode) mantis->risc_cpu[mantis->risc_pos++] = cpu_to_le32(opcode)
++#define RISC_FLUSH() (mantis->risc_pos = 0)
++#define RISC_INSTR(opcode) (mantis->risc_cpu[mantis->risc_pos++] = cpu_to_le32(opcode))
+
+-#define MANTIS_BUF_SIZE 64 * 1024
++#define MANTIS_BUF_SIZE (64 * 1024)
+ #define MANTIS_BLOCK_BYTES (MANTIS_BUF_SIZE >> 4)
+ #define MANTIS_BLOCK_COUNT (1 << 4)
+ #define MANTIS_RISC_SIZE PAGE_SIZE
+@@ -158,7 +158,8 @@ int mantis_dma_init(struct mantis_pci *mantis)
+
+ goto err;
+ }
+- if ((err = mantis_calc_lines(mantis)) < 0) {
++ err = mantis_calc_lines(mantis);
++ if (err < 0) {
+ dprintk(MANTIS_ERROR, 1, "Mantis calc lines failed");
+
+ goto err;
+@@ -248,7 +249,7 @@ void mantis_dma_xfer(unsigned long data)
+ dprintk(MANTIS_DEBUG, 1, "last block=[%d] finished block=[%d]",
+ mantis->last_block, mantis->finished_block);
+
+- (config->ts_size ? dvb_dmx_swfilter_204: dvb_dmx_swfilter)
++ (config->ts_size ? dvb_dmx_swfilter_204 : dvb_dmx_swfilter)
+ (&mantis->demux, &mantis->buf_cpu[mantis->last_block * MANTIS_BLOCK_BYTES], MANTIS_BLOCK_BYTES);
+ mantis->last_block = (mantis->last_block + 1) % MANTIS_BLOCK_COUNT;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 54bf4ea..8982d6f 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -116,7 +116,6 @@ static int mantis_dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
+
+ if (mantis->feeds == 1) {
+ dprintk(MANTIS_DEBUG, 1, "mantis start feed & dma");
+- printk("mantis start feed & dma\n");
+ mantis_dma_start(mantis);
+ }
+
+@@ -137,7 +136,6 @@ static int mantis_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
+ mantis->feeds--;
+ if (mantis->feeds == 0) {
+ dprintk(MANTIS_DEBUG, 1, "mantis stop feed and dma");
+- printk("mantis stop feed and dma\n");
+ mantis_dma_stop(mantis);
+ }
+
+@@ -204,9 +202,9 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ }
+
+ mantis->fe_mem.source = DMX_MEMORY_FE;
+- result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx,&mantis->fe_mem);
++ result = mantis->demux.dmx.add_frontend(&mantis->demux.dmx, &mantis->fe_mem);
+ if (result < 0) {
+- dprintk(MANTIS_ERROR, 1,"dvb_dmx_init failed, ERROR=%d", result);
++ dprintk(MANTIS_ERROR, 1, "dvb_dmx_init failed, ERROR=%d", result);
+ goto err3;
+ }
+
+@@ -224,10 +222,6 @@ int __devinit mantis_dvb_init(struct mantis_pci *mantis)
+ dprintk(MANTIS_ERROR, 1, "!!! NO Frontends found !!!");
+ goto err5;
+ } else {
+-// if (mantis->dvb_adapter == NULL) {
+-// dprintk(MANTIS_ERROR, 1, "DVB adapter <NULL>");
+-// goto err5;
+-// }
+ if (mantis->fe == NULL) {
+ dprintk(MANTIS_ERROR, 1, "FE <NULL>");
+ goto err5;
+@@ -277,7 +271,7 @@ int __devexit mantis_dvb_exit(struct mantis_pci *mantis)
+ int err;
+
+ if (mantis->fe) {
+-// mantis_ca_exit(mantis);
++ /* mantis_ca_exit(mantis); */
+ err = mantis_frontend_shutdown(mantis);
+ if (err != 0)
+ dprintk(MANTIS_ERROR, 1, "Frontend exit while POWER ON! <%d>", err);
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index 7bb4e78..dd38b93 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -225,7 +225,7 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+
+ init_waitqueue_head(&mantis->i2c_wq);
+ mutex_init(&mantis->i2c_lock);
+- strncpy(i2c_adapter->name, "Mantis I2C", sizeof (i2c_adapter->name));
++ strncpy(i2c_adapter->name, "Mantis I2C", sizeof(i2c_adapter->name));
+ i2c_set_adapdata(i2c_adapter, mantis);
+
+ i2c_adapter->owner = THIS_MODULE;
+diff --git a/drivers/media/dvb/mantis/mantis_input.c b/drivers/media/dvb/mantis/mantis_input.c
+index b27d775..487d149 100644
+--- a/drivers/media/dvb/mantis/mantis_input.c
++++ b/drivers/media/dvb/mantis/mantis_input.c
+@@ -36,9 +36,9 @@ static struct ir_scancode mantis_ir_table[] = {
+ { 0x29, KEY_POWER },
+ { 0x28, KEY_FAVORITES },
+ { 0x30, KEY_TEXT },
+- { 0x17, KEY_INFO }, // Preview
++ { 0x17, KEY_INFO }, /* Preview */
+ { 0x23, KEY_EPG },
+- { 0x3b, KEY_F22 },// Record List
++ { 0x3b, KEY_F22 }, /* Record List */
+ { 0x3c, KEY_1 },
+ { 0x3e, KEY_2 },
+ { 0x39, KEY_3 },
+@@ -71,22 +71,22 @@ static struct ir_scancode mantis_ir_table[] = {
+
+ { 0x1f, KEY_REWIND },
+ { 0x2d, KEY_FASTFORWARD },
+- { 0x1e, KEY_PREVIOUS }, // Replay |<
+- { 0x1d, KEY_NEXT }, // Skip >|
++ { 0x1e, KEY_PREVIOUS }, /* Replay |< */
++ { 0x1d, KEY_NEXT }, /* Skip >| */
+
+- { 0x0b, KEY_CAMERA }, // Capture
+- { 0x0f, KEY_LANGUAGE }, // SAP
+- { 0x18, KEY_MODE }, // PIP
+- { 0x12, KEY_ZOOM }, // Full screen,
++ { 0x0b, KEY_CAMERA }, /* Capture */
++ { 0x0f, KEY_LANGUAGE }, /* SAP */
++ { 0x18, KEY_MODE }, /* PIP */
++ { 0x12, KEY_ZOOM }, /* Full screen */
+ { 0x1c, KEY_SUBTITLE },
+ { 0x2f, KEY_MUTE },
+- { 0x16, KEY_F20 }, // L/R,
+- { 0x38, KEY_F21 }, // Hibernate,
++ { 0x16, KEY_F20 }, /* L/R */
++ { 0x38, KEY_F21 }, /* Hibernate */
+
+- { 0x37, KEY_SWITCHVIDEOMODE }, // A/V
+- { 0x31, KEY_AGAIN }, // Recall,
+- { 0x1a, KEY_KPPLUS }, // Zoom+,
+- { 0x19, KEY_KPMINUS }, // Zoom-,
++ { 0x37, KEY_SWITCHVIDEOMODE }, /* A/V */
++ { 0x31, KEY_AGAIN }, /* Recall */
++ { 0x1a, KEY_KPPLUS }, /* Zoom+ */
++ { 0x19, KEY_KPMINUS }, /* Zoom- */
+ { 0x27, KEY_RED },
+ { 0x0C, KEY_GREEN },
+ { 0x01, KEY_YELLOW },
+diff --git a/drivers/media/dvb/mantis/mantis_reg.h b/drivers/media/dvb/mantis/mantis_reg.h
+index 0072e14..c2f572b 100644
+--- a/drivers/media/dvb/mantis/mantis_reg.h
++++ b/drivers/media/dvb/mantis/mantis_reg.h
+@@ -29,7 +29,7 @@
+ #define MANTIS_INT_RISCEN (0x01 << 27)
+ #define MANTIS_INT_I2CRACK (0x01 << 26)
+
+-//#define MANTIS_INT_GPIF (0xff << 12)
++/* #define MANTIS_INT_GPIF (0xff << 12) */
+
+ #define MANTIS_INT_PCMCIA7 (0x01 << 19)
+ #define MANTIS_INT_PCMCIA6 (0x01 << 18)
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index c9760b0..3c62be3 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -93,7 +93,7 @@ int lgtdqcs001f_tuner_set(struct dvb_frontend *fe,
+ u32 div;
+
+
+- struct i2c_msg msg = {.addr = 0x61, .flags = 0, .buf = buf, .len = sizeof (buf) };
++ struct i2c_msg msg = {.addr = 0x61, .flags = 0, .buf = buf, .len = sizeof(buf)};
+
+ div = params->frequency / 250;
+
+@@ -140,12 +140,12 @@ int lgtdqcs001f_set_symbol_rate(struct dvb_frontend *fe,
+ aclk = 0xb4;
+ bclk = 0x51;
+ }
+- stv0299_writereg (fe, 0x13, aclk);
+- stv0299_writereg (fe, 0x14, bclk);
++ stv0299_writereg(fe, 0x13, aclk);
++ stv0299_writereg(fe, 0x14, bclk);
+
+- stv0299_writereg (fe, 0x1f, (ratio >> 16) & 0xff);
+- stv0299_writereg (fe, 0x20, (ratio >> 8) & 0xff);
+- stv0299_writereg (fe, 0x21, (ratio ) & 0xf0);
++ stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
++ stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
++ stv0299_writereg(fe, 0x21, ratio & 0xf0);
+
+ return 0;
+ }
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index 7ddd149..36486b5 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -62,7 +62,7 @@ int vp1034_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+ dprintk(MANTIS_ERROR, 1, "Frontend (dummy) POWERDOWN");
+ break;
+ default:
+- dprintk(MANTIS_ERROR, 1, "Invalid = (%d)", (u32 ) voltage);
++ dprintk(MANTIS_ERROR, 1, "Invalid = (%d)", (u32) voltage);
+ return -EINVAL;
+ }
+ mmwrite(0x00, MANTIS_GPIF_DOUT);
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 368fc81..515346d 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -44,7 +44,7 @@
+
+ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
+
+-// 0x0000000b , /* SYSREG */
++ /* 0x0000000b, *//* SYSREG */
+ { STB0899_DEV_ID , 0x30 },
+ { STB0899_DISCNTRL1 , 0x32 },
+ { STB0899_DISCNTRL2 , 0x80 },
+@@ -55,7 +55,7 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_1[] = {
+ { STB0899_DISSTATUS , 0x20 },
+ { STB0899_DISF22 , 0x99 },
+ { STB0899_DISF22RX , 0xa8 },
+- //SYSREG ?
++ /* SYSREG ? */
+ { STB0899_ACRPRESC , 0x11 },
+ { STB0899_ACRDIV1 , 0x0a },
+ { STB0899_ACRDIV2 , 0x05 },
+@@ -323,9 +323,8 @@ static int vp1041_frontend_init(struct mantis_pci *mantis, struct dvb_frontend *
+ vp1041_stb0899_config.demod_address);
+
+ if (stb6100_attach(mantis->fe, &vp1041_stb6100_config, adapter)) {
+- if (!lnbp21_attach(mantis->fe, adapter, 0, 0)) {
+- printk("%s: No LNBP21 found!\n", __func__);
+- }
++ if (!lnbp21_attach(mantis->fe, adapter, 0, 0))
++ dprintk(MANTIS_ERROR, 1, "No LNBP21 found!");
+ }
+ } else {
+ return -EREMOTEIO;
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 45f7174..07d468f 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -71,7 +71,7 @@ static int tda1002x_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_fronten
+ struct i2c_adapter *adapter = &mantis->adapter;
+
+ u8 buf[6];
+- struct i2c_msg msg = {.addr = 0x60, .flags = 0, .buf = buf, .len = sizeof (buf) };
++ struct i2c_msg msg = {.addr = 0x60, .flags = 0, .buf = buf, .len = sizeof(buf)};
+ int i;
+
+ #define CU1216_IF 36125000
+diff --git a/drivers/media/dvb/mantis/mantis_vp2040.c b/drivers/media/dvb/mantis/mantis_vp2040.c
+index 8471bff..a7ca233 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2040.c
++++ b/drivers/media/dvb/mantis/mantis_vp2040.c
+@@ -53,7 +53,7 @@ static int tda1002x_cu1216_tuner_set(struct dvb_frontend *fe, struct dvb_fronten
+ struct i2c_adapter *adapter = &mantis->adapter;
+
+ u8 buf[6];
+- struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = buf,.len = sizeof (buf) };
++ struct i2c_msg msg = {.addr = 0x60, .flags = 0, .buf = buf, .len = sizeof(buf)};
+ int i;
+
+ #define CU1216_IF 36125000
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0109-V4L-DVB-13810-MB86A16-Use-DVB_-macros.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0109-V4L-DVB-13810-MB86A16-Use-DVB_-macros.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,47 @@
+From 0f39ef5618242df3310ab40bc62edb8dd6cf930e Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Tue, 15 Dec 2009 09:01:27 -0300
+Subject: [PATCH 109/120] V4L/DVB (13810): [MB86A16] Use DVB_* macros
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 28fddb7cd5b7a12b81c8ec1a358749e60760e741)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.h | 14 ++++++++++++++
+ 1 files changed, 14 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.h b/drivers/media/dvb/frontends/mb86a16.h
+index 68f25a6..a88a6a1 100644
+--- a/drivers/media/dvb/frontends/mb86a16.h
++++ b/drivers/media/dvb/frontends/mb86a16.h
+@@ -31,8 +31,22 @@ struct mb86a16_config {
+ int (*set_voltage)(struct dvb_frontend *fe, fe_sec_voltage_t voltage);
+ };
+
++
++
++#if defined(CONFIG_DVB_MB86A16) || (defined(CONFIG_DVB_MB86A16_MODULE) && defined(MODULE))
++
+ extern struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
+ struct i2c_adapter *i2c_adap);
+
++#else
++
++static inline struct dvb_frontend *mb86a16_attach(const struct mb86a16_config *config,
++ struct i2c_adapter *i2c_adap)
++{
++ printk(KERN_WARNING "%s: Driver disabled by Kconfig\n", __func__);
++ return NULL;
++}
++
++#endif /* CONFIG_DVB_MB86A16 */
+
+ #endif /* __MB86A16_H */
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0110-V4L-DVB-13811-MB86A16-Update-Copyright-header.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0110-V4L-DVB-13811-MB86A16-Update-Copyright-header.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,61 @@
+From d3c5e48cc0d8cbbfdc624fe6d1af1e03a23ef76f Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Tue, 15 Dec 2009 09:04:59 -0300
+Subject: [PATCH 110/120] V4L/DVB (13811): [MB86A16] Update Copyright header
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 4cd191fba45ee3cf3035d7e4d3a942979cd9c5e4)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/mb86a16.c | 2 +-
+ drivers/media/dvb/frontends/mb86a16.h | 2 +-
+ drivers/media/dvb/frontends/mb86a16_priv.h | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/mb86a16.c b/drivers/media/dvb/frontends/mb86a16.c
+index 32f20c6..d05f750 100644
+--- a/drivers/media/dvb/frontends/mb86a16.c
++++ b/drivers/media/dvb/frontends/mb86a16.c
+@@ -1,7 +1,7 @@
+ /*
+ Fujitsu MB86A16 DVB-S/DSS DC Receiver driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/frontends/mb86a16.h b/drivers/media/dvb/frontends/mb86a16.h
+index a88a6a1..6ea8c37 100644
+--- a/drivers/media/dvb/frontends/mb86a16.h
++++ b/drivers/media/dvb/frontends/mb86a16.h
+@@ -1,7 +1,7 @@
+ /*
+ Fujitsu MB86A16 DVB-S/DSS DC Receiver driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/frontends/mb86a16_priv.h b/drivers/media/dvb/frontends/mb86a16_priv.h
+index d8757fa..360a35a 100644
+--- a/drivers/media/dvb/frontends/mb86a16_priv.h
++++ b/drivers/media/dvb/frontends/mb86a16_priv.h
+@@ -1,7 +1,7 @@
+ /*
+ Fujitsu MB86A16 DVB-S/DSS DC Receiver driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0111-V4L-DVB-13812-Mantis-Hopper-Update-Copyright-header.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0111-V4L-DVB-13812-Mantis-Hopper-Update-Copyright-header.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,673 @@
+From 757a9fab2ec0671cc0aff0777f096725eabb5ab0 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Tue, 15 Dec 2009 09:13:49 -0300
+Subject: [PATCH 111/120] V4L/DVB (13812): [Mantis/Hopper] Update Copyright header
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 8825a0970cef408fb2f1a44e3cb05d6ba41a18db)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/hopper_cards.c | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/hopper_vp3028.c | 4 ++--
+ drivers/media/dvb/mantis/hopper_vp3028.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_ca.c | 2 +-
+ drivers/media/dvb/mantis/mantis_ca.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_cards.c | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_common.h | 2 +-
+ drivers/media/dvb/mantis/mantis_core.c | 2 +-
+ drivers/media/dvb/mantis/mantis_core.h | 2 +-
+ drivers/media/dvb/mantis/mantis_dma.c | 2 +-
+ drivers/media/dvb/mantis/mantis_dma.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_dvb.c | 2 +-
+ drivers/media/dvb/mantis/mantis_dvb.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_evm.c | 2 +-
+ drivers/media/dvb/mantis/mantis_hif.c | 2 +-
+ drivers/media/dvb/mantis/mantis_hif.h | 2 +-
+ drivers/media/dvb/mantis/mantis_i2c.c | 2 +-
+ drivers/media/dvb/mantis/mantis_i2c.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_ioc.c | 2 +-
+ drivers/media/dvb/mantis/mantis_ioc.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_link.h | 2 +-
+ drivers/media/dvb/mantis/mantis_pci.c | 2 +-
+ drivers/media/dvb/mantis/mantis_pci.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_pcmcia.c | 2 +-
+ drivers/media/dvb/mantis/mantis_reg.h | 2 +-
+ drivers/media/dvb/mantis/mantis_uart.h | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1033.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1033.h | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1034.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp1034.h | 2 +-
+ drivers/media/dvb/mantis/mantis_vp2033.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp2033.h | 2 +-
+ drivers/media/dvb/mantis/mantis_vp3028.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp3028.h | 20 ++++++++++++++++++++
+ drivers/media/dvb/mantis/mantis_vp3030.c | 2 +-
+ drivers/media/dvb/mantis/mantis_vp3030.h | 2 +-
+ 36 files changed, 227 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/hopper_cards.c b/drivers/media/dvb/mantis/hopper_cards.c
+index ca70149..d073c61 100644
+--- a/drivers/media/dvb/mantis/hopper_cards.c
++++ b/drivers/media/dvb/mantis/hopper_cards.c
+@@ -1,3 +1,23 @@
++/*
++ Hopper PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+ #include <linux/kernel.h>
+diff --git a/drivers/media/dvb/mantis/hopper_vp3028.c b/drivers/media/dvb/mantis/hopper_vp3028.c
+index 76cad87..96674c7 100644
+--- a/drivers/media/dvb/mantis/hopper_vp3028.c
++++ b/drivers/media/dvb/mantis/hopper_vp3028.c
+@@ -1,7 +1,7 @@
+ /*
+- Mantis VP-3028 driver
++ Hopper VP-3028 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/hopper_vp3028.h b/drivers/media/dvb/mantis/hopper_vp3028.h
+index e8a3c22..5723949 100644
+--- a/drivers/media/dvb/mantis/hopper_vp3028.h
++++ b/drivers/media/dvb/mantis/hopper_vp3028.h
+@@ -1,3 +1,23 @@
++/*
++ Hopper VP-3028 driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_VP3028_H
+ #define __MANTIS_VP3028_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_ca.c b/drivers/media/dvb/mantis/mantis_ca.c
+index 2f3ba81..403ce04 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.c
++++ b/drivers/media/dvb/mantis/mantis_ca.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_ca.h b/drivers/media/dvb/mantis/mantis_ca.h
+index b7e48ee..dc63e55 100644
+--- a/drivers/media/dvb/mantis/mantis_ca.h
++++ b/drivers/media/dvb/mantis/mantis_ca.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_CA_H
+ #define __MANTIS_CA_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+index a4250fa..16f1708 100644
+--- a/drivers/media/dvb/mantis/mantis_cards.c
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #include <linux/module.h>
+ #include <linux/moduleparam.h>
+ #include <linux/kernel.h>
+diff --git a/drivers/media/dvb/mantis/mantis_common.h b/drivers/media/dvb/mantis/mantis_common.h
+index c2d0854..d0b645a 100644
+--- a/drivers/media/dvb/mantis/mantis_common.h
++++ b/drivers/media/dvb/mantis/mantis_common.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_core.c b/drivers/media/dvb/mantis/mantis_core.c
+index 3ddc9ba..8113b23 100644
+--- a/drivers/media/dvb/mantis/mantis_core.c
++++ b/drivers/media/dvb/mantis/mantis_core.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_core.h b/drivers/media/dvb/mantis/mantis_core.h
+index 8511b0c..833ee42 100644
+--- a/drivers/media/dvb/mantis/mantis_core.h
++++ b/drivers/media/dvb/mantis/mantis_core.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_dma.c b/drivers/media/dvb/mantis/mantis_dma.c
+index adad1f3..46202a4 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.c
++++ b/drivers/media/dvb/mantis/mantis_dma.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_dma.h b/drivers/media/dvb/mantis/mantis_dma.h
+index 4cba876..6be00fa 100644
+--- a/drivers/media/dvb/mantis/mantis_dma.h
++++ b/drivers/media/dvb/mantis/mantis_dma.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_DMA_H
+ #define __MANTIS_DMA_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.c b/drivers/media/dvb/mantis/mantis_dvb.c
+index 8982d6f..99d82ee 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.c
++++ b/drivers/media/dvb/mantis/mantis_dvb.c
+@@ -1,6 +1,6 @@
+ /*
+ Mantis PCI bridge driver
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_dvb.h b/drivers/media/dvb/mantis/mantis_dvb.h
+index 31ebbb4..464199d 100644
+--- a/drivers/media/dvb/mantis/mantis_dvb.h
++++ b/drivers/media/dvb/mantis/mantis_dvb.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_DVB_H
+ #define __MANTIS_DVB_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_evm.c b/drivers/media/dvb/mantis/mantis_evm.c
+index 9304b0e..a7b369a 100644
+--- a/drivers/media/dvb/mantis/mantis_evm.c
++++ b/drivers/media/dvb/mantis/mantis_evm.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 73e5ca0..7477dac 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_hif.h b/drivers/media/dvb/mantis/mantis_hif.h
+index f960c0a..9094f9e 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.h
++++ b/drivers/media/dvb/mantis/mantis_hif.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index dd38b93..b7df345 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.h b/drivers/media/dvb/mantis/mantis_i2c.h
+index d40da4f..1342df2 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.h
++++ b/drivers/media/dvb/mantis/mantis_i2c.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_I2C_H
+ #define __MANTIS_I2C_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_ioc.c b/drivers/media/dvb/mantis/mantis_ioc.c
+index dd66369..de148de 100644
+--- a/drivers/media/dvb/mantis/mantis_ioc.c
++++ b/drivers/media/dvb/mantis/mantis_ioc.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_ioc.h b/drivers/media/dvb/mantis/mantis_ioc.h
+index 2052640..188fe5a 100644
+--- a/drivers/media/dvb/mantis/mantis_ioc.h
++++ b/drivers/media/dvb/mantis/mantis_ioc.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_IOC_H
+ #define __MANTIS_IOC_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_link.h b/drivers/media/dvb/mantis/mantis_link.h
+index f6030c9..2a81477 100644
+--- a/drivers/media/dvb/mantis/mantis_link.h
++++ b/drivers/media/dvb/mantis/mantis_link.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 5165a39..5e4f576 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_pci.h b/drivers/media/dvb/mantis/mantis_pci.h
+index 5ce776f..65f0045 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.h
++++ b/drivers/media/dvb/mantis/mantis_pci.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis PCI bridge driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_PCI_H
+ #define __MANTIS_PCI_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_pcmcia.c b/drivers/media/dvb/mantis/mantis_pcmcia.c
+index d6bca3e..5cb545b 100644
+--- a/drivers/media/dvb/mantis/mantis_pcmcia.c
++++ b/drivers/media/dvb/mantis/mantis_pcmcia.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_reg.h b/drivers/media/dvb/mantis/mantis_reg.h
+index c2f572b..7761f9d 100644
+--- a/drivers/media/dvb/mantis/mantis_reg.h
++++ b/drivers/media/dvb/mantis/mantis_reg.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_uart.h b/drivers/media/dvb/mantis/mantis_uart.h
+index 62ab66e..ffb62a0 100644
+--- a/drivers/media/dvb/mantis/mantis_uart.h
++++ b/drivers/media/dvb/mantis/mantis_uart.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis PCI bridge driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.c b/drivers/media/dvb/mantis/mantis_vp1033.c
+index 3c62be3..4a723bd 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.c
++++ b/drivers/media/dvb/mantis/mantis_vp1033.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-1033 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp1033.h b/drivers/media/dvb/mantis/mantis_vp1033.h
+index 2c18d21..7daaa1b 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1033.h
++++ b/drivers/media/dvb/mantis/mantis_vp1033.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-1033 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.c b/drivers/media/dvb/mantis/mantis_vp1034.c
+index 36486b5..8e6ae55 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.c
++++ b/drivers/media/dvb/mantis/mantis_vp1034.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-1034 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp1034.h b/drivers/media/dvb/mantis/mantis_vp1034.h
+index 3026912..323f38e 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1034.h
++++ b/drivers/media/dvb/mantis/mantis_vp1034.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-1034 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.c b/drivers/media/dvb/mantis/mantis_vp2033.c
+index 07d468f..10ce817 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.c
++++ b/drivers/media/dvb/mantis/mantis_vp2033.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-2033 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp2033.h b/drivers/media/dvb/mantis/mantis_vp2033.h
+index e6c5fe8..c55242b 100644
+--- a/drivers/media/dvb/mantis/mantis_vp2033.h
++++ b/drivers/media/dvb/mantis/mantis_vp2033.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-2033 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp3028.c b/drivers/media/dvb/mantis/mantis_vp3028.c
+index 7f8918c..4155c83 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3028.c
++++ b/drivers/media/dvb/mantis/mantis_vp3028.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-3028 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp3028.h b/drivers/media/dvb/mantis/mantis_vp3028.h
+index c51628d..b07be6a 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3028.h
++++ b/drivers/media/dvb/mantis/mantis_vp3028.h
+@@ -1,3 +1,23 @@
++/*
++ Mantis VP-3028 driver
++
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++*/
++
+ #ifndef __MANTIS_VP3028_H
+ #define __MANTIS_VP3028_H
+
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.c b/drivers/media/dvb/mantis/mantis_vp3030.c
+index 1895e95..1f43342 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.c
++++ b/drivers/media/dvb/mantis/mantis_vp3030.c
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-3030 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+diff --git a/drivers/media/dvb/mantis/mantis_vp3030.h b/drivers/media/dvb/mantis/mantis_vp3030.h
+index 0a110ba..5f12c42 100644
+--- a/drivers/media/dvb/mantis/mantis_vp3030.h
++++ b/drivers/media/dvb/mantis/mantis_vp3030.h
+@@ -1,7 +1,7 @@
+ /*
+ Mantis VP-3030 driver
+
+- Copyright (C) 2005, 2006 Manu Abraham (abraham.manu at gmail.com)
++ Copyright (C) Manu Abraham (abraham.manu at gmail.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0112-V4L-DVB-13808b-mantis-replace-DMA_nnBIT_MASK-to-DMA_.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0112-V4L-DVB-13808b-mantis-replace-DMA_nnBIT_MASK-to-DMA_.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,35 @@
+From 02a15cfbd0f3999572dffde165154b6e8c480ea8 Mon Sep 17 00:00:00 2001
+From: Mauro Carvalho Chehab <mchehab at redhat.com>
+Date: Thu, 17 Dec 2009 00:06:04 -0200
+Subject: [PATCH 112/120] V4L/DVB (13808b): mantis: replace DMA_nnBIT_MASK to DMA_BIT_MASK(32)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+drivers/media/dvb/mantis/mantis_pci.c: In function ‘mantis_pci_init’:
+drivers/media/dvb/mantis/mantis_pci.c:76: warning: ‘DMA_nnBIT_MASK’ is deprecated
+
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 184ac7535ee078a4572b668a348134d67c3977d2)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_pci.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 5e4f576..e7cd8aa 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -73,7 +73,7 @@ int __devinit mantis_pci_init(struct mantis_pci *mantis)
+ goto fail0;
+ }
+
+- err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
++ err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
+ if (err != 0) {
+ dprintk(MANTIS_ERROR, 1, "ERROR: Unable to obtain 32 bit DMA <%i>", err);
+ ret = -ENOMEM;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0113-V4L-DVB-13824a-mantis-Fix-__devexit-bad-annotations.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0113-V4L-DVB-13824a-mantis-Fix-__devexit-bad-annotations.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,144 @@
+From 2d3215f80199496fa1db84ad0ee1fbac8453c573 Mon Sep 17 00:00:00 2001
+From: Mauro Carvalho Chehab <mchehab at redhat.com>
+Date: Fri, 18 Dec 2009 09:58:46 -0200
+Subject: [PATCH 113/120] V4L/DVB(13824a): mantis: Fix __devexit bad annotations
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+WARNING: drivers/media/dvb/mantis/built-in.o(.devinit.text+0x13d7): Section mismatch in reference from the function mantis_pci_probe() to the function .devexit.text:mantis_i2c_exit()
+The function __devinit mantis_pci_probe() references
+a function __devexit mantis_i2c_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_i2c_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/mantis/built-in.o(.devinit.text+0x1433): Section mismatch in reference from the function mantis_pci_probe() to the function .devexit.text:mantis_pci_exit()
+The function __devinit mantis_pci_probe() references
+a function __devexit mantis_pci_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_pci_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/mantis/built-in.o(.devinit.text+0x185e): Section mismatch in reference from the function hopper_pci_probe() to the function
+.devexit.text:mantis_i2c_exit()
+The function __devinit hopper_pci_probe() references
+a function __devexit mantis_i2c_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_i2c_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/mantis/built-in.o(.devinit.text+0x18ba): Section mismatch in reference from the function hopper_pci_probe() to the function .devexit.text:mantis_pci_exit()
+The function __devinit hopper_pci_probe() references
+a function __devexit mantis_pci_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_pci_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/built-in.o(.devinit.text+0x68b8): Section mismatch in reference from the function mantis_pci_probe() to the function .devexit.text:mantis_i2c_exit()
+The function __devinit mantis_pci_probe() references
+a function __devexit mantis_i2c_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_i2c_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/built-in.o(.devinit.text+0x6914): Section mismatch in reference from the function mantis_pci_probe() to the function .devexit.text:mantis_pci_exit()
+The function __devinit mantis_pci_probe() references
+a function __devexit mantis_pci_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_pci_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/built-in.o(.devinit.text+0x6d3f): Section mismatch in reference from the function hopper_pci_probe() to the function .devexit.text:mantis_i2c_exit()
+The function __devinit hopper_pci_probe() references
+a function __devexit mantis_i2c_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_i2c_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/dvb/built-in.o(.devinit.text+0x6d9b): Section mismatch in reference from the function hopper_pci_probe() to the function .devexit.text:mantis_pci_exit()
+The function __devinit hopper_pci_probe() references
+a function __devexit mantis_pci_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_pci_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/built-in.o(.devinit.text+0x14634): Section mismatch in reference from the function mantis_pci_probe() to the function .devexit.text:mantis_i2c_exit()
+The function __devinit mantis_pci_probe() references
+a function __devexit mantis_i2c_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_i2c_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/built-in.o(.devinit.text+0x14690): Section mismatch in reference from the function mantis_pci_probe() to the function .devexit.text:mantis_pci_exit()
+The function __devinit mantis_pci_probe() references
+a function __devexit mantis_pci_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_pci_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/built-in.o(.devinit.text+0x14abb): Section mismatch in reference from the function hopper_pci_probe() to the function .devexit.text:mantis_i2c_exit()
+The function __devinit hopper_pci_probe() references
+a function __devexit mantis_i2c_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_i2c_exit() so it may be used outside an exit section.
+
+WARNING: drivers/media/built-in.o(.devinit.text+0x14b17): Section mismatch in reference from the function hopper_pci_probe() to the function .devexit.text:mantis_pci_exit()
+The function __devinit hopper_pci_probe() references
+a function __devexit mantis_pci_exit().
+This is often seen when error handling in the init function
+uses functionality in the exit path.
+The fix is often to remove the __devexit annotation of
+mantis_pci_exit() so it may be used outside an exit section.
+
+Acked-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 4cf0b3f130a4fe573077e4d0237fd3dd0f67d3f6)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_i2c.c | 2 +-
+ drivers/media/dvb/mantis/mantis_pci.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_i2c.c b/drivers/media/dvb/mantis/mantis_i2c.c
+index b7df345..7870bcf 100644
+--- a/drivers/media/dvb/mantis/mantis_i2c.c
++++ b/drivers/media/dvb/mantis/mantis_i2c.c
+@@ -253,7 +253,7 @@ int __devinit mantis_i2c_init(struct mantis_pci *mantis)
+ }
+ EXPORT_SYMBOL_GPL(mantis_i2c_init);
+
+-int __devexit mantis_i2c_exit(struct mantis_pci *mantis)
++int mantis_i2c_exit(struct mantis_pci *mantis)
+ {
+ u32 intmask;
+
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index e7cd8aa..6c7534a 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -155,7 +155,7 @@ fail0:
+ }
+ EXPORT_SYMBOL_GPL(mantis_pci_init);
+
+-void __devexit mantis_pci_exit(struct mantis_pci *mantis)
++void mantis_pci_exit(struct mantis_pci *mantis)
+ {
+ struct pci_dev *pdev = mantis->pdev;
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0114-V4L-DVB-13851-Fix-Input-dependency-for-Mantis.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0114-V4L-DVB-13851-Fix-Input-dependency-for-Mantis.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,45 @@
+From 67a3a1b7aee8c0ca9ab5fade6074d7aa4b90ebed Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Sat, 19 Dec 2009 14:11:50 -0300
+Subject: [PATCH 114/120] V4L/DVB (13851): Fix Input dependency for Mantis
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+>
+>
+>
+> CONFIG_INPUT=n
+
+As reported by Randy Dunlap <randy.dunlap at oracle.com>:
+> ERROR: "ir_input_register" [drivers/media/dvb/mantis/mantis_core.ko] undefined!
+> ERROR: "ir_input_unregister" [drivers/media/dvb/mantis/mantis_core.ko] undefined!
+> ERROR: "ir_input_init" [drivers/media/dvb/mantis/mantis_core.ko] undefined!
+> ERROR: "input_free_device" [drivers/media/dvb/mantis/mantis_core.ko] undefined!
+> ERROR: "input_allocate_device" [drivers/media/dvb/mantis/mantis_core.ko] undefined!
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Acked-by: Randy Dunlap <randy.dunlap at oracle.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit fcd89de3bd1c8735f9b7c759dc4848ab6e525bb9)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/Kconfig | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/Kconfig b/drivers/media/dvb/mantis/Kconfig
+index f9219cd..f7b72a3 100644
+--- a/drivers/media/dvb/mantis/Kconfig
++++ b/drivers/media/dvb/mantis/Kconfig
+@@ -1,6 +1,6 @@
+ config MANTIS_CORE
+ tristate "Mantis/Hopper PCI bridge based devices"
+- depends on PCI && I2C
++ depends on PCI && I2C && INPUT
+
+ help
+ Support for PCI cards based on the Mantis and Hopper PCi bridge.
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0115-V4L-DVB-Mantis-remove-duplicated-include.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0115-V4L-DVB-Mantis-remove-duplicated-include.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,54 @@
+From 6d041ae6aac8101e571a8dbbeb032a8f47f99645 Mon Sep 17 00:00:00 2001
+From: Huang Weiyi <weiyi.huang at gmail.com>
+Date: Tue, 19 Jan 2010 19:43:44 -0300
+Subject: [PATCH 115/120] V4L/DVB: [Mantis] remove duplicated #include
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove duplicated #include('s) in
+ drivers/media/dvb/mantis/mantis_hif.c
+ drivers/media/dvb/mantis/mantis_pci.c
+
+Signed-off-by: Huang Weiyi <weiyi.huang at gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 2c1fee024d86b718b3198f664747c9028776c751)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_hif.c | 2 --
+ drivers/media/dvb/mantis/mantis_pci.c | 5 -----
+ 2 files changed, 0 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_hif.c b/drivers/media/dvb/mantis/mantis_hif.c
+index 7477dac..5772ebb 100644
+--- a/drivers/media/dvb/mantis/mantis_hif.c
++++ b/drivers/media/dvb/mantis/mantis_hif.c
+@@ -22,8 +22,6 @@
+ #include <linux/signal.h>
+ #include <linux/sched.h>
+
+-#include <linux/signal.h>
+-#include <linux/sched.h>
+ #include <linux/interrupt.h>
+
+ #include "dmxdev.h"
+diff --git a/drivers/media/dvb/mantis/mantis_pci.c b/drivers/media/dvb/mantis/mantis_pci.c
+index 6c7534a..59feeb8 100644
+--- a/drivers/media/dvb/mantis/mantis_pci.c
++++ b/drivers/media/dvb/mantis/mantis_pci.c
+@@ -41,11 +41,6 @@
+ #include "dvb_frontend.h"
+ #include "dvb_net.h"
+
+-#include <asm/irq.h>
+-#include <linux/signal.h>
+-#include <linux/sched.h>
+-#include <linux/interrupt.h>
+-
+ #include "mantis_common.h"
+ #include "mantis_reg.h"
+ #include "mantis_pci.h"
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0116-V4L-DVB-dvb-fix-sparse-warnings.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0116-V4L-DVB-dvb-fix-sparse-warnings.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,39 @@
+From 8fe80a7c261f00bccee19c840855e192572da86a Mon Sep 17 00:00:00 2001
+From: Randy Dunlap <randy.dunlap at oracle.com>
+Date: Sun, 14 Feb 2010 23:39:32 -0300
+Subject: [PATCH 116/120] V4L/DVB: dvb: fix sparse warnings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Fix sparse warnings in media/dvb/frontends:
+
+drivers/media/dvb/frontends/dibx000_common.c:177:13: warning: non-ANSI function declaration of function 'systime'
+drivers/media/dvb/frontends/tda665x.c:136:55: warning: right shift by bigger than source value
+
+[mchehab at redhat.com: removed the change at dib0090 since it got fixed by a previous patch]
+Signed-off-by: Randy Dunlap <randy.dunlap at oracle.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked with conflict from commit 7ccf1eea972177064b4df9d5ba68958604781db6)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/tda665x.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/tda665x.c b/drivers/media/dvb/frontends/tda665x.c
+index 87d5273..c44fefe 100644
+--- a/drivers/media/dvb/frontends/tda665x.c
++++ b/drivers/media/dvb/frontends/tda665x.c
+@@ -133,7 +133,7 @@ static int tda665x_set_state(struct dvb_frontend *fe,
+ frequency += config->ref_divider >> 1;
+ frequency /= config->ref_divider;
+
+- buf[0] = (u8) (frequency & 0x7f00) >> 8;
++ buf[0] = (u8) ((frequency & 0x7f00) >> 8);
+ buf[1] = (u8) (frequency & 0x00ff) >> 0;
+ buf[2] = 0x80 | 0x40 | 0x02;
+ buf[3] = 0x00;
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0117-V4L-DVB-Fix-bad-whitespacing.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0117-V4L-DVB-Fix-bad-whitespacing.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,60 @@
+From e25bf2cce8c176e73da9b637f444fefa1f5e6fed Mon Sep 17 00:00:00 2001
+From: Mauro Carvalho Chehab <mchehab at redhat.com>
+Date: Thu, 11 Mar 2010 01:58:12 -0300
+Subject: [PATCH 117/120] V4L/DVB: Fix bad whitespacing
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(mantis changes cherry picked from commit 000f64efc7fe6693261a78a0164c0e805553631b)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/mantis_vp1041.c | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/mantis_vp1041.c b/drivers/media/dvb/mantis/mantis_vp1041.c
+index 515346d..d1aa2bc 100644
+--- a/drivers/media/dvb/mantis/mantis_vp1041.c
++++ b/drivers/media/dvb/mantis/mantis_vp1041.c
+@@ -136,12 +136,12 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
+ { STB0899_RCOMPC , 0xc9 },
+ { STB0899_AGC1CN , 0x01 },
+ { STB0899_AGC1REF , 0x10 },
+- { STB0899_RTC , 0x23 },
++ { STB0899_RTC , 0x23 },
+ { STB0899_TMGCFG , 0x4e },
+ { STB0899_AGC2REF , 0x34 },
+ { STB0899_TLSR , 0x84 },
+ { STB0899_CFD , 0xf7 },
+- { STB0899_ACLC , 0x87 },
++ { STB0899_ACLC , 0x87 },
+ { STB0899_BCLC , 0x94 },
+ { STB0899_EQON , 0x41 },
+ { STB0899_LDT , 0xf1 },
+@@ -194,10 +194,10 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
+ { STB0899_ECNT3M , 0x0a },
+ { STB0899_ECNT3L , 0xad },
+ { STB0899_FECAUTO1 , 0x06 },
+- { STB0899_FECM , 0x01 },
++ { STB0899_FECM , 0x01 },
+ { STB0899_VTH12 , 0xb0 },
+ { STB0899_VTH23 , 0x7a },
+- { STB0899_VTH34 , 0x58 },
++ { STB0899_VTH34 , 0x58 },
+ { STB0899_VTH56 , 0x38 },
+ { STB0899_VTH67 , 0x34 },
+ { STB0899_VTH78 , 0x24 },
+@@ -206,7 +206,7 @@ static const struct stb0899_s1_reg vp1041_stb0899_s1_init_3[] = {
+ { STB0899_RSULC , 0xb1 }, /* DVB = 0xb1, DSS = 0xa1 */
+ { STB0899_TSULC , 0x42 },
+ { STB0899_RSLLC , 0x41 },
+- { STB0899_TSLPL , 0x12 },
++ { STB0899_TSLPL , 0x12 },
+ { STB0899_TSCFGH , 0x0c },
+ { STB0899_TSCFGM , 0x00 },
+ { STB0899_TSCFGL , 0x00 },
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0118-V4L-DVB-13791-TDA10021-Do-not-claim-TDA10023.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0118-V4L-DVB-13791-TDA10021-Do-not-claim-TDA10023.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,36 @@
+From e53d66f416e45eba2e964de9d3d32af1087945aa Mon Sep 17 00:00:00 2001
+From: Niklas Edmundsson <nikke at acc.umu.se>
+Date: Fri, 4 Dec 2009 05:38:21 -0300
+Subject: [PATCH 118/120] V4L/DVB (13791): [TDA10021] Do not claim TDA10023
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Niklas Edmundsson <nikke at acc.umu.se>
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked from commit 4af699c13a5fb7332255de5fa56442d065f547a3)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/frontends/tda10021.c | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/frontends/tda10021.c b/drivers/media/dvb/frontends/tda10021.c
+index 6c1dbf9..6ca533e 100644
+--- a/drivers/media/dvb/frontends/tda10021.c
++++ b/drivers/media/dvb/frontends/tda10021.c
+@@ -426,6 +426,10 @@ struct dvb_frontend* tda10021_attach(const struct tda1002x_config* config,
+ id = tda10021_readreg(state, 0x1a);
+ if ((id & 0xf0) != 0x70) goto error;
+
++ /* Don't claim TDA10023 */
++ if (id == 0x7d)
++ goto error;
++
+ printk("TDA10021: i2c-addr = 0x%02x, id = 0x%02x\n",
+ state->config->demod_address, id);
+
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0119-Mantis-hopper-use-MODULE_DEVICE_TABLE-use-the-macro-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0119-Mantis-hopper-use-MODULE_DEVICE_TABLE-use-the-macro-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,49 @@
+From d3536036a37e4808eeed99e783e4d2b181fdde50 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Thu, 11 Feb 2010 11:11:05 +0400
+Subject: [PATCH 119/120] Mantis, hopper: use MODULE_DEVICE_TABLE use the macro to make modules auto-loadable
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to Ozan ?a?layan <ozan at pardus.org.tr> for pointing it out
+
+From: Manu Abraham <abraham.manu at gmail.com>
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+(imported from http://jusst.de/hg/mantis-v4l-dvb/raw-rev/3731f71ed6bf)
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/mantis/hopper_cards.c | 2 ++
+ drivers/media/dvb/mantis/mantis_cards.c | 2 ++
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/hopper_cards.c b/drivers/media/dvb/mantis/hopper_cards.c
+index d073c61..1bf03ac 100644
+--- a/drivers/media/dvb/mantis/hopper_cards.c
++++ b/drivers/media/dvb/mantis/hopper_cards.c
+@@ -250,6 +250,8 @@ static struct pci_device_id hopper_pci_table[] = {
+ { }
+ };
+
++MODULE_DEVICE_TABLE(pci, hopper_pci_table);
++
+ static struct pci_driver hopper_pci_driver = {
+ .name = DRIVER_NAME,
+ .id_table = hopper_pci_table,
+diff --git a/drivers/media/dvb/mantis/mantis_cards.c b/drivers/media/dvb/mantis/mantis_cards.c
+index 16f1708..64970cf 100644
+--- a/drivers/media/dvb/mantis/mantis_cards.c
++++ b/drivers/media/dvb/mantis/mantis_cards.c
+@@ -280,6 +280,8 @@ static struct pci_device_id mantis_pci_table[] = {
+ { }
+ };
+
++MODULE_DEVICE_TABLE(pci, mantis_pci_table);
++
+ static struct pci_driver mantis_pci_driver = {
+ .name = DRIVER_NAME,
+ .id_table = mantis_pci_table,
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0120-V4L-DVB-13808-Mantis-Hopper-Build-update-for-Mantis-.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0120-V4L-DVB-13808-Mantis-Hopper-Build-update-for-Mantis-.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,90 @@
+From 74001e9c32a6e55f0eba8a5b21fc434fa49b4222 Mon Sep 17 00:00:00 2001
+From: Manu Abraham <abraham.manu at gmail.com>
+Date: Sat, 5 Dec 2009 01:24:08 -0300
+Subject: [PATCH 120/120] V4L/DVB (13808): [Mantis/Hopper] Build update for Mantis/Hopper based cards
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Manu Abraham <manu at linuxtv.org>
+Signed-off-by: Mauro Carvalho Chehab <mchehab at redhat.com>
+(cherry picked with conflict from commit 8873c61f1fe849bc8719839ddfa3300266f8bc39)
+
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+---
+ drivers/media/dvb/Kconfig | 4 ++++
+ drivers/media/dvb/Makefile | 14 +++++++++++++-
+ drivers/media/dvb/frontends/Kconfig | 8 ++++++++
+ drivers/media/dvb/frontends/Makefile | 1 +
+ 4 files changed, 26 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/dvb/Kconfig b/drivers/media/dvb/Kconfig
+index 35d0817..cf8f65f 100644
+--- a/drivers/media/dvb/Kconfig
++++ b/drivers/media/dvb/Kconfig
+@@ -72,6 +72,10 @@ comment "Supported Earthsoft PT1 Adapters"
+ depends on DVB_CORE && PCI && I2C
+ source "drivers/media/dvb/pt1/Kconfig"
+
++comment "Supported Mantis Adapters"
++ depends on DVB_CORE && PCI && I2C
++ source "drivers/media/dvb/mantis/Kconfig"
++
+ comment "Supported DVB Frontends"
+ depends on DVB_CORE
+ source "drivers/media/dvb/frontends/Kconfig"
+diff --git a/drivers/media/dvb/Makefile b/drivers/media/dvb/Makefile
+index 16d262d..c12922c 100644
+--- a/drivers/media/dvb/Makefile
++++ b/drivers/media/dvb/Makefile
+@@ -2,6 +2,18 @@
+ # Makefile for the kernel multimedia device drivers.
+ #
+
+-obj-y := dvb-core/ frontends/ ttpci/ ttusb-dec/ ttusb-budget/ b2c2/ bt8xx/ dvb-usb/ pluto2/ siano/ dm1105/ pt1/
++obj-y := dvb-core/ \
++ frontends/ \
++ ttpci/ \
++ ttusb-dec/ \
++ ttusb-budget/ \
++ b2c2/ \
++ bt8xx/ \
++ dvb-usb/ \
++ pluto2/ \
++ siano/ \
++ dm1105/ \
++ pt1/ \
++ mantis/
+
+ obj-$(CONFIG_DVB_FIREDTV) += firewire/
+diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig
+index 5a1d66c..683b2e3 100644
+--- a/drivers/media/dvb/frontends/Kconfig
++++ b/drivers/media/dvb/frontends/Kconfig
+@@ -201,6 +201,14 @@ config DVB_SI21XX
+ help
+ A DVB-S tuner module. Say Y when you want to support this frontend.
+
++config DVB_MB86A16
++ tristate "Fujitsu MB86A16 based"
++ depends on DVB_CORE && I2C
++ default m if DVB_FE_CUSTOMISE
++ help
++ A DVB-S/DSS Direct Conversion reveiver.
++ Say Y when you want to support this frontend.
++
+ comment "DVB-T (terrestrial) frontends"
+ depends on DVB_CORE
+
+diff --git a/drivers/media/dvb/frontends/Makefile b/drivers/media/dvb/frontends/Makefile
+index af944a8..2e11e5c 100644
+--- a/drivers/media/dvb/frontends/Makefile
++++ b/drivers/media/dvb/frontends/Makefile
+@@ -77,3 +77,4 @@ obj-$(CONFIG_DVB_STV0900) += stv0900.o
+ obj-$(CONFIG_DVB_STV090x) += stv090x.o
+ obj-$(CONFIG_DVB_STV6110x) += stv6110x.o
+ obj-$(CONFIG_DVB_ISL6423) += isl6423.o
++obj-$(CONFIG_DVB_MB86A16) += mb86a16.o
+--
+1.7.1
+
Added: dists/sid/linux-2.6/debian/patches/features/all/mantis/0121-V4L-DVB-mantis-Select-correct-frontends.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/mantis/0121-V4L-DVB-mantis-Select-correct-frontends.patch Thu Jun 3 01:02:13 2010 (r15824)
@@ -0,0 +1,48 @@
+From 95387e011a365a5309f6a6d621a215ab776b087a Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Thu, 3 Jun 2010 01:42:13 +0100
+Subject: [PATCH] V4L/DVB: mantis: Select correct frontends
+
+Update the Kconfig selections to match the code.
+Add the usual condition of !DVB_FE_CUSTOMISE.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ drivers/media/dvb/mantis/Kconfig | 14 ++++++++++----
+ 1 files changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/media/dvb/mantis/Kconfig b/drivers/media/dvb/mantis/Kconfig
+index f7b72a3..decdeda 100644
+--- a/drivers/media/dvb/mantis/Kconfig
++++ b/drivers/media/dvb/mantis/Kconfig
+@@ -10,9 +10,15 @@ config MANTIS_CORE
+ config DVB_MANTIS
+ tristate "MANTIS based cards"
+ depends on MANTIS_CORE && DVB_CORE && PCI && I2C
+- select DVB_MB86A16
+- select DVB_ZL10353
+- select DVB_STV0299
++ select DVB_MB86A16 if !DVB_FE_CUSTOMISE
++ select DVB_ZL10353 if !DVB_FE_CUSTOMISE
++ select DVB_STV0299 if !DVB_FE_CUSTOMISE
++ select DVB_LNBP21 if !DVB_FE_CUSTOMISE
++ select DVB_STB0899 if !DVB_FE_CUSTOMISE
++ select DVB_STB6100 if !DVB_FE_CUSTOMISE
++ select DVB_TDA665x if !DVB_FE_CUSTOMISE
++ select DVB_TDA10021 if !DVB_FE_CUSTOMISE
++ select DVB_TDA10023 if !DVB_FE_CUSTOMISE
+ select DVB_PLL
+ help
+ Support for PCI cards based on the Mantis PCI bridge.
+@@ -23,7 +29,7 @@ config DVB_MANTIS
+ config DVB_HOPPER
+ tristate "HOPPER based cards"
+ depends on MANTIS_CORE && DVB_CORE && PCI && I2C
+- select DVB_ZL10353
++ select DVB_ZL10353 if !DVB_FE_CUSTOMISE
+ select DVB_PLL
+ help
+ Support for PCI cards based on the Hopper PCI bridge.
+--
+1.7.1
+
Modified: dists/sid/linux-2.6/debian/patches/series/16
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/16 Wed Jun 2 09:10:51 2010 (r15823)
+++ dists/sid/linux-2.6/debian/patches/series/16 Thu Jun 3 01:02:13 2010 (r15824)
@@ -2,3 +2,124 @@
- bugfix/all/revert-percpu-stable-changes-2.patch
+ bugfix/all/stable/2.6.32.15.patch
+ bugfix/sh4/fix-sh_tmu.patch
++ features/all/mantis/0001-V4L-DVB-13699-Mantis-MB86A16-Initial-checkin-Mantis-.patch
++ features/all/mantis/0002-V4L-DVB-13700-MB86A16-Need-a-bit-of-settling-time.patch
++ features/all/mantis/0003-V4L-DVB-13701-MB86A16-Reduce-Carrier-Recovery-range-.patch
++ features/all/mantis/0004-V4L-DVB-13702-MB86A16-need-to-wait-a-bit-more-than-t.patch
++ features/all/mantis/0005-V4L-DVB-13703-MB86A16-Fix-wrong-message-printed-out.patch
++ features/all/mantis/0006-V4L-DVB-13704-MB86A16-FIX-Don-t-loop-again-if-we-hav.patch
++ features/all/mantis/0007-V4L-DVB-13705-Mantis-FIX-Do-not-return-IRQ_HANDLED-i.patch
++ features/all/mantis/0008-V4L-DVB-13706-MB86A16-Overhaul.patch
++ features/all/mantis/0009-V4L-DVB-13707-Mantis-Whitespace-cleanup.patch
++ features/all/mantis/0010-V4L-DVB-13708-Mantis-Remove-some-dead-code.patch
++ features/all/mantis/0011-V4L-DVB-13709-Mantis-VP-1034-Switch-13-18v-for-the-V.patch
++ features/all/mantis/0012-V4L-DVB-13710-Mantis-FIX-Use-swfilter-188-204-accord.patch
++ features/all/mantis/0013-V4L-DVB-13711-Mantis-FIX-Do-nor-toggle-GPIF-status.patch
++ features/all/mantis/0014-V4L-DVB-13712-Mantis-Add-locking-for-concurrent-acce.patch
++ features/all/mantis/0015-V4L-DVB-13713-MB86A16-Fix-Initialize-SNR-STATUS.patch
++ features/all/mantis/0016-V4L-DVB-13714-MB86A16-FIX-Code-simplification-use-hw.patch
++ features/all/mantis/0017-V4L-DVB-13715-Mantis-Kernel-I2C-changes-use-PCI-pare.patch
++ features/all/mantis/0018-V4L-DVB-13716-Mantis-Bug-incorrect-byte-swap.patch
++ features/all/mantis/0019-V4L-DVB-13717-MB86A16-Statistics-Updates.patch
++ features/all/mantis/0020-V4L-DVB-13718-Mantis-Use-gpio_set_bits-to-turn-OFF-t.patch
++ features/all/mantis/0021-V4L-DVB-13719-Mantis-VP-2033-Initial-test-switch-to-.patch
++ features/all/mantis/0022-V4L-DVB-13720-Mantis-Terratec-Cinergy-C-Add-support-.patch
++ features/all/mantis/0023-V4L-DVB-13721-Mantis-Bug-Before-bailing-out-Unlock.patch
++ features/all/mantis/0024-V4L-DVB-13722-Mantis-Revert-13560.patch
++ features/all/mantis/0025-V4L-DVB-13723-Mantis-VP-2040-Terratec-Cinergy-C-Add-.patch
++ features/all/mantis/0026-V4L-DVB-13724-Mantis-VP-1041-Initial-support-for-Man.patch
++ features/all/mantis/0027-V4L-DVB-13725-Mantis-VP-1041-Revert-to-old-register-.patch
++ features/all/mantis/0028-V4L-DVB-13726-Mantis-Skystar-HD2-Add-support-for-the.patch
++ features/all/mantis/0029-V4L-DVB-13727-Mantis-VP-1041-Bugfix-Sigh-Don-t-look-.patch
++ features/all/mantis/0030-V4L-DVB-13728-Mantis-Add-in-some-Host-Interface-defi.patch
++ features/all/mantis/0031-V4L-DVB-13729-Mantis-Add-in-a-license-header.patch
++ features/all/mantis/0032-V4L-DVB-13730-Mantis-Add-in-some-UART-definitions.patch
++ features/all/mantis/0033-V4L-DVB-13731-Mantis-Add-in-a-license-header.patch
++ features/all/mantis/0034-V4L-DVB-13732-Mantis-Add-in-some-Link-Layer-definiti.patch
++ features/all/mantis/0035-V4L-DVB-13733-Mantis-Start-with-the-PCMCIA-interface.patch
++ features/all/mantis/0036-V4L-DVB-13734-Mantis-Initial-go-at-an-Event-Manager.patch
++ features/all/mantis/0037-V4L-DVB-13735-Mantis-Implement-the-Event-Manager-tas.patch
++ features/all/mantis/0038-V4L-DVB-13736-Mantis-Implement-CAM-Plug-IN-and-Unplu.patch
++ features/all/mantis/0039-V4L-DVB-13737-Mantis-Register-the-CA-device-dummy-fu.patch
++ features/all/mantis/0040-V4L-DVB-13738-Mantis-Enable-IRQ0-events.patch
++ features/all/mantis/0041-V4L-DVB-13739-Mantis-Event-Manager-Handle-Masked-eve.patch
++ features/all/mantis/0042-V4L-DVB-13740-Mantis-Schedule-the-work-instead-of-ha.patch
++ features/all/mantis/0043-V4L-DVB-13741-Mantis-Implement-HIF-Mem-Read-Write-op.patch
++ features/all/mantis/0044-V4L-DVB-13742-Mantis-Implement-PCMCIA-I-O-Rd-Wr-oper.patch
++ features/all/mantis/0045-V4L-DVB-13743-Mantis-CA-Use-DVB_CA-Tuple-parser.patch
++ features/all/mantis/0046-V4L-DVB-13744-Mantis-CA-Use-Module-status-to-signal-.patch
++ features/all/mantis/0047-V4L-DVB-13745-Mantis-CA-Add-some-debug-statements.patch
++ features/all/mantis/0048-V4L-DVB-13746-Mantis-CA-Bug-Remove-duplicated-symbol.patch
++ features/all/mantis/0049-V4L-DVB-13747-Mantis-Bug-Fix-Use-Register-Address-ra.patch
++ features/all/mantis/0050-V4L-DVB-13748-Mantis-VP-2040-Add-support-for-VP-2040.patch
++ features/all/mantis/0051-V4L-DVB-13749-Mantis-CA-CA_SLAVE-Do-not-change-Slave.patch
++ features/all/mantis/0052-V4L-DVB-13750-Mantis-GPIO_CONTROL-Cache-a-given-GPIO.patch
++ features/all/mantis/0053-V4L-DVB-13751-Mantis-GPIO_CONTROL-Do-not-toggle-GPIO.patch
++ features/all/mantis/0054-V4L-DVB-13752-Mantis-CA-CAM_CONTROL-All-CAM-control-.patch
++ features/all/mantis/0055-V4L-DVB-13753-Mantis-CA-SLOT_CONTROL-Implement-Slot-.patch
++ features/all/mantis/0056-V4L-DVB-13754-Mantis-CAM_CONTROL-Implement-TS-contro.patch
++ features/all/mantis/0057-V4L-DVB-13755-Mantis-CA-CAM_CONTROL-Use-appropriate-.patch
++ features/all/mantis/0058-V4L-DVB-13756-Mantis-CA-CAM_CONTROL-Use-CAMCHANGE_IR.patch
++ features/all/mantis/0059-V4L-DVB-13757-Mantis-CA-CAM_CONTROL-Use-FRDA_IRQ-Eve.patch
++ features/all/mantis/0060-V4L-DVB-13758-Mantis-CA-CAM_CONTROL-Use-CAMREADY_IRQ.patch
++ features/all/mantis/0061-V4L-DVB-13759-Mantis-HIF-I-O-Use-the-LSB-octet-only.patch
++ features/all/mantis/0062-V4L-DVB-13760-Mantis-CA-CA_MODULE-Look-for-module-st.patch
++ features/all/mantis/0063-V4L-DVB-13761-Mantis-HIF-I-O-Temporary-workaround-us.patch
++ features/all/mantis/0064-V4L-DVB-13762-Mantis-CA-CA_MODULE-Look-for-the-modul.patch
++ features/all/mantis/0065-V4L-DVB-13763-Mantis-HIF-I-O-trim-delays-a-bit-appro.patch
++ features/all/mantis/0066-V4L-DVB-13764-Mantis-CA-SLOT-Add-some-debug-status.patch
++ features/all/mantis/0067-V4L-DVB-13765-Mantis-HIF-I-O-Add-some-debug-statemen.patch
++ features/all/mantis/0068-V4L-DVB-13766-Mantis-Bug-Fix-wrong-exit-condition.patch
++ features/all/mantis/0069-V4L-DVB-13767-Mantis-VP-1041-Bug-Add-in-missing-Mast.patch
++ features/all/mantis/0070-V4L-DVB-13768-Mantis-Enable-WRACK.patch
++ features/all/mantis/0071-V4L-DVB-13769-Mantis-Smart-Buffer-Burst-Read-Ready-c.patch
++ features/all/mantis/0072-V4L-DVB-13770-Mantis-Bug-Do-not-trigger-FR-DA-IRQ-fr.patch
++ features/all/mantis/0073-V4L-DVB-13771-Mantis-Reset-Flags-at-the-earliest-pos.patch
++ features/all/mantis/0074-V4L-DVB-13772-Mantis-Do-not-enable-Common-Memory-Acc.patch
++ features/all/mantis/0075-V4L-DVB-13773-Mantis-Enable-all-interrupts.patch
++ features/all/mantis/0076-V4L-DVB-13774-Mantis-Remove-redundant-wait-for-Burst.patch
++ features/all/mantis/0077-V4L-DVB-13775-Mantis-Remove-unnecessary-job-queues.patch
++ features/all/mantis/0078-V4L-DVB-13776-Mantis-Use-a-simple-timeout-instead-in.patch
++ features/all/mantis/0079-V4L-DVB-13777-Mantis-Use-a-Write-wait-queue-for-Writ.patch
++ features/all/mantis/0080-V4L-DVB-13778-Mantis-Wr-ACK-is-already-handled-in-th.patch
++ features/all/mantis/0081-V4L-DVB-13779-Mantis-Missing-wakeup-for-write-queue.patch
++ features/all/mantis/0082-V4L-DVB-13780-Mantis-HIF-I-O-Enable-Interrupts-for-R.patch
++ features/all/mantis/0083-V4L-DVB-13781-Mantis-CA-Bug-Fix-wrong-usage-of-HIFRD.patch
++ features/all/mantis/0084-V4L-DVB-13782-Mantis-Temporarily-disable-FRDA-irq.patch
++ features/all/mantis/0085-V4L-DVB-13783-Mantis-Technisat-Cablestar-HD2-Add-sup.patch
++ features/all/mantis/0086-V4L-DVB-13784-Mantis-Use-PCI-API-instead-of-hardcode.patch
++ features/all/mantis/0087-V4L-DVB-13785-Mantis-Do-not-disable-IRQ-s-while-bein.patch
++ features/all/mantis/0088-V4L-DVB-13786-Mantis-Bug-HIF-bits-already-shifted.patch
++ features/all/mantis/0089-V4L-DVB-13787-Mantis-Fix-build.patch
++ features/all/mantis/0090-V4L-DVB-13788-Mantis-CA-use-a-lock-for-the-relevant-.patch
++ features/all/mantis/0091-V4L-DVB-13789-Mantis-CA-Initialize-the-mutex.patch
++ features/all/mantis/0092-V4L-DVB-13790-Mantis-Relocate-queue-initialization.patch
++ features/all/mantis/0093-V4L-DVB-13792-Mantis-VP-2033-Do-not-claim-TDA10023.patch
++ features/all/mantis/0094-V4L-DVB-13794-Mantis-VP-3028-Initial-go-at-Serial-in.patch
++ features/all/mantis/0095-V4L-DVB-13795-Mantis-Hopper-Code-overhaul-add-Hopper.patch
++ features/all/mantis/0096-V4L-DVB-13796-Mantis-Add-missing-file-in-previous-co.patch
++ features/all/mantis/0097-V4L-DVB-13797-Mantis-Hopper-TDA665x-Large-overhaul.patch
++ features/all/mantis/0098-V4L-DVB-13798-Mantis-Enable-power-for-all-cards-use-.patch
++ features/all/mantis/0099-V4L-DVB-13799-Mantis-Unregister-frontend.patch
++ features/all/mantis/0100-V4L-DVB-13800-Mantis-I2C-optimization.-Required-dela.patch
++ features/all/mantis/0101-V4L-DVB-13801-MB86A16-Use-the-search-callback.patch
++ features/all/mantis/0102-V4L-DVB-13802-Mantis-Hopper-Fix-all-build-related-wa.patch
++ features/all/mantis/0103-V4L-DVB-13803-Remove-unused-dependency-on-CU1216.patch
++ features/all/mantis/0104-V4L-DVB-13804-Remove-unused-I2C-Adapter-ID.patch
++ features/all/mantis/0105-V4L-DVB-13805-Fix-Unregister-the-frontend-before-det.patch
++ features/all/mantis/0106-V4L-DVB-13806-Register-and-Initialize-Remote-control.patch
++ features/all/mantis/0107-V4L-DVB-13807-Fix-Free-device-in-the-device-registra.patch
++ features/all/mantis/0108-V4L-DVB-13809-Fix-Checkpatch-violations.patch
++ features/all/mantis/0109-V4L-DVB-13810-MB86A16-Use-DVB_-macros.patch
++ features/all/mantis/0110-V4L-DVB-13811-MB86A16-Update-Copyright-header.patch
++ features/all/mantis/0111-V4L-DVB-13812-Mantis-Hopper-Update-Copyright-header.patch
++ features/all/mantis/0112-V4L-DVB-13808b-mantis-replace-DMA_nnBIT_MASK-to-DMA_.patch
++ features/all/mantis/0113-V4L-DVB-13824a-mantis-Fix-__devexit-bad-annotations.patch
++ features/all/mantis/0114-V4L-DVB-13851-Fix-Input-dependency-for-Mantis.patch
++ features/all/mantis/0115-V4L-DVB-Mantis-remove-duplicated-include.patch
++ features/all/mantis/0116-V4L-DVB-dvb-fix-sparse-warnings.patch
++ features/all/mantis/0117-V4L-DVB-Fix-bad-whitespacing.patch
++ features/all/mantis/0118-V4L-DVB-13791-TDA10021-Do-not-claim-TDA10023.patch
++ features/all/mantis/0119-Mantis-hopper-use-MODULE_DEVICE_TABLE-use-the-macro-.patch
++ features/all/mantis/0120-V4L-DVB-13808-Mantis-Hopper-Build-update-for-Mantis-.patch
++ features/all/mantis/0121-V4L-DVB-mantis-Select-correct-frontends.patch
More information about the Kernel-svn-changes
mailing list