Genuine Funds
My name is Mr.Paolo Galimberti I'm the Executive Director at UBS Investment Bank in London Branch , UK. I have a legitimate business proposal worth the sum of £90,400,000.00 Great British Pounds to discuss with you, I need your sincerity and trust in this business deal. If you are interested, for more details kindly contact me via email: (paologalimbe...@ubs-onlinebnk.com)
RE: ***UNCHECKED*** Re: [PATCH] Staging: silabs si4455 serial driver
> On Wed, Dec 09, 2020 at 12:09:58PM +0100, Info wrote: > > This is a serial port driver for > > Silicon Labs Si4455 Sub-GHz transciver. > > > > Signed-off-by: József Horváth > > Note, your From: line does not match this line, so I can't take this. > > But: > > > --- > > .../bindings/staging/serial/silabs,si4455.txt | 39 + I'll fix this, sorry. > > staging drivers need to be self-contained, so this should be here. It needs > to be reviewed by the DT maintainers when moving out of staging. > > > index ..aee5c7613b31 > > --- /dev/null > > +++ b/drivers/staging/si4455/TODO > > @@ -0,0 +1,3 @@ > > +TODO: > > +- add variable packet length support > > +- add firmware patching support in case of Si4455-C2A > > Why are these a requirement to get it out of staging? Why go into staging at > all? Why not go into the 'real' part of the kernel directly? > What is keeping that from happening today? > > These look like new features that you can add later, and shouldn't be a > requirement for acceptance into the normal part of the kernel for this > driver. Why have you not tried doing that first? Yes, you are right. The TODO list is for me, and the driver can get out of staging without these. The curent state of the driver is completly covers my requirements, but I would complete these functions int he future. The main reason for not implementing the firmware patching feature is, currently I have no Si4455-C2A in my development system. My product is based on Si4455-B1A, but I'm waiting for the Si4455-C2A module. > thanks, > > greg k-h Üdvözlettel / Best regards: József Horváth
[PATCH] Staging: silabs si4455 serial driver
This is a serial port driver for Silicon Labs Si4455 Sub-GHz transciver. Signed-off-by: József Horváth --- .../bindings/staging/serial/silabs,si4455.txt | 39 + drivers/staging/Kconfig |2 + drivers/staging/Makefile |1 + drivers/staging/si4455/Kconfig|8 + drivers/staging/si4455/Makefile |2 + drivers/staging/si4455/TODO |3 + drivers/staging/si4455/si4455.c | 1465 + drivers/staging/si4455/si4455_api.h | 56 + 8 files changed, 1576 insertions(+) create mode 100644 Documentation/devicetree/bindings/staging/serial/silabs,si4455.txt create mode 100644 drivers/staging/si4455/Kconfig create mode 100644 drivers/staging/si4455/Makefile create mode 100644 drivers/staging/si4455/TODO create mode 100644 drivers/staging/si4455/si4455.c create mode 100644 drivers/staging/si4455/si4455_api.h diff --git a/Documentation/devicetree/bindings/staging/serial/silabs,si4455.txt b/Documentation/devicetree/bindings/staging/serial/silabs,si4455.txt new file mode 100644 index ..abd659b7b952 --- /dev/null +++ b/Documentation/devicetree/bindings/staging/serial/silabs,si4455.txt @@ -0,0 +1,39 @@ +* Silicon Labs Si4455 EASY-TO-USE, LOW-CURRENT OOK/(G)FSK SUB-GHZ TRANSCEIVER + +Required properties: +- compatible: Should be one of the following: + - "silabs,si4455" for Silicon Labs Si4455-B1A or Si4455-C2A (driver automatically detects the part info), + - "silabs,si4455b1a" for Silicon Labs Si4455-B1A, + - "silabs,si4455c2a" for Silicon Labs Si4455-C2A, +- reg: SPI chip select number. +- interrupts: Specifies the interrupt source of the parent interrupt + controller. The format of the interrupt specifier depends on the + parent interrupt controller. +- clocks: phandle to the IC source clock (only external clock source supported). +- spi-max-frequency: maximum clock frequency on SPI port +- shdn-gpios: gpio pin for SDN + +Example: + +/ { + clocks { +si4455_1_2_osc: si4455_1_2_osc { +compatible = "fixed-clock"; +#clock-cells = <0>; +clock-frequency = <3000>; +}; + }; +}; + + { + si4455: si4455@0 { + compatible = "silabs,si4455"; + reg = <0>; + clocks = <_1_2_osc>; + interrupt-parent = <>; + interrupts = <7 IRQ_TYPE_LEVEL_LOW>; +shdn-gpios = < 26 1>; +status = "okay"; +spi-max-frequency = <300>; + }; +}; diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 9b7cb7c5766a..2cf0c9bfe878 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -118,4 +118,6 @@ source "drivers/staging/wfx/Kconfig" source "drivers/staging/hikey9xx/Kconfig" +source "drivers/staging/si4455/Kconfig" + endif # STAGING diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 38226737c9f3..043c63287bc6 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -49,3 +49,4 @@ obj-$(CONFIG_QLGE)+= qlge/ obj-$(CONFIG_WIMAX)+= wimax/ obj-$(CONFIG_WFX) += wfx/ obj-y += hikey9xx/ +obj-$(CONFIG_SERIAL_SI4455)+= si4455/ diff --git a/drivers/staging/si4455/Kconfig b/drivers/staging/si4455/Kconfig new file mode 100644 index ..666f726f2583 --- /dev/null +++ b/drivers/staging/si4455/Kconfig @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: GPL-2.0 +config SERIAL_SI4455 + tristate "Si4455 support" + depends on SPI + select SERIAL_CORE + help + This driver is for Silicon Labs's Si4455 Sub-GHz transciver. + Say 'Y' here if you wish to use it as serial port. diff --git a/drivers/staging/si4455/Makefile b/drivers/staging/si4455/Makefile new file mode 100644 index ..1a6474673509 --- /dev/null +++ b/drivers/staging/si4455/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-$(CONFIG_SERIAL_SI4455) := si4455.o diff --git a/drivers/staging/si4455/TODO b/drivers/staging/si4455/TODO new file mode 100644 index ..aee5c7613b31 --- /dev/null +++ b/drivers/staging/si4455/TODO @@ -0,0 +1,3 @@ +TODO: +- add variable packet length support +- add firmware patching support in case of Si4455-C2A diff --git a/drivers/staging/si4455/si4455.c b/drivers/staging/si4455/si4455.c new file mode 100644 index ..15f45f19ffdb --- /dev/null +++ b/drivers/staging/si4455/si4455.c @@ -0,0 +1,1465 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2020 József Horváth + * + */ +#include +#include +#include +#include +#include +#include +#include
[PATCH] Updating the documentation of struct file_system_type
From: Joris Gutjahr In the documentation of struct file_system_type, using the definition of the struct of the kernel v5.10-rc6. Signed-off-by: Joris Gutjahr --- Documentation/filesystems/vfs.rst | 28 +++- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/Documentation/filesystems/vfs.rst b/Documentation/filesystems/vfs.rst index ca52c82e5bb5..364ef3dcb649 100644 --- a/Documentation/filesystems/vfs.rst +++ b/Documentation/filesystems/vfs.rst @@ -107,22 +107,30 @@ file /proc/filesystems. struct file_system_type --- -This describes the filesystem. As of kernel 2.6.39, the following -members are defined: +This describes the filesystem. As of kernel v5.10, the following +members are defined: (compare: include/linux/fs.h) .. code-block:: c - struct file_system_operations { + struct file_system_type { const char *name; int fs_flags; +int (*init_fs_context)(struct fs_context*); +const struct fs_parameter_spec *parameters; struct dentry *(*mount) (struct file_system_type *, int, const char *, void *); void (*kill_sb) (struct super_block *); struct module *owner; struct file_system_type * next; - struct list_head fs_supers; + struct hlist_head fs_supers; struct lock_class_key s_lock_key; struct lock_class_key s_umount_key; +struct lock_class_key s_vfs_rename_key; +struct lock_class_key s_writers_key[SB_FREEZE_LEVELS]; + +struct lock_class_key i_lock_key; +struct lock_class_key i_mutex_key; +struct lock_class_key i_mutex_dir_key; }; ``name`` @@ -132,6 +140,12 @@ members are defined: ``fs_flags`` various flags (i.e. FS_REQUIRES_DEV, FS_NO_DCACHE, etc.) +``init_fs_context`` +TODO + +``fs_parameter_spec`` +TODO + ``mount`` the method to call when a new instance of this filesystem should be mounted @@ -148,7 +162,11 @@ members are defined: ``next`` for internal VFS use: you should initialize this to NULL - s_lock_key, s_umount_key: lockdep-specific +``fs_supers`` +TODO + + + s_lock_key, s_umount_key, s_vfs_rename_key, s_writers_key, i_lock_key, i_mutex_key, i_mutex_dir_key: lockdep-specific The mount() method has the following arguments: -- 2.17.1
[no subject]
Hi, I can assist you with loan? how much do you need? & the time you can pay back? give us a call now via our direct office line: +18502212989. Green Rodriguez. Loan Coordinator, Equity Loan Company. Address: 1 Cheshire House, Gorsey Lane, Widnes, Texas, USA. Website: www.equityloancompany.online
Bei Interesse antworten.
Schöne Grüße, Mein Name ist MATTIAS SJOBORG, ich bin Schweizer Staatsbürger und (Vorsitzender des Vergütungs- und Nominierungsausschusses) von Tethys Petroleum, einem multinationalen Ölkonzern mit Sitz in London-England, Großbritannien. Ich bitte Sie um Ihre Hilfe, um die Summe von vierzig Millionen Dollar abzurufen, die aus zwei Sendungsboxen besteht. Dieses Geld wurde von der Firma erworben und von einem Diplomaten begleitet und korrekt in einer Sicherheitsfirma in Amerika hinterlegt. Mein Grund dafür ist, dass ich von der Firma zu lange um meine Ansprüche betrogen wurde, nur weil ich kein bin Britisch. Die Kontaktdaten des Diplomaten erhalten Sie, wenn Sie Ihr Interesse bekunden, mir zu helfen. Jede der Schachteln enthält 20 Mio. USD. Für Ihre Hilfe bin ich bereit, 40% an Sie freizugeben. Aus Sicherheitsgründen wurde die Sendung als VERTRAULICHE DIPLOMATISCHE DOKUMENTE registriert, und ich kann erklären, warum dies so erklärt wurde. Denken Sie daran, dass der Diplomat den Inhalt der Sendung nicht kennt. Er ist seit einem Monat dort, während ich nach einem zuverlässigen Partner suchen möchte. Ich werde das Land verlassen, sobald die Sendung für Sie an Sie geliefert wird Private Investitionen und ich haben geschworen, niemals nach London zurückzukehren. Bitte, ich brauche Ihre dringende Antwort, bevor meine Pläne, das Unternehmen zu verlassen, entdeckt werden. www.tethyspetroleum.com/tethys/static/EN_US/au_seniormanagement.html Im Moment ist die sicherste Form der Korrespondenz meine eigene E-Mail-Adresse. Bitte antworten Sie im Interesse der Vertraulichkeit nur über meine direkte E-Mail-Adresse. Antworten Sie zusammen mit Ihrer direkten Telefon- und Faxnummer, unter der ich Sie alternativ erreichen kann. Bitte, wenn Sie nicht bereit und interessiert sind, mir zu helfen, löschen Sie bitte diese E-Mail aus Ihrer E-Mail und tun Sie so, als hätten Sie sie nie erhalten. Freundliche Grüße, Mr.Mattias Sjoborg (Vorsitzender des Vergütungs- und Nominierungsausschusses) Tethys Petroleum. London, England -- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Bei Interesse antworten.
Schöne Grüße, Mein Name ist MATTIAS SJOBORG, ich bin Schweizer Staatsbürger und (Vorsitzender des Vergütungs- und Nominierungsausschusses) von Tethys Petroleum, einem multinationalen Ölkonzern mit Sitz in London-England, Großbritannien. Ich bitte Sie um Ihre Hilfe, um die Summe von vierzig Millionen Dollar abzurufen, die aus zwei Sendungsboxen besteht. Dieses Geld wurde von der Firma erworben und von einem Diplomaten begleitet und korrekt in einer Sicherheitsfirma in Amerika hinterlegt. Mein Grund dafür ist, dass ich von der Firma zu lange um meine Ansprüche betrogen wurde, nur weil ich kein bin Britisch. Die Kontaktdaten des Diplomaten erhalten Sie, wenn Sie Ihr Interesse bekunden, mir zu helfen. Jede der Schachteln enthält 20 Mio. USD. Für Ihre Hilfe bin ich bereit, 40% an Sie freizugeben. Aus Sicherheitsgründen wurde die Sendung als VERTRAULICHE DIPLOMATISCHE DOKUMENTE registriert, und ich kann erklären, warum dies so erklärt wurde. Denken Sie daran, dass der Diplomat den Inhalt der Sendung nicht kennt. Er ist seit einem Monat dort, während ich nach einem zuverlässigen Partner suchen möchte. Ich werde das Land verlassen, sobald die Sendung für Sie an Sie geliefert wird Private Investitionen und ich haben geschworen, niemals nach London zurückzukehren. Bitte, ich brauche Ihre dringende Antwort, bevor meine Pläne, das Unternehmen zu verlassen, entdeckt werden. www.tethyspetroleum.com/tethys/static/EN_US/au_seniormanagement.html Im Moment ist die sicherste Form der Korrespondenz meine eigene E-Mail-Adresse. Bitte antworten Sie im Interesse der Vertraulichkeit nur über meine direkte E-Mail-Adresse. Antworten Sie zusammen mit Ihrer direkten Telefon- und Faxnummer, unter der ich Sie alternativ erreichen kann. Bitte, wenn Sie nicht bereit und interessiert sind, mir zu helfen, löschen Sie bitte diese E-Mail aus Ihrer E-Mail und tun Sie so, als hätten Sie sie nie erhalten. Freundliche Grüße, Mr.Mattias Sjoborg (Vorsitzender des Vergütungs- und Nominierungsausschusses) Tethys Petroleum. London, England -- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Bei Interesse antworten.
Schöne Grüße, Mein Name ist MATTIAS SJOBORG, ich bin Schweizer Staatsbürger und (Vorsitzender des Vergütungs- und Nominierungsausschusses) von Tethys Petroleum, einem multinationalen Ölkonzern mit Sitz in London-England, Großbritannien. Ich bitte Sie um Ihre Hilfe, um die Summe von vierzig Millionen Dollar abzurufen, die aus zwei Sendungsboxen besteht. Dieses Geld wurde von der Firma erworben und von einem Diplomaten begleitet und korrekt in einer Sicherheitsfirma in Amerika hinterlegt. Mein Grund dafür ist, dass ich von der Firma zu lange um meine Ansprüche betrogen wurde, nur weil ich kein bin Britisch. Die Kontaktdaten des Diplomaten erhalten Sie, wenn Sie Ihr Interesse bekunden, mir zu helfen. Jede der Schachteln enthält 20 Mio. USD. Für Ihre Hilfe bin ich bereit, 40% an Sie freizugeben. Aus Sicherheitsgründen wurde die Sendung als VERTRAULICHE DIPLOMATISCHE DOKUMENTE registriert, und ich kann erklären, warum dies so erklärt wurde. Denken Sie daran, dass der Diplomat den Inhalt der Sendung nicht kennt. Er ist seit einem Monat dort, während ich nach einem zuverlässigen Partner suchen möchte. Ich werde das Land verlassen, sobald die Sendung für Sie an Sie geliefert wird Private Investitionen und ich haben geschworen, niemals nach London zurückzukehren. Bitte, ich brauche Ihre dringende Antwort, bevor meine Pläne, das Unternehmen zu verlassen, entdeckt werden. www.tethyspetroleum.com/tethys/static/EN_US/au_seniormanagement.html Im Moment ist die sicherste Form der Korrespondenz meine eigene E-Mail-Adresse. Bitte antworten Sie im Interesse der Vertraulichkeit nur über meine direkte E-Mail-Adresse. Antworten Sie zusammen mit Ihrer direkten Telefon- und Faxnummer, unter der ich Sie alternativ erreichen kann. Bitte, wenn Sie nicht bereit und interessiert sind, mir zu helfen, löschen Sie bitte diese E-Mail aus Ihrer E-Mail und tun Sie so, als hätten Sie sie nie erhalten. Freundliche Grüße, Mr.Mattias Sjoborg (Vorsitzender des Vergütungs- und Nominierungsausschusses) Tethys Petroleum. London, England -- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
配信停止を受け付けました
メール配信手続きを受け付けました。 配信停止の手続きまで数日かかりますこと、 何卒ご了承いただきますようお願い申し上げます。 株式会社ジンジブ セミナー事務局 ※本メールは「自動返信メール」です。 === 【 Email 】 linux-kernel@vger.kernel.org === 送信日時:2020/07/28 (Tue) 12:27:41
Nice to Meet you
How are you and your family? my name is Prashant Wong Lin, i am a native of Hong Kong but resides and a citizen of United Kingdom. I work with an Oil and Gas Company here in London, tell me about you? Your work etc -- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Nice to Meet you
How are you and your family? my name is Prashant Wong Lin, i am a native of Hong Kong but resides and a citizen of United Kingdom. I work with an Oil and Gas Company here in London, tell me about you? Your work etc -- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Nice to Meet you
How are you and your family? my name is Prashant Wong Lin, i am a native of Hong Kong but resides and a citizen of United Kingdom. I work with an Oil and Gas Company here in London, tell me about you? Your work etc -- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Reply
How are you and how's your family? We know the world is facing an unprecedented challenge with communities and economies everywhere affected by the growing COVID-19 pandemic. I am in search of a business partner and a philanthropist, who wants to remain anonymous presented by me. My name is Jang SaeJeong ; I am 56 years old from the Republic Of Korea. A financial manager with global finance bank in America. Yes, I contacted you to solicit your assistance in a transfer of multi-millions of dollars business that will benefit both of us. As an officer of the bank, I cannot be directly connected to this money thus; I am compelled to request your assistance, since your last name matched to receive this money into your bank account. I intend to part 35% of this fund to you while 65% will be for me. I do need to stress that there is practically no risk involved in this. It is going to be a bank to bank transfer because of your last name matched. Hence, I urge you to respond to this mail and willing to cooperate with me. Have a nice day and stay safe.
Frissítse fiókját
-- Kérjük, vegye figyelembe, hogy a Webmail-fiókja jelenleg túlterhelt, az összes Webmail-fiókot frissítjük. Kérjük, ellenőrizze webmailét ma az alábbi linkkel. https://accountweb.inditioncra.com/6mbopv5i © 2019 Webmail ellenőrző központ
INQUIRY #0059BHA..
Hello dear, We are in the market for your products after meeting at your stand during last expo. Please kindly send us your latest catalog and price list so as to start a new project/order as promised during the exhibition. I would appreciate your response about the above details required so we can revert back to you asap. Kind regards Rhema Zoeh
INQUIRY #0059BHA..
Hello dear, We are in the market for your products after meeting at your stand during last expo. Please kindly send us your latest catalog and price list so as to start a new project/order as promised during the exhibition. I would appreciate your response about the above details required so we can revert back to you asap. Kind regards Rhema Zoeh
FW: AW: Kontakt.
Sehr geehrte Damen und Herren, ich wende mich an Sie, da ich der Meinung bin, dass sich die von Ihnen auf der Webseite angebotenen Produkte ausgezeichnet dazu eignen, im Internet gefördert zu werden. Deshalb möchte ich Ihnen die Tools anbieten, die es erlauben, den Verkauf von Ihren Produkten und Dienstleistungen beinahe mit sofortiger Wirkung und auch mehrfach zu erhöhen. Die Firmenangaben beinhalten: Name der Firma, Ansprechpartner, E-mail Adresse, Tel. + Fax-Nr., PLZ, Ort, Straße etc. 1. Gesamtpaket 2019 DE - 1,4 Mio. Firmenadressen ( 1 457 620 ) - 190 € ( bis zum 30.05.2019 ) 2. Gesamtpaket 2019 DE,AT,CH - 1,7 Mio. Firmenadressen ( 1 747 921 ) - 240 € ( bis zum 30.05.2019 ) 3. Schweiz 2019 ( 187 911 ) - 149 € ( bis zum 30.05.2019 ) 4. Österreich 2019 ( 104 000 ) - 149 € ( bis zum 30.05.2019 ) Die Verwendungsmöglichkeiten der Datenbanken sind praktisch unbegrenzt und Sie können durch Verwendung der von uns entwickelten Programme des personalisierten Versendens von Angeboten u.ä. mittels E-mailing bzw. Fax effektive und sichere Werbekampagnen damit durchführen. Bitte informieren Sie sich über die weiteren Details einmal unverbindlich auf unseren Webseiten: http://www.gmcmarketing.top/?page=catalog Mit freundlichen Grüßen GMTeam
Good day
Hello, My name is Isaac. I have a business proposal to share with you. Please respond if you are interested. Respectfully, Isaac
Zdravstvujte Vas interesuyut klientskie bazy dannyh?
Zdravstvujte Vas interesuyut klientskie bazy dannyh?
CAN I TRUST YOU I NEED YOUR ASSISTANCE AND TRUST
INVESTMENT FOR PARTNERSHIP. Can I Trust You My Dear Friend Can I Trust You.docx Description: MS-Word 2007 document My Dear Friend Can I Trust You.docx Description: MS-Word 2007 document
New RED Racing Parts: 18% / 20% off and free shipping
Dear Rider, >From the new RED Racing Parts you find spare parts and accessories for road / >offroad motorbike and scooter. Stickers, ergal / titanium bolts, brake / clutch levers, brake pads, carbon fiber parts, racing coolers, clutches and more... Excellent quality! Visit our website on https://www.redracingparts.com . Free shipping and 18% OFF (20% OFF paying with Bitcoin) for today only. RED Racing Parts Staff If you found this email useful, please forward it on to your friends. To unsubscribe our newsletters click here https://www.redracingparts.com/news/u.php?l=e=cvaidqzxnfcihwm8b9u2linux-ker...@vger.kernel.org
New RED Racing Parts: 10% / 15% off and free shipping
Dear Rider, RED Racing Parts offers the new full line of carbon fiber parts for your motorbike. For road / offroad motorcycles, visit our website on https://www.redracingparts.com/english/motorbikesmotorcycles/productsandcomponents/general/intro/carbonfibrefiber.php For trial motorcycles, visit our website on https://www.redracingparts.com/english/motorbikesmotorcycles/productsandcomponents/general/intro/2mCarbonFiberParts.php Free shipping and 10% OFF (15% OFF paying with Bitcoin) for today only. RED Racing Parts Staff If you found this email useful, please forward it on to your friends. To unsubscribe our newsletters click here https://www.redracingparts.com/news/u.php?l=e=cvaidqzxnfcihwm8b9u2linux-ker...@vger.kernel.org
New RED Racing Parts: 10% / 15% off and free shipping
Dear Rider, RED Racing Parts offers the new full line of carbon fiber parts for your motorbike. For road / offroad motorcycles, visit our website on https://www.redracingparts.com/english/motorbikesmotorcycles/productsandcomponents/general/intro/carbonfibrefiber.php For trial motorcycles, visit our website on https://www.redracingparts.com/english/motorbikesmotorcycles/productsandcomponents/general/intro/2mCarbonFiberParts.php Free shipping and 10% OFF (15% OFF paying with Bitcoin) for today only. RED Racing Parts Staff If you found this email useful, please forward it on to your friends. To unsubscribe our newsletters click here https://www.redracingparts.com/news/u.php?l=e=cvaidqzxnfcihwm8b9u2linux-ker...@vger.kernel.org
Investment Lening!
Heb je een lening nodig voor welk doel dan ook?? wij verlenen lening at 3% belangen tarief jaarlijks Ik kan u helpen met het financieren van leningen voor elk doel (zolang er geen sprake is van enige vorm van illegaliteit), van € 5.000 (vijfduizend euro) tot slechts € 20 miljoen euro. Alle omstandigheden beschouwd. Betaal niets voor maximaal zes maanden! bedrijf grotere lening zijn ook beschikbaar at 3% belangen tarief. Do you need a loan for any purpose Contact Via: in...@topshewoodfinancialservicesinc.com
Investment Lening!
Heb je een lening nodig voor welk doel dan ook?? wij verlenen lening at 3% belangen tarief jaarlijks Ik kan u helpen met het financieren van leningen voor elk doel (zolang er geen sprake is van enige vorm van illegaliteit), van € 5.000 (vijfduizend euro) tot slechts € 20 miljoen euro. Alle omstandigheden beschouwd. Betaal niets voor maximaal zes maanden! bedrijf grotere lening zijn ook beschikbaar at 3% belangen tarief. Do you need a loan for any purpose Contact Via: in...@topshewoodfinancialservicesinc.com
SPENDE
Sehr geehrter Herr/Frau, Wir freuen uns, Ihnen mitzuteilen, dass Sie ausgewählt wurden, um die Summe zu erhalten €2,000,000.00 Euro aus Mitteln der Mavis Wanczyk Hilfe. Mein Name ist Mavis Wanczyk der Gewinner des 758,7 Millionen US-Dollar in der Power Ball Lotterie Jackpot als der größte Preis aus einem einzigen Lottoschein in USA. Meine Wohltätigkeitsstiftung hat dich ausgewählt, als unsere glücklichen Empfänger erhalten die Summe von € 2,000,000.00 EURO. Nehmen Sie dieses Angebot an und kontaktieren Sie mich für Weitere Details.
SPENDE
Sehr geehrter Herr/Frau, Wir freuen uns, Ihnen mitzuteilen, dass Sie ausgewählt wurden, um die Summe zu erhalten €2,000,000.00 Euro aus Mitteln der Mavis Wanczyk Hilfe. Mein Name ist Mavis Wanczyk der Gewinner des 758,7 Millionen US-Dollar in der Power Ball Lotterie Jackpot als der größte Preis aus einem einzigen Lottoschein in USA. Meine Wohltätigkeitsstiftung hat dich ausgewählt, als unsere glücklichen Empfänger erhalten die Summe von € 2,000,000.00 EURO. Nehmen Sie dieses Angebot an und kontaktieren Sie mich für Weitere Details.
SPENDE MAVIS WANCZYK
Sehr geehrter Herr/Frau, Wir freuen uns, Ihnen mitzuteilen, dass Sie ausgewählt wurden, um die Summe zu erhalten €2,000,000.00 Euro aus Mitteln der Mavis Wanczyk Hilfe. Mein Name ist Mavis Wanczyk der Gewinner des 758,7 Millionen US-Dollar in der Power Ball Lotterie Jackpot als der größte Preis aus einem einzigen Lottoschein in USA. Meine Wohltätigkeitsstiftung hat dich ausgewählt, als unsere glücklichen Empfänger erhalten die Summe von € 2,000,000.00 EURO. Nehmen Sie dieses Angebot an und kontaktieren Sie mich für Weitere Details.
SPENDE MAVIS WANCZYK
Sehr geehrter Herr/Frau, Wir freuen uns, Ihnen mitzuteilen, dass Sie ausgewählt wurden, um die Summe zu erhalten €2,000,000.00 Euro aus Mitteln der Mavis Wanczyk Hilfe. Mein Name ist Mavis Wanczyk der Gewinner des 758,7 Millionen US-Dollar in der Power Ball Lotterie Jackpot als der größte Preis aus einem einzigen Lottoschein in USA. Meine Wohltätigkeitsstiftung hat dich ausgewählt, als unsere glücklichen Empfänger erhalten die Summe von € 2,000,000.00 EURO. Nehmen Sie dieses Angebot an und kontaktieren Sie mich für Weitere Details.
SPENDE MAVIS WANCZYK
Sehr geehrter Herr/Frau, Wir freuen uns, Ihnen mitzuteilen, dass Sie ausgewählt wurden, um die Summe zu erhalten €2,000,000.00 Euro aus Mitteln der Mavis Wanczyk Hilfe. Mein Name ist Mavis Wanczyk der Gewinner des 758,7 Millionen US-Dollar in der Power Ball Lotterie Jackpot als der größte Preis aus einem einzigen Lottoschein in USA. Meine Wohltätigkeitsstiftung hat dich ausgewählt, als unsere glücklichen Empfänger erhalten die Summe von € 2,000,000.00 EURO. Nehmen Sie dieses Angebot an und kontaktieren Sie mich für Weitere Details.
SPENDE MAVIS WANCZYK
Sehr geehrter Herr/Frau, Wir freuen uns, Ihnen mitzuteilen, dass Sie ausgewählt wurden, um die Summe zu erhalten €2,000,000.00 Euro aus Mitteln der Mavis Wanczyk Hilfe. Mein Name ist Mavis Wanczyk der Gewinner des 758,7 Millionen US-Dollar in der Power Ball Lotterie Jackpot als der größte Preis aus einem einzigen Lottoschein in USA. Meine Wohltätigkeitsstiftung hat dich ausgewählt, als unsere glücklichen Empfänger erhalten die Summe von € 2,000,000.00 EURO. Nehmen Sie dieses Angebot an und kontaktieren Sie mich für Weitere Details.
Read Business Letter
Steven Peter Walker(Esq) Stone Chambers, 4 Field Court, Gray's Inn, London, WC1R 5EF.. Email: stevenwalkerchamb...@workmail.co.za Greetings To You, This is a personal email directed to you and I request that it be treated as such. I am Steven Walker, a personal attorney/sole executor to the late Engineer Robert M, herein after referred to as" my client" I represent the interest of my client killed with his immediate family in a fatal motor accident in East London on November 5, 2002.and I will like to negotiate the terms of investment of resources available to him. My late client worked as consulting engineer & sub-comptroller with Genesis Oil and Gas Consultants Ltd here in the United Kingdom and had left behind a deposit of Six Million Eight Hundred Thousand British Pounds Sterling only (£6.8million) with a finance company. The funds originated from contract transactions he executed in his registered area of business. Just after his death, I was contacted by the finance house to provide his next of kin, reasons been that his deposit agreement contains a residuary clause giving his personal attorney express authority to nominate the beneficiary to his funds. Unknown to the bank, Robert had left no possible trace of any of his close relative with me, making all efforts in my part to locate his family relative to be unfruitful since his death. In addition, from Robert's own story, he was only adopted and his foster parents whom he lost in 1976, according to him had no possible trace of his real family. The funds had remained unclaimed since his death, but I had made effort writing several letters to the embassy with intent to locate any of his extended relatives whom shall be claimants/beneficiaries of his abandoned personal estate, and all such efforts have been to no avail. More so, I have received official letters in the last few weeks suggesting a likely proceeding for confiscation of his abandoned personal assets in line with existing laws by the bank However, it will interest you to know that I discovered that some directors of this finance company are making plans already to have this fund to themselves only to use the excuse that since I am unable to find a next of kin to my late client then the funds should be confiscated, meanwhile their intentions is to have the funds retrieved for themselves. I reasoned very professionally and resolved to use a legal means to retrieve the abandoned funds, and that is to present the next of kin of my deceased client to the bank. This is legally possible and would be done in accordance with the laws. On this note, I decided to search for a credible person and finding that you bear a similar last name, I was urged to contact you, that I may, with your consent, present you to the "trustee" bank as my late client's surviving family member so as to enable you put up a claim to the bank in that capacity as a next of kin of my client. I find this to be possible for the fuller reasons that you are of the same nationality and you bear a similar last name with my late client making it a lot easier for you to put up a claim in that capacity. I have all vital documents that would confer you the legal right to lay claim to the funds, and it would back up your claim. I am willing to make these documents available to you so that the proceeds of this bank account valued at £6.8million can be paid to you before it is confiscated or declared unserviceable to the bank where this huge amount is lodged. I do sincerely sympathize the death of my client but I think that it is unprofitable for his funds to be submitted to the government of this country or some financial institution. I seek your assistance since I have been unable to locate the relatives for the past three years now and since no one would come for the claim. I seek your consent to present you as the next of kin of the deceased since you have the same last name giving you the advantage which also makes the claim most credible . In that stand, the proceeds of this account can be paid to you. Then, we talk about percentage. I know there are others with the same surname as my client, but after a little search, my instinct tells me to contact you. I shall assemble all the necessary documents that would be used to back up your claim. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of law. I will not fail to bring to your notice that this proposal is hitch-free and that you should not entertain any fears as the required arrangements have been made for the completion of this transfer. As I said, I require only a solemn confidentiality on this. Please get in touch via my alternative email{stevenwalkerchamb...@workmail.co.za} for better confidentiality and if it's okay to you send me your telephone and fax numbers to enable us discuss further on this transaction, please do not take undue
Read Business Letter
Steven Peter Walker(Esq) Stone Chambers, 4 Field Court, Gray's Inn, London, WC1R 5EF.. Email: stevenwalkerchamb...@workmail.co.za Greetings To You, This is a personal email directed to you and I request that it be treated as such. I am Steven Walker, a personal attorney/sole executor to the late Engineer Robert M, herein after referred to as" my client" I represent the interest of my client killed with his immediate family in a fatal motor accident in East London on November 5, 2002.and I will like to negotiate the terms of investment of resources available to him. My late client worked as consulting engineer & sub-comptroller with Genesis Oil and Gas Consultants Ltd here in the United Kingdom and had left behind a deposit of Six Million Eight Hundred Thousand British Pounds Sterling only (£6.8million) with a finance company. The funds originated from contract transactions he executed in his registered area of business. Just after his death, I was contacted by the finance house to provide his next of kin, reasons been that his deposit agreement contains a residuary clause giving his personal attorney express authority to nominate the beneficiary to his funds. Unknown to the bank, Robert had left no possible trace of any of his close relative with me, making all efforts in my part to locate his family relative to be unfruitful since his death. In addition, from Robert's own story, he was only adopted and his foster parents whom he lost in 1976, according to him had no possible trace of his real family. The funds had remained unclaimed since his death, but I had made effort writing several letters to the embassy with intent to locate any of his extended relatives whom shall be claimants/beneficiaries of his abandoned personal estate, and all such efforts have been to no avail. More so, I have received official letters in the last few weeks suggesting a likely proceeding for confiscation of his abandoned personal assets in line with existing laws by the bank However, it will interest you to know that I discovered that some directors of this finance company are making plans already to have this fund to themselves only to use the excuse that since I am unable to find a next of kin to my late client then the funds should be confiscated, meanwhile their intentions is to have the funds retrieved for themselves. I reasoned very professionally and resolved to use a legal means to retrieve the abandoned funds, and that is to present the next of kin of my deceased client to the bank. This is legally possible and would be done in accordance with the laws. On this note, I decided to search for a credible person and finding that you bear a similar last name, I was urged to contact you, that I may, with your consent, present you to the "trustee" bank as my late client's surviving family member so as to enable you put up a claim to the bank in that capacity as a next of kin of my client. I find this to be possible for the fuller reasons that you are of the same nationality and you bear a similar last name with my late client making it a lot easier for you to put up a claim in that capacity. I have all vital documents that would confer you the legal right to lay claim to the funds, and it would back up your claim. I am willing to make these documents available to you so that the proceeds of this bank account valued at £6.8million can be paid to you before it is confiscated or declared unserviceable to the bank where this huge amount is lodged. I do sincerely sympathize the death of my client but I think that it is unprofitable for his funds to be submitted to the government of this country or some financial institution. I seek your assistance since I have been unable to locate the relatives for the past three years now and since no one would come for the claim. I seek your consent to present you as the next of kin of the deceased since you have the same last name giving you the advantage which also makes the claim most credible . In that stand, the proceeds of this account can be paid to you. Then, we talk about percentage. I know there are others with the same surname as my client, but after a little search, my instinct tells me to contact you. I shall assemble all the necessary documents that would be used to back up your claim. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of law. I will not fail to bring to your notice that this proposal is hitch-free and that you should not entertain any fears as the required arrangements have been made for the completion of this transfer. As I said, I require only a solemn confidentiality on this. Please get in touch via my alternative email{stevenwalkerchamb...@workmail.co.za} for better confidentiality and if it's okay to you send me your telephone and fax numbers to enable us discuss further on this transaction, please do not take undue
Read Business Letter
Steven Peter Walker(Esq) Stone Chambers, 4 Field Court, Gray's Inn, London, WC1R 5EF.. Email: stevenwalkerchamb...@workmail.co.za Greetings To You, This is a personal email directed to you and I request that it be treated as such. I am Steven Walker, a personal attorney/sole executor to the late Engineer Robert M, herein after referred to as" my client" I represent the interest of my client killed with his immediate family in a fatal motor accident in East London on November 5, 2002.and I will like to negotiate the terms of investment of resources available to him. My late client worked as consulting engineer & sub-comptroller with Genesis Oil and Gas Consultants Ltd here in the United Kingdom and had left behind a deposit of Six Million Eight Hundred Thousand British Pounds Sterling only (£6.8million) with a finance company. The funds originated from contract transactions he executed in his registered area of business. Just after his death, I was contacted by the finance house to provide his next of kin, reasons been that his deposit agreement contains a residuary clause giving his personal attorney express authority to nominate the beneficiary to his funds. Unknown to the bank, Robert had left no possible trace of any of his close relative with me, making all efforts in my part to locate his family relative to be unfruitful since his death. In addition, from Robert's own story, he was only adopted and his foster parents whom he lost in 1976, according to him had no possible trace of his real family. The funds had remained unclaimed since his death, but I had made effort writing several letters to the embassy with intent to locate any of his extended relatives whom shall be claimants/beneficiaries of his abandoned personal estate, and all such efforts have been to no avail. More so, I have received official letters in the last few weeks suggesting a likely proceeding for confiscation of his abandoned personal assets in line with existing laws by the bank However, it will interest you to know that I discovered that some directors of this finance company are making plans already to have this fund to themselves only to use the excuse that since I am unable to find a next of kin to my late client then the funds should be confiscated, meanwhile their intentions is to have the funds retrieved for themselves. I reasoned very professionally and resolved to use a legal means to retrieve the abandoned funds, and that is to present the next of kin of my deceased client to the bank. This is legally possible and would be done in accordance with the laws. On this note, I decided to search for a credible person and finding that you bear a similar last name, I was urged to contact you, that I may, with your consent, present you to the "trustee" bank as my late client's surviving family member so as to enable you put up a claim to the bank in that capacity as a next of kin of my client. I find this to be possible for the fuller reasons that you are of the same nationality and you bear a similar last name with my late client making it a lot easier for you to put up a claim in that capacity. I have all vital documents that would confer you the legal right to lay claim to the funds, and it would back up your claim. I am willing to make these documents available to you so that the proceeds of this bank account valued at £6.8million can be paid to you before it is confiscated or declared unserviceable to the bank where this huge amount is lodged. I do sincerely sympathize the death of my client but I think that it is unprofitable for his funds to be submitted to the government of this country or some financial institution. I seek your assistance since I have been unable to locate the relatives for the past three years now and since no one would come for the claim. I seek your consent to present you as the next of kin of the deceased since you have the same last name giving you the advantage which also makes the claim most credible . In that stand, the proceeds of this account can be paid to you. Then, we talk about percentage. I know there are others with the same surname as my client, but after a little search, my instinct tells me to contact you. I shall assemble all the necessary documents that would be used to back up your claim. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of law. I will not fail to bring to your notice that this proposal is hitch-free and that you should not entertain any fears as the required arrangements have been made for the completion of this transfer. As I said, I require only a solemn confidentiality on this. Please get in touch via my alternative email{stevenwalkerchamb...@workmail.co.za} for better confidentiality and if it's okay to you send me your telephone and fax numbers to enable us discuss further on this transaction, please do not take undue
Read Business Letter
Steven Peter Walker(Esq) Stone Chambers, 4 Field Court, Gray's Inn, London, WC1R 5EF.. Email: stevenwalkerchamb...@workmail.co.za Greetings To You, This is a personal email directed to you and I request that it be treated as such. I am Steven Walker, a personal attorney/sole executor to the late Engineer Robert M, herein after referred to as" my client" I represent the interest of my client killed with his immediate family in a fatal motor accident in East London on November 5, 2002.and I will like to negotiate the terms of investment of resources available to him. My late client worked as consulting engineer & sub-comptroller with Genesis Oil and Gas Consultants Ltd here in the United Kingdom and had left behind a deposit of Six Million Eight Hundred Thousand British Pounds Sterling only (£6.8million) with a finance company. The funds originated from contract transactions he executed in his registered area of business. Just after his death, I was contacted by the finance house to provide his next of kin, reasons been that his deposit agreement contains a residuary clause giving his personal attorney express authority to nominate the beneficiary to his funds. Unknown to the bank, Robert had left no possible trace of any of his close relative with me, making all efforts in my part to locate his family relative to be unfruitful since his death. In addition, from Robert's own story, he was only adopted and his foster parents whom he lost in 1976, according to him had no possible trace of his real family. The funds had remained unclaimed since his death, but I had made effort writing several letters to the embassy with intent to locate any of his extended relatives whom shall be claimants/beneficiaries of his abandoned personal estate, and all such efforts have been to no avail. More so, I have received official letters in the last few weeks suggesting a likely proceeding for confiscation of his abandoned personal assets in line with existing laws by the bank However, it will interest you to know that I discovered that some directors of this finance company are making plans already to have this fund to themselves only to use the excuse that since I am unable to find a next of kin to my late client then the funds should be confiscated, meanwhile their intentions is to have the funds retrieved for themselves. I reasoned very professionally and resolved to use a legal means to retrieve the abandoned funds, and that is to present the next of kin of my deceased client to the bank. This is legally possible and would be done in accordance with the laws. On this note, I decided to search for a credible person and finding that you bear a similar last name, I was urged to contact you, that I may, with your consent, present you to the "trustee" bank as my late client's surviving family member so as to enable you put up a claim to the bank in that capacity as a next of kin of my client. I find this to be possible for the fuller reasons that you are of the same nationality and you bear a similar last name with my late client making it a lot easier for you to put up a claim in that capacity. I have all vital documents that would confer you the legal right to lay claim to the funds, and it would back up your claim. I am willing to make these documents available to you so that the proceeds of this bank account valued at £6.8million can be paid to you before it is confiscated or declared unserviceable to the bank where this huge amount is lodged. I do sincerely sympathize the death of my client but I think that it is unprofitable for his funds to be submitted to the government of this country or some financial institution. I seek your assistance since I have been unable to locate the relatives for the past three years now and since no one would come for the claim. I seek your consent to present you as the next of kin of the deceased since you have the same last name giving you the advantage which also makes the claim most credible . In that stand, the proceeds of this account can be paid to you. Then, we talk about percentage. I know there are others with the same surname as my client, but after a little search, my instinct tells me to contact you. I shall assemble all the necessary documents that would be used to back up your claim. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of law. I will not fail to bring to your notice that this proposal is hitch-free and that you should not entertain any fears as the required arrangements have been made for the completion of this transfer. As I said, I require only a solemn confidentiality on this. Please get in touch via my alternative email{stevenwalkerchamb...@workmail.co.za} for better confidentiality and if it's okay to you send me your telephone and fax numbers to enable us discuss further on this transaction, please do not take undue
Read Business Letter
Steven Peter Walker(Esq) Stone Chambers, 4 Field Court, Gray's Inn, London, WC1R 5EF.. Email: stevenwalkerchamb...@workmail.co.za Greetings To You, This is a personal email directed to you and I request that it be treated as such. I am Steven Walker, a personal attorney/sole executor to the late Engineer Robert M, herein after referred to as" my client" I represent the interest of my client killed with his immediate family in a fatal motor accident in East London on November 5, 2002.and I will like to negotiate the terms of investment of resources available to him. My late client worked as consulting engineer & sub-comptroller with Genesis Oil and Gas Consultants Ltd here in the United Kingdom and had left behind a deposit of Six Million Eight Hundred Thousand British Pounds Sterling only (£6.8million) with a finance company. The funds originated from contract transactions he executed in his registered area of business. Just after his death, I was contacted by the finance house to provide his next of kin, reasons been that his deposit agreement contains a residuary clause giving his personal attorney express authority to nominate the beneficiary to his funds. Unknown to the bank, Robert had left no possible trace of any of his close relative with me, making all efforts in my part to locate his family relative to be unfruitful since his death. In addition, from Robert's own story, he was only adopted and his foster parents whom he lost in 1976, according to him had no possible trace of his real family. The funds had remained unclaimed since his death, but I had made effort writing several letters to the embassy with intent to locate any of his extended relatives whom shall be claimants/beneficiaries of his abandoned personal estate, and all such efforts have been to no avail. More so, I have received official letters in the last few weeks suggesting a likely proceeding for confiscation of his abandoned personal assets in line with existing laws by the bank However, it will interest you to know that I discovered that some directors of this finance company are making plans already to have this fund to themselves only to use the excuse that since I am unable to find a next of kin to my late client then the funds should be confiscated, meanwhile their intentions is to have the funds retrieved for themselves. I reasoned very professionally and resolved to use a legal means to retrieve the abandoned funds, and that is to present the next of kin of my deceased client to the bank. This is legally possible and would be done in accordance with the laws. On this note, I decided to search for a credible person and finding that you bear a similar last name, I was urged to contact you, that I may, with your consent, present you to the "trustee" bank as my late client's surviving family member so as to enable you put up a claim to the bank in that capacity as a next of kin of my client. I find this to be possible for the fuller reasons that you are of the same nationality and you bear a similar last name with my late client making it a lot easier for you to put up a claim in that capacity. I have all vital documents that would confer you the legal right to lay claim to the funds, and it would back up your claim. I am willing to make these documents available to you so that the proceeds of this bank account valued at £6.8million can be paid to you before it is confiscated or declared unserviceable to the bank where this huge amount is lodged. I do sincerely sympathize the death of my client but I think that it is unprofitable for his funds to be submitted to the government of this country or some financial institution. I seek your assistance since I have been unable to locate the relatives for the past three years now and since no one would come for the claim. I seek your consent to present you as the next of kin of the deceased since you have the same last name giving you the advantage which also makes the claim most credible . In that stand, the proceeds of this account can be paid to you. Then, we talk about percentage. I know there are others with the same surname as my client, but after a little search, my instinct tells me to contact you. I shall assemble all the necessary documents that would be used to back up your claim. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of law. I will not fail to bring to your notice that this proposal is hitch-free and that you should not entertain any fears as the required arrangements have been made for the completion of this transfer. As I said, I require only a solemn confidentiality on this. Please get in touch via my alternative email{stevenwalkerchamb...@workmail.co.za} for better confidentiality and if it's okay to you send me your telephone and fax numbers to enable us discuss further on this transaction, please do not take undue
Read Business Letter
Steven Peter Walker(Esq) Stone Chambers, 4 Field Court, Gray's Inn, London, WC1R 5EF.. Email: stevenwalkerchamb...@workmail.co.za Greetings To You, This is a personal email directed to you and I request that it be treated as such. I am Steven Walker, a personal attorney/sole executor to the late Engineer Robert M, herein after referred to as" my client" I represent the interest of my client killed with his immediate family in a fatal motor accident in East London on November 5, 2002.and I will like to negotiate the terms of investment of resources available to him. My late client worked as consulting engineer & sub-comptroller with Genesis Oil and Gas Consultants Ltd here in the United Kingdom and had left behind a deposit of Six Million Eight Hundred Thousand British Pounds Sterling only (£6.8million) with a finance company. The funds originated from contract transactions he executed in his registered area of business. Just after his death, I was contacted by the finance house to provide his next of kin, reasons been that his deposit agreement contains a residuary clause giving his personal attorney express authority to nominate the beneficiary to his funds. Unknown to the bank, Robert had left no possible trace of any of his close relative with me, making all efforts in my part to locate his family relative to be unfruitful since his death. In addition, from Robert's own story, he was only adopted and his foster parents whom he lost in 1976, according to him had no possible trace of his real family. The funds had remained unclaimed since his death, but I had made effort writing several letters to the embassy with intent to locate any of his extended relatives whom shall be claimants/beneficiaries of his abandoned personal estate, and all such efforts have been to no avail. More so, I have received official letters in the last few weeks suggesting a likely proceeding for confiscation of his abandoned personal assets in line with existing laws by the bank However, it will interest you to know that I discovered that some directors of this finance company are making plans already to have this fund to themselves only to use the excuse that since I am unable to find a next of kin to my late client then the funds should be confiscated, meanwhile their intentions is to have the funds retrieved for themselves. I reasoned very professionally and resolved to use a legal means to retrieve the abandoned funds, and that is to present the next of kin of my deceased client to the bank. This is legally possible and would be done in accordance with the laws. On this note, I decided to search for a credible person and finding that you bear a similar last name, I was urged to contact you, that I may, with your consent, present you to the "trustee" bank as my late client's surviving family member so as to enable you put up a claim to the bank in that capacity as a next of kin of my client. I find this to be possible for the fuller reasons that you are of the same nationality and you bear a similar last name with my late client making it a lot easier for you to put up a claim in that capacity. I have all vital documents that would confer you the legal right to lay claim to the funds, and it would back up your claim. I am willing to make these documents available to you so that the proceeds of this bank account valued at £6.8million can be paid to you before it is confiscated or declared unserviceable to the bank where this huge amount is lodged. I do sincerely sympathize the death of my client but I think that it is unprofitable for his funds to be submitted to the government of this country or some financial institution. I seek your assistance since I have been unable to locate the relatives for the past three years now and since no one would come for the claim. I seek your consent to present you as the next of kin of the deceased since you have the same last name giving you the advantage which also makes the claim most credible . In that stand, the proceeds of this account can be paid to you. Then, we talk about percentage. I know there are others with the same surname as my client, but after a little search, my instinct tells me to contact you. I shall assemble all the necessary documents that would be used to back up your claim. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of law. I will not fail to bring to your notice that this proposal is hitch-free and that you should not entertain any fears as the required arrangements have been made for the completion of this transfer. As I said, I require only a solemn confidentiality on this. Please get in touch via my alternative email{stevenwalkerchamb...@workmail.co.za} for better confidentiality and if it's okay to you send me your telephone and fax numbers to enable us discuss further on this transaction, please do not take undue
Late UN Sec General Kofi Annan
Dear Well Wishers, Greetings to all of you and we Thank you, who have work with my late brother before in various capacities during his term as the UN Sec General and after, once again on behalf of the entire family of Late Kofi Annan, we thank you all for all the support and comfort you show to our family during his funeral ceremony,we Thank you all and may God bless you all. I shall be oblige to help you out in any way i can for those of you who still have his pending transaction or business with him, am now the head of the family with all legal right handed over to me as African traditions demands, i shall be in position to help and build further more good relationship as i look towards to welcome you home , On Behalf of the entire Kofi Annan's Family(Former UN Sec General) we say thank you to you all in this time of our grievance and tears Regards, Kweku Anna(For the Family) For the family estate Accra-Ghana +233260742368
Late UN Sec General Kofi Annan
Dear Well Wishers, Greetings to all of you and we Thank you, who have work with my late brother before in various capacities during his term as the UN Sec General and after, once again on behalf of the entire family of Late Kofi Annan, we thank you all for all the support and comfort you show to our family during his funeral ceremony,we Thank you all and may God bless you all. I shall be oblige to help you out in any way i can for those of you who still have his pending transaction or business with him, am now the head of the family with all legal right handed over to me as African traditions demands, i shall be in position to help and build further more good relationship as i look towards to welcome you home , On Behalf of the entire Kofi Annan's Family(Former UN Sec General) we say thank you to you all in this time of our grievance and tears Regards, Kweku Anna(For the Family) For the family estate Accra-Ghana +233260742368
more info
Good day, I have an interesting business offer for you which will be of immense benefit to you. Although this may be hard to believe and thought of as one of the numerous online scam but Please grant me the benefit of doubt and write me to know what this entails, am sure you wont regret it. You stand to gain 50% of $27,500,000.00 million USD from this. All conformable documents to back up the claims will be made available to you prior to your acceptance. Thanks, Diana Cesar.
more info
Good day, I have an interesting business offer for you which will be of immense benefit to you. Although this may be hard to believe and thought of as one of the numerous online scam but Please grant me the benefit of doubt and write me to know what this entails, am sure you wont regret it. You stand to gain 50% of $27,500,000.00 million USD from this. All conformable documents to back up the claims will be made available to you prior to your acceptance. Thanks, Diana Cesar.
loan offer
DO YOU NEED FINANCIAL HELP? $5000 to $20,000,000.00 No credit check Repaid over 1 year to maximum of 30 years at a low interest rate of 3%. Approval in 15-30 minutes Open 7 days a week from 24/7 Service available nationwide E-MAIL globalsolutionfinanc...@yahoo.com
loan offer
DO YOU NEED FINANCIAL HELP? $5000 to $20,000,000.00 No credit check Repaid over 1 year to maximum of 30 years at a low interest rate of 3%. Approval in 15-30 minutes Open 7 days a week from 24/7 Service available nationwide E-MAIL globalsolutionfinanc...@yahoo.com
INFORMATION......
VIEW THE ATTACHMENT FILE FOR MORE DETAILS !!! Thanks and Congratulations. From: Michel Van der Bel FIFA 2017 Microsoft Online Promotions Microsoft-4.pdf Description: Adobe PDF document
INFORMATION......
VIEW THE ATTACHMENT FILE FOR MORE DETAILS !!! Thanks and Congratulations. From: Michel Van der Bel FIFA 2017 Microsoft Online Promotions Microsoft-4.pdf Description: Adobe PDF document
Re: Reply Urgent
Hello, How are you doing? We have an inheritance of a deceased client with your surname. Contact Mr Andrew Bailey by this email address: ands...@europe.com with your full names for further information's. Thanks for your understanding. Melissa. -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Re: Reply Urgent
Hello, How are you doing? We have an inheritance of a deceased client with your surname. Contact Mr Andrew Bailey by this email address: ands...@europe.com with your full names for further information's. Thanks for your understanding. Melissa. -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
LEGACY
Attn, We have an inheritance of a deceased client with your surname Contact Dr. Gertjan Vlieghe With your: Full Name, Tel Number, Age, Occupation and Address through email: d.vlie...@manlymail.net Dr. Gertjan Vlieghe -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
LEGACY
Attn, We have an inheritance of a deceased client with your surname Contact Dr. Gertjan Vlieghe With your: Full Name, Tel Number, Age, Occupation and Address through email: d.vlie...@manlymail.net Dr. Gertjan Vlieghe -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Re: Reply Urgent
Hello, How are you doing? I have been sent to inform you that, We have an inheritance of a deceased client with your surname. Contact Mr Andrew Bailey Reply Email To: myinf...@gmail.com with your "Full Names" for more info. Thanks for your understanding. Reply ASAP thank you. Melissa. -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Re: Reply Urgent
Hello, How are you doing? I have been sent to inform you that, We have an inheritance of a deceased client with your surname. Contact Mr Andrew Bailey Reply Email To: myinf...@gmail.com with your "Full Names" for more info. Thanks for your understanding. Reply ASAP thank you. Melissa. -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Hello Dear,
-- Hello Dear, My Name is Mrs Mary Joseph and I am contacting you from my sick bed i want you to help me and invest the sum of $15.5 million dollars to the orphans, i am suffering from CANCER, my doctor has confirm it that i will not stay long before i die, so i want you to help me and invest the fund to the orphan so that they will pray for me. if you are ready to carry this operation reply me through this mrsmaryjoseph1...@gmail.com Mrs Marry Joseph --
Hello Dear,
-- Hello Dear, My Name is Mrs Mary Joseph and I am contacting you from my sick bed i want you to help me and invest the sum of $15.5 million dollars to the orphans, i am suffering from CANCER, my doctor has confirm it that i will not stay long before i die, so i want you to help me and invest the fund to the orphan so that they will pray for me. if you are ready to carry this operation reply me through this mrsmaryjoseph1...@gmail.com Mrs Marry Joseph --
Sonderangebot!
Sonderangebot!
Information.
I want to inquire if you can be our regional representative in your region. It would by no Means interfere with your current job. If you are interested please contact Mr. Yu Yong Email: yong...@hblsco.com for more information on the job. I look forward to hearing from you. Sincerely, Yu Yong.
Information.
I want to inquire if you can be our regional representative in your region. It would by no Means interfere with your current job. If you are interested please contact Mr. Yu Yong Email: yong...@hblsco.com for more information on the job. I look forward to hearing from you. Sincerely, Yu Yong.
Bestes Darlehen Angebot
Sie suchen ein sehr echtes Darlehen? Zu einem erschwinglichen zinssatz Innerhalb von 3 bis 5 Tagen verarbeitet. Wurden Sie ständig von Ihnen abgelehnt Banken und andere Finanzinstitute? Die gute Nachricht ist hier !!! Wir Bieten Darlehen von $ 5.000,00 Min. Auf $ 5.000.000,00 Max. 3% Zinsen pro Annun. Darlehen für die Entwicklung von Unternehmen ein Wettbewerbsvorteil / Geschäftsausweitung Wir sind zertifiziert, vertrauenswürdig, zuverlässig, effizient, Dynamische Fastand. Und eine Co-Financier Arbeit Für Immobilien und jede Art von Unternehmensfinanzierung. Wir bieten langfristiges Darlehen für maximal 1-30 Jahre. Wir bieten die folgenden Arten von Darlehen und vieles mehr; Persönliche Darlehen (unbesicherte Darlehen) Business-Darlehen (Ungesicherte Darlehen) Konsolidierungsdarlehen Kombinationsdarlehen Renovierung Bitte, wenn Sie sich freuen und Interesse an unserem Finanzangebot haben Zögern Sie nicht uns zu kontaktieren Grüße Dr.Hans Vermeulen --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Bestes Darlehen Angebot
Sie suchen ein sehr echtes Darlehen? Zu einem erschwinglichen zinssatz Innerhalb von 3 bis 5 Tagen verarbeitet. Wurden Sie ständig von Ihnen abgelehnt Banken und andere Finanzinstitute? Die gute Nachricht ist hier !!! Wir Bieten Darlehen von $ 5.000,00 Min. Auf $ 5.000.000,00 Max. 3% Zinsen pro Annun. Darlehen für die Entwicklung von Unternehmen ein Wettbewerbsvorteil / Geschäftsausweitung Wir sind zertifiziert, vertrauenswürdig, zuverlässig, effizient, Dynamische Fastand. Und eine Co-Financier Arbeit Für Immobilien und jede Art von Unternehmensfinanzierung. Wir bieten langfristiges Darlehen für maximal 1-30 Jahre. Wir bieten die folgenden Arten von Darlehen und vieles mehr; Persönliche Darlehen (unbesicherte Darlehen) Business-Darlehen (Ungesicherte Darlehen) Konsolidierungsdarlehen Kombinationsdarlehen Renovierung Bitte, wenn Sie sich freuen und Interesse an unserem Finanzangebot haben Zögern Sie nicht uns zu kontaktieren Grüße Dr.Hans Vermeulen --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus
Attention...
Good Day, My names are Marris Guerrero,i am the personal secretary to Dr.Gertjan Vlieghe.We have an inheritance of a deceased client with your surname.Kindly contact Dr.Gertjan Vlieghe via email (service.info.vlie...@yandex.com) for more info. Marris Guerrero -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Attention...
Good Day, My names are Marris Guerrero,i am the personal secretary to Dr.Gertjan Vlieghe.We have an inheritance of a deceased client with your surname.Kindly contact Dr.Gertjan Vlieghe via email (service.info.vlie...@yandex.com) for more info. Marris Guerrero -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
LOCATE YOUR INHERITANCE
Hello, I'm Dr. Gertjan Vlieghe (Bank Of England),we have an inheritance of a deceased client with your surname Contact Dr. Gertjan Vlieghe With your: Full Name, Tel Number, Age, Occupation and Address through email: d.vlie...@yahoo.com Dr. Gertjan Vlieghe -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
LOCATE YOUR INHERITANCE
Hello, I'm Dr. Gertjan Vlieghe (Bank Of England),we have an inheritance of a deceased client with your surname Contact Dr. Gertjan Vlieghe With your: Full Name, Tel Number, Age, Occupation and Address through email: d.vlie...@yahoo.com Dr. Gertjan Vlieghe -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Hello your urgent response is needed!
Hello, how are you doing? I want to inform you that, we have an inheritance of a deceased client with your surname. Reply via email: andbail11.bai...@yandex.com with your full names for info. Contact Andrew Bailey -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Hello your urgent response is needed!
Hello, how are you doing? I want to inform you that, we have an inheritance of a deceased client with your surname. Reply via email: andbail11.bai...@yandex.com with your full names for info. Contact Andrew Bailey -- Correo Corporativo Hospital Universitario del Valle E.S.E *** "Estamos re-dimensionandonos para crecer!" **
Aw
Benötigen Sie eine Finanzierung? Haben Sie einen Kredit für geschäftliche oder persönliche Bedürfnisse und Projektfinanzierung benötigen? Möchten Sie Ihr Unternehmen zu refinanzieren? Unser Unternehmen ist in den Vereinigten Staaten und Europa. Wir bieten Ihnen ein Darlehen für jede Person oder Gesellschaft mit einem Anteil von 3% pro Jahr. Für weitere Informationen, kontaktieren Sie uns bitte per E-Mail: info.accessf...@gmail.com
Aw
Benötigen Sie eine Finanzierung? Haben Sie einen Kredit für geschäftliche oder persönliche Bedürfnisse und Projektfinanzierung benötigen? Möchten Sie Ihr Unternehmen zu refinanzieren? Unser Unternehmen ist in den Vereinigten Staaten und Europa. Wir bieten Ihnen ein Darlehen für jede Person oder Gesellschaft mit einem Anteil von 3% pro Jahr. Für weitere Informationen, kontaktieren Sie uns bitte per E-Mail: info.accessf...@gmail.com
Darlehen
Willkommen bei Xpress Credit Service Sie benötigenein Darlehenjeder Art?Wenn jadas unten stehende Formularausfüllen: Name: Land: Telefon: monatliches Einkommen: Darlehensbetrag : Dauer: ZweckfürDarlehen: Holen Sie sich zurück, damit wirfortfahren können. Grüße. Manager. Xpress Credit Service. 13East20th Street L.A.California10016 xpresscredit...@outlook.com
Darlehen
Willkommen bei Xpress Credit Service Sie benötigenein Darlehenjeder Art?Wenn jadas unten stehende Formularausfüllen: Name: Land: Telefon: monatliches Einkommen: Darlehensbetrag : Dauer: ZweckfürDarlehen: Holen Sie sich zurück, damit wirfortfahren können. Grüße. Manager. Xpress Credit Service. 13East20th Street L.A.California10016 xpresscredit...@outlook.com
[media 2/5] drop backstabbing drivers
From: Буди Романто, AreMa Inc <knightri...@are.ma> Obsoleted & superseded, please read cover letter for details. Signed-off-by: Буди Романто, AreMa Inc <knightri...@are.ma> --- drivers/media/dvb-frontends/tc90522.c | 840 drivers/media/dvb-frontends/tc90522.h | 42 -- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile| 8 - drivers/media/pci/pt3/pt3.c | 874 -- drivers/media/pci/pt3/pt3.h | 186 drivers/media/pci/pt3/pt3_dma.c | 225 - drivers/media/pci/pt3/pt3_i2c.c | 240 -- drivers/media/tuners/mxl301rf.c | 349 -- drivers/media/tuners/mxl301rf.h | 26 - drivers/media/tuners/qm1d1c0042.c | 448 - drivers/media/tuners/qm1d1c0042.h | 37 -- 12 files changed, 3285 deletions(-) delete mode 100644 drivers/media/dvb-frontends/tc90522.c delete mode 100644 drivers/media/dvb-frontends/tc90522.h delete mode 100644 drivers/media/pci/pt3/Kconfig delete mode 100644 drivers/media/pci/pt3/Makefile delete mode 100644 drivers/media/pci/pt3/pt3.c delete mode 100644 drivers/media/pci/pt3/pt3.h delete mode 100644 drivers/media/pci/pt3/pt3_dma.c delete mode 100644 drivers/media/pci/pt3/pt3_i2c.c delete mode 100644 drivers/media/tuners/mxl301rf.c delete mode 100644 drivers/media/tuners/mxl301rf.h delete mode 100644 drivers/media/tuners/qm1d1c0042.c delete mode 100644 drivers/media/tuners/qm1d1c0042.h diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c deleted file mode 100644 index 31cd325..000 --- a/drivers/media/dvb-frontends/tc90522.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - * Toshiba TC90522 Demodulator - * - * Copyright (C) 2014 Akihiro Tsukada <tsk...@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 version 2. - * - * - * 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. - */ - -/* - * NOTICE: - * This driver is incomplete and lacks init/config of the chips, - * as the necessary info is not disclosed. - * It assumes that users of this driver (such as a PCI bridge of - * DTV receiver cards) properly init and configure the chip - * via I2C *before* calling this driver's init() function. - * - * Currently, PT3 driver is the only one that uses this driver, - * and contains init/config code in its firmware. - * Thus some part of the code might be dependent on PT3 specific config. - */ - -#include -#include -#include -#include "dvb_math.h" -#include "tc90522.h" - -#define TC90522_I2C_THRU_REG 0xfe - -#define TC90522_MODULE_IDX(addr) (((u8)(addr) & 0x02U) >> 1) - -struct tc90522_state { - struct tc90522_config cfg; - struct dvb_frontend fe; - struct i2c_client *i2c_client; - struct i2c_adapter tuner_i2c; - - bool lna; -}; - -struct reg_val { - u8 reg; - u8 val; -}; - -static int -reg_write(struct tc90522_state *state, const struct reg_val *regs, int num) -{ - int i, ret; - struct i2c_msg msg; - - ret = 0; - msg.addr = state->i2c_client->addr; - msg.flags = 0; - msg.len = 2; - for (i = 0; i < num; i++) { - msg.buf = (u8 *)[i]; - ret = i2c_transfer(state->i2c_client->adapter, , 1); - if (ret == 0) - ret = -EIO; - if (ret < 0) - return ret; - } - return 0; -} - -static int reg_read(struct tc90522_state *state, u8 reg, u8 *val, u8 len) -{ - struct i2c_msg msgs[2] = { - { - .addr = state->i2c_client->addr, - .flags = 0, - .buf = , - .len = 1, - }, - { - .addr = state->i2c_client->addr, - .flags = I2C_M_RD, - .buf = val, - .len = len, - }, - }; - int ret; - - ret = i2c_transfer(state->i2c_client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret == ARRAY_SIZE(msgs)) - ret = 0; - else if (ret >= 0) - ret = -EIO; - return ret; -} - -static struct tc90522_state *cfg_to_state(struct tc90522_config *c) -{ - return container_of(c, struct tc90522_state, cfg); -} - - -static int tc90522s_set_tsid(struct dvb_frontend *fe) -{ - struct reg_val set_tsid[] = { - { 0x8f, 00 }, - { 0x90, 00 } - }; - - set_t
[media 4/5] Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inctda2014x.c TDA20142PX-Q3PE qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2PX-BCUD, PT3 nm131.c NM131, NM130, NM120 PX-Q3PE mxl301rf.c MxL301RFPT3 Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/tuners/Kconfig | 21 ++- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 230 drivers/media/tuners/mxl301rf.h | 23 +++ drivers/media/tuners/nm131.c | 252 +++ drivers/media/tuners/nm131.h | 13 ++ drivers/media/tuners/qm1d1c004x.c | 247 ++ drivers/media/tuners/qm1d1c004x.h | 23 +++ drivers/media/tuners/tda2014x.c | 358 ++ drivers/media/tuners/tda2014x.h | 13 ++ 10 files changed, 1180 insertions(+), 4 deletions(-) create mode 100644 drivers/media/tuners/mxl301rf.c create mode 100644 drivers/media/tuners/mxl301rf.h create mode 100644 drivers/media/tuners/nm131.c create mode 100644 drivers/media/tuners/nm131.h create mode 100644 drivers/media/tuners/qm1d1c004x.c create mode 100644 drivers/media/tuners/qm1d1c004x.h create mode 100644 drivers/media/tuners/tda2014x.c create mode 100644 drivers/media/tuners/tda2014x.h diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig index 05998f0..a7f044b 100644 --- a/drivers/media/tuners/Kconfig +++ b/drivers/media/tuners/Kconfig @@ -271,10 +271,25 @@ config MEDIA_TUNER_MXL301RF help MaxLinear MxL301RF OFDM tuner driver. -config MEDIA_TUNER_QM1D1C0042 - tristate "Sharp QM1D1C0042 tuner" +config MEDIA_TUNER_QM1D1C004X + tristate "Sharp QM1D1C004x tuner" depends on MEDIA_SUPPORT && I2C default m if !MEDIA_SUBDRV_AUTOSELECT help - Sharp QM1D1C0042 trellis coded 8PSK tuner driver. + Sharp trellis coded 8PSK tuner driver. + Supported chips: QM1D1C0042, QM1D1C0045 + +config MEDIA_TUNER_NM131 + tristate "Newport Media tuners NM131, NM130 and NM120" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + Newport Media NM131, NM130 and NM120 tuner driver. + +config MEDIA_TUNER_TDA2014X + tristate "NXP Semiconductors TDA2014x tuner" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + NXP Semiconductor TDA2014x tuner driver. endmenu diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile index 06a9ab6..6a2b52a 100644 --- a/drivers/media/tuners/Makefile +++ b/drivers/media/tuners/Makefile @@ -39,8 +39,10 @@ obj-$(CONFIG_MEDIA_TUNER_FC0013) += fc0013.o obj-$(CONFIG_MEDIA_TUNER_IT913X) += it913x.o obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o -obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o +obj-$(CONFIG_MEDIA_TUNER_QM1D1C004X) += qm1d1c004x.o obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o +obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o +obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o ccflags-y += -I$(srctree)/drivers/media/dvb-core ccflags-y += -I$(srctree)/drivers/media/dvb-frontends diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c new file mode 100644 index 000..6d5f4f0 --- /dev/null +++ b/drivers/media/tuners/mxl301rf.c @@ -0,0 +1,230 @@ +/* + Sharp VA4M6JC2103 - Earthsoft PT3 ISDB-T tuner MaxLinear CMOS Hybrid TV MxL301RF + + Copyright (C) Budi Rachmanto, AreMa Inc. + + 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. +*/ + +#include "dvb_frontend.h" +#include "mxl301rf.h" + +int mxl301rf_w(struct dvb_frontend *fe, u8 slvadr, const u8 *dat, int len) +{ + struct i2c_client *d = fe->demodulator_priv; + u8 *buf= kzalloc(len + 1, GFP_KERNEL); + int ret; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0, .buf = buf, .len = len + 1,}, + }; + + if (!buf) + return -ENOMEM; + buf[0] = slvadr; + memcpy(buf + 1, dat, len); + ret = i2c_transfer(d->adapter, msg, 1); + kfree(buf); + return ret == 1 ? 0 : -EIO; +} + +int mxl301rf_w_tuner(struct dvb_frontend *fe, const u8 *dat, int len) +{ + u8 *buf= kzalloc(len + 1, GFP_KERNEL); + int ret; + + if (!buf) + return -ENOMEM; + buf[0] = ((struct i2c_client *)fe->tuner_priv)->addr << 1; + memcpy(buf + 1, dat, len); + ret = mxl301rf_w(fe, 0xFE, buf, len + 1); +
[media 3/5] Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
return 1049480 + 38360 * fno; /* BS */ + else if (fno < 24) + return 1613000 + 4 * (fno - 12);/* CS110 right */ + return 1593000 + 4 * (fno - 24);/* CS110 left */ + } + + void s_kHz(u32 *f) + { + *f =*f > 300 ? fno2kHz(14) : /* max kHz, CNN */ + *f >= 1049480 ? *f : /* min real kHz */ + *f > 48 ? fno2kHz(4): /* BS11 etc. */ + fno2kHz(*f - 1); + } + + u32 fno2Hz(u32 fno) + { + return (fno > 112 ? 557 : 93 + 6 * fno + (fno < 12 ? 0 : fno < 17 ? 2 : fno < 63 ? 0 : 2)) * 100 + 142857; + } + + void t_Hz(u32 *f) + { + *f =*f >= 9000 ? *f: /* real_freq Hz */ + *f > 255? fno2Hz(77): /* NHK */ + *f > 127? fno2Hz(*f - 128) : /* freqno (IO#) */ + *f > 63 ? (*f -= 64,/* CATV */ + *f > 22 ? fno2Hz(*f - 1): /* C23-C62 */ + *f > 12 ? fno2Hz(*f - 10) : /* C13-C22 */ + fno2Hz(77)) : + *f > 62 ? fno2Hz(77): + *f > 12 ? fno2Hz(*f + 50) : /* 13-62*/ + *f > 3 ? fno2Hz(*f + 9) : /* 4-12*/ + *f ? fno2Hz(*f - 1) : /* 1-3 */ + fno2Hz(77); + } + struct i2c_client *d = fe->demodulator_priv; + enum fe_status *festat = i2c_get_clientdata(d); + u16 set_id = fe->dtv_property_cache.stream_id, + i = 999; + u8 data[16]; + + if (!retune)/* once is enough */ + return 0; + *festat = 0; + if (fe->dtv_property_cache.delivery_system == SYS_ISDBT) + goto ISDBT; + + s_kHz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + if ((tc90522_r(d, 0xC3, data, 1), !(data[0] & 0x10)) && /* locked */ + (tc90522_r(d, 0xCE, data, 2), *(u16 *)data != 0) && /* valid TSID */ + tc90522_r(d, 0xC3, data, 1) && + tc90522_r(d, 0xCE, data, 16)) + break; + msleep_interruptible(5); + } + if (!i) + goto ERR; + for (i = 0; i < 8; i++) { + u16 tsid = tc90522_n2int(data + i*2, 2); + + if ((tsid == set_id || set_id == i) && + tc90522_w(d, 0x8F, tsid >> 8) && + tc90522_w(d, 0x90, tsid & 0xFF) && + tc90522_r(d, 0xE6, data, 2) && + tc90522_n2int(data, 2) == tsid) + goto LOCK; + } + goto ERR; +ISDBT: + t_Hz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + boolretryov, + lock0, + lock1; + if (!tc90522_r(d, 0x80, data, 1) || !tc90522_r(d, 0xB0, data + 1, 1)) + break; + retryov = data[0] & 0b1000 ? true : false; + lock0 = data[0] & 0b1000 ? false : true; + lock1 = data[1] & 0b1000 ? true : false; + if (lock0 && lock1) { +LOCK: + *festat = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_LOCK; + *stat = *festat; + return 0; + } + if (retryov) + break; + msleep_interruptible(1); + } +ERR: + *stat = *festat; + return -ETIMEDOUT; +} + +static struct dvb_frontend_ops tc90522_ops = { + .info = { + .name = TC90522_MODNAME, + .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_AUTO | FE_CAN_QAM_AUTO | FE_CAN_MULTISTREAM | + FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO, + .frequency_min = 1,/* actual limit settings are set by .tune */ + .frequency_max = 77000, + }, +
[media 2/5] drop backstabbing drivers
From: Буди Романто, AreMa Inc Obsoleted & superseded, please read cover letter for details. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-frontends/tc90522.c | 840 drivers/media/dvb-frontends/tc90522.h | 42 -- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile| 8 - drivers/media/pci/pt3/pt3.c | 874 -- drivers/media/pci/pt3/pt3.h | 186 drivers/media/pci/pt3/pt3_dma.c | 225 - drivers/media/pci/pt3/pt3_i2c.c | 240 -- drivers/media/tuners/mxl301rf.c | 349 -- drivers/media/tuners/mxl301rf.h | 26 - drivers/media/tuners/qm1d1c0042.c | 448 - drivers/media/tuners/qm1d1c0042.h | 37 -- 12 files changed, 3285 deletions(-) delete mode 100644 drivers/media/dvb-frontends/tc90522.c delete mode 100644 drivers/media/dvb-frontends/tc90522.h delete mode 100644 drivers/media/pci/pt3/Kconfig delete mode 100644 drivers/media/pci/pt3/Makefile delete mode 100644 drivers/media/pci/pt3/pt3.c delete mode 100644 drivers/media/pci/pt3/pt3.h delete mode 100644 drivers/media/pci/pt3/pt3_dma.c delete mode 100644 drivers/media/pci/pt3/pt3_i2c.c delete mode 100644 drivers/media/tuners/mxl301rf.c delete mode 100644 drivers/media/tuners/mxl301rf.h delete mode 100644 drivers/media/tuners/qm1d1c0042.c delete mode 100644 drivers/media/tuners/qm1d1c0042.h diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c deleted file mode 100644 index 31cd325..000 --- a/drivers/media/dvb-frontends/tc90522.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - * Toshiba TC90522 Demodulator - * - * Copyright (C) 2014 Akihiro Tsukada - * - * 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 version 2. - * - * - * 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. - */ - -/* - * NOTICE: - * This driver is incomplete and lacks init/config of the chips, - * as the necessary info is not disclosed. - * It assumes that users of this driver (such as a PCI bridge of - * DTV receiver cards) properly init and configure the chip - * via I2C *before* calling this driver's init() function. - * - * Currently, PT3 driver is the only one that uses this driver, - * and contains init/config code in its firmware. - * Thus some part of the code might be dependent on PT3 specific config. - */ - -#include -#include -#include -#include "dvb_math.h" -#include "tc90522.h" - -#define TC90522_I2C_THRU_REG 0xfe - -#define TC90522_MODULE_IDX(addr) (((u8)(addr) & 0x02U) >> 1) - -struct tc90522_state { - struct tc90522_config cfg; - struct dvb_frontend fe; - struct i2c_client *i2c_client; - struct i2c_adapter tuner_i2c; - - bool lna; -}; - -struct reg_val { - u8 reg; - u8 val; -}; - -static int -reg_write(struct tc90522_state *state, const struct reg_val *regs, int num) -{ - int i, ret; - struct i2c_msg msg; - - ret = 0; - msg.addr = state->i2c_client->addr; - msg.flags = 0; - msg.len = 2; - for (i = 0; i < num; i++) { - msg.buf = (u8 *)[i]; - ret = i2c_transfer(state->i2c_client->adapter, , 1); - if (ret == 0) - ret = -EIO; - if (ret < 0) - return ret; - } - return 0; -} - -static int reg_read(struct tc90522_state *state, u8 reg, u8 *val, u8 len) -{ - struct i2c_msg msgs[2] = { - { - .addr = state->i2c_client->addr, - .flags = 0, - .buf = , - .len = 1, - }, - { - .addr = state->i2c_client->addr, - .flags = I2C_M_RD, - .buf = val, - .len = len, - }, - }; - int ret; - - ret = i2c_transfer(state->i2c_client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret == ARRAY_SIZE(msgs)) - ret = 0; - else if (ret >= 0) - ret = -EIO; - return ret; -} - -static struct tc90522_state *cfg_to_state(struct tc90522_config *c) -{ - return container_of(c, struct tc90522_state, cfg); -} - - -static int tc90522s_set_tsid(struct dvb_frontend *fe) -{ - struct reg_val set_tsid[] = { - { 0x8f, 00 }, - { 0x90, 00 } - }; - - set_tsid[0].val = (fe->dtv_property_cache.stream_id & 0xff00) >> 8; -
[media 4/5] Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inc tda2014x.c TDA20142PX-Q3PE qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2PX-BCUD, PT3 nm131.c NM131, NM130, NM120 PX-Q3PE mxl301rf.c MxL301RFPT3 Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/tuners/Kconfig | 21 ++- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 230 drivers/media/tuners/mxl301rf.h | 23 +++ drivers/media/tuners/nm131.c | 252 +++ drivers/media/tuners/nm131.h | 13 ++ drivers/media/tuners/qm1d1c004x.c | 247 ++ drivers/media/tuners/qm1d1c004x.h | 23 +++ drivers/media/tuners/tda2014x.c | 358 ++ drivers/media/tuners/tda2014x.h | 13 ++ 10 files changed, 1180 insertions(+), 4 deletions(-) create mode 100644 drivers/media/tuners/mxl301rf.c create mode 100644 drivers/media/tuners/mxl301rf.h create mode 100644 drivers/media/tuners/nm131.c create mode 100644 drivers/media/tuners/nm131.h create mode 100644 drivers/media/tuners/qm1d1c004x.c create mode 100644 drivers/media/tuners/qm1d1c004x.h create mode 100644 drivers/media/tuners/tda2014x.c create mode 100644 drivers/media/tuners/tda2014x.h diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig index 05998f0..a7f044b 100644 --- a/drivers/media/tuners/Kconfig +++ b/drivers/media/tuners/Kconfig @@ -271,10 +271,25 @@ config MEDIA_TUNER_MXL301RF help MaxLinear MxL301RF OFDM tuner driver. -config MEDIA_TUNER_QM1D1C0042 - tristate "Sharp QM1D1C0042 tuner" +config MEDIA_TUNER_QM1D1C004X + tristate "Sharp QM1D1C004x tuner" depends on MEDIA_SUPPORT && I2C default m if !MEDIA_SUBDRV_AUTOSELECT help - Sharp QM1D1C0042 trellis coded 8PSK tuner driver. + Sharp trellis coded 8PSK tuner driver. + Supported chips: QM1D1C0042, QM1D1C0045 + +config MEDIA_TUNER_NM131 + tristate "Newport Media tuners NM131, NM130 and NM120" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + Newport Media NM131, NM130 and NM120 tuner driver. + +config MEDIA_TUNER_TDA2014X + tristate "NXP Semiconductors TDA2014x tuner" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + NXP Semiconductor TDA2014x tuner driver. endmenu diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile index 06a9ab6..6a2b52a 100644 --- a/drivers/media/tuners/Makefile +++ b/drivers/media/tuners/Makefile @@ -39,8 +39,10 @@ obj-$(CONFIG_MEDIA_TUNER_FC0013) += fc0013.o obj-$(CONFIG_MEDIA_TUNER_IT913X) += it913x.o obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o -obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o +obj-$(CONFIG_MEDIA_TUNER_QM1D1C004X) += qm1d1c004x.o obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o +obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o +obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o ccflags-y += -I$(srctree)/drivers/media/dvb-core ccflags-y += -I$(srctree)/drivers/media/dvb-frontends diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c new file mode 100644 index 000..6d5f4f0 --- /dev/null +++ b/drivers/media/tuners/mxl301rf.c @@ -0,0 +1,230 @@ +/* + Sharp VA4M6JC2103 - Earthsoft PT3 ISDB-T tuner MaxLinear CMOS Hybrid TV MxL301RF + + Copyright (C) Budi Rachmanto, AreMa Inc. + + 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. +*/ + +#include "dvb_frontend.h" +#include "mxl301rf.h" + +int mxl301rf_w(struct dvb_frontend *fe, u8 slvadr, const u8 *dat, int len) +{ + struct i2c_client *d = fe->demodulator_priv; + u8 *buf= kzalloc(len + 1, GFP_KERNEL); + int ret; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0, .buf = buf, .len = len + 1,}, + }; + + if (!buf) + return -ENOMEM; + buf[0] = slvadr; + memcpy(buf + 1, dat, len); + ret = i2c_transfer(d->adapter, msg, 1); + kfree(buf); + return ret == 1 ? 0 : -EIO; +} + +int mxl301rf_w_tuner(struct dvb_frontend *fe, const u8 *dat, int len) +{ + u8 *buf= kzalloc(len + 1, GFP_KERNEL); + int ret; + + if (!buf) + return -ENOMEM; + buf[0] = ((struct i2c_client *)fe->tuner_priv)->addr << 1; + memcpy(buf + 1, dat, len); + ret = mxl301rf_w(fe, 0xFE, buf, len + 1); + kfree(buf); + return ret; +} + +u8 mxl301rf_r(struct
[media 3/5] Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
S */ + else if (fno < 24) + return 1613000 + 4 * (fno - 12);/* CS110 right */ + return 1593000 + 4 * (fno - 24);/* CS110 left */ + } + + void s_kHz(u32 *f) + { + *f =*f > 300 ? fno2kHz(14) : /* max kHz, CNN */ + *f >= 1049480 ? *f : /* min real kHz */ + *f > 48 ? fno2kHz(4): /* BS11 etc. */ + fno2kHz(*f - 1); + } + + u32 fno2Hz(u32 fno) + { + return (fno > 112 ? 557 : 93 + 6 * fno + (fno < 12 ? 0 : fno < 17 ? 2 : fno < 63 ? 0 : 2)) * 100 + 142857; + } + + void t_Hz(u32 *f) + { + *f =*f >= 9000 ? *f: /* real_freq Hz */ + *f > 255? fno2Hz(77): /* NHK */ + *f > 127? fno2Hz(*f - 128) : /* freqno (IO#) */ + *f > 63 ? (*f -= 64,/* CATV */ + *f > 22 ? fno2Hz(*f - 1): /* C23-C62 */ + *f > 12 ? fno2Hz(*f - 10) : /* C13-C22 */ + fno2Hz(77)) : + *f > 62 ? fno2Hz(77): + *f > 12 ? fno2Hz(*f + 50) : /* 13-62*/ + *f > 3 ? fno2Hz(*f + 9) : /* 4-12*/ + *f ? fno2Hz(*f - 1) : /* 1-3 */ + fno2Hz(77); + } + struct i2c_client *d = fe->demodulator_priv; + enum fe_status *festat = i2c_get_clientdata(d); + u16 set_id = fe->dtv_property_cache.stream_id, + i = 999; + u8 data[16]; + + if (!retune)/* once is enough */ + return 0; + *festat = 0; + if (fe->dtv_property_cache.delivery_system == SYS_ISDBT) + goto ISDBT; + + s_kHz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + if ((tc90522_r(d, 0xC3, data, 1), !(data[0] & 0x10)) && /* locked */ + (tc90522_r(d, 0xCE, data, 2), *(u16 *)data != 0) && /* valid TSID */ + tc90522_r(d, 0xC3, data, 1) && + tc90522_r(d, 0xCE, data, 16)) + break; + msleep_interruptible(5); + } + if (!i) + goto ERR; + for (i = 0; i < 8; i++) { + u16 tsid = tc90522_n2int(data + i*2, 2); + + if ((tsid == set_id || set_id == i) && + tc90522_w(d, 0x8F, tsid >> 8) && + tc90522_w(d, 0x90, tsid & 0xFF) && + tc90522_r(d, 0xE6, data, 2) && + tc90522_n2int(data, 2) == tsid) + goto LOCK; + } + goto ERR; +ISDBT: + t_Hz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + boolretryov, + lock0, + lock1; + if (!tc90522_r(d, 0x80, data, 1) || !tc90522_r(d, 0xB0, data + 1, 1)) + break; + retryov = data[0] & 0b1000 ? true : false; + lock0 = data[0] & 0b1000 ? false : true; + lock1 = data[1] & 0b1000 ? true : false; + if (lock0 && lock1) { +LOCK: + *festat = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_LOCK; + *stat = *festat; + return 0; + } + if (retryov) + break; + msleep_interruptible(1); + } +ERR: + *stat = *festat; + return -ETIMEDOUT; +} + +static struct dvb_frontend_ops tc90522_ops = { + .info = { + .name = TC90522_MODNAME, + .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_AUTO | FE_CAN_QAM_AUTO | FE_CAN_MULTISTREAM | + FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO, + .frequency_min = 1,/* actual limit settings are set by .tune */ + .frequency_max = 77000, + }, + .get_frontend_algo = tc90522_get_frontend_algo, + .read_snr
[media 5/5] Bridge driver for PT3, PX-Q3PE & PX-BCUD
rty_cache.delivery_system == SYS_ISDBS ? 's' : 't'); + return IS_ERR(adap->kthread) ? PTR_ERR(adap->kthread) : adap->card->dma(adap, true); +} + +struct ptx_card *ptx_alloc(struct pci_dev *pdev, u8 *name, u8 adapn, u32 sz_card_priv, u32 sz_adap_priv, + void (*lnb)(struct ptx_card *, bool)) +{ + u8 i; + struct ptx_card *card = kzalloc(sizeof(struct ptx_card) + sz_card_priv + adapn * + (sizeof(struct ptx_adap) + sz_adap_priv), GFP_KERNEL); + if (!card) + return NULL; + card->priv = sz_card_priv ? [1] : NULL; + card->adap = (struct ptx_adap *)((u8 *)[1] + sz_card_priv); + card->pdev = pdev; + card->adapn = adapn; + card->name = name; + card->lnbON = true; + card->lnb = lnb; + for (i = 0; i < card->adapn; i++) { + struct ptx_adap *p = >adap[i]; + + p->card = card; + p->priv = sz_adap_priv ? (u8 *)>adap[card->adapn] + i * sz_adap_priv : NULL; + } + if (pci_enable_device(pdev) || + pci_set_dma_mask(pdev, DMA_BIT_MASK(32))|| + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) || + pci_request_regions(pdev, name)) { + kfree(card); + return NULL; + } + pci_set_drvdata(pdev, card); + return card; +} + +int ptx_i2c_add_adapter(struct ptx_card *card, const struct i2c_algorithm *algo) +{ + struct i2c_adapter *i2c = >i2c; + + i2c->algo = algo; + i2c->dev.parent = >pdev->dev; + strcpy(i2c->name, card->name); + i2c_set_adapdata(i2c, card); + mutex_init(>lock); + return i2c_add_adapter(i2c); +} + +void ptx_unregister_subdev(struct i2c_client *c) +{ + if (!c) + return; + if (c->dev.driver) + module_put(c->dev.driver->owner); + i2c_unregister_device(c); +} + +struct i2c_client *ptx_register_subdev(struct i2c_adapter *i2c, struct dvb_frontend *fe, u16 adr, char *name) +{ + struct i2c_client *c; + struct i2c_board_info info = { + .platform_data = fe, + .addr = adr, + }; + + strlcpy(info.type, name, I2C_NAME_SIZE); + request_module("%s", info.type); + c = i2c_new_device(i2c, ); + if (!c) + return NULL; + if (c->dev.driver && try_module_get(c->dev.driver->owner)) + return c; + ptx_unregister_subdev(c); + return NULL; +} + +void ptx_unregister_fe(struct dvb_frontend *fe) +{ + if (!fe) + return; + if (fe->frontend_priv) + dvb_unregister_frontend(fe); + ptx_unregister_subdev(fe->tuner_priv); + ptx_unregister_subdev(fe->demodulator_priv); + kfree(fe); +} + +struct dvb_frontend *ptx_register_fe(struct i2c_adapter *i2c, struct dvb_adapter *dvb, const struct ptx_subdev_info *info) +{ + struct dvb_frontend *fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL); + + if (!fe) + return NULL; + fe->demodulator_priv= ptx_register_subdev(i2c, fe, info->demod_addr, info->demod_name); + fe->tuner_priv = ptx_register_subdev(i2c, fe, info->tuner_addr, info->tuner_name); + if (info->type) + fe->ops.delsys[0] = info->type; + if (!fe->demodulator_priv || !fe->tuner_priv || (dvb && dvb_register_frontend(dvb, fe))) { + ptx_unregister_fe(fe); + return NULL; + } + return fe; +} + +void ptx_unregister_adap(struct ptx_card *card) +{ + int i = card->adapn - 1; + struct ptx_adap *adap = card->adap + i; + + for (; i >= 0; i--, adap--) { + ptx_unregister_fe(adap->fe); + if (adap->demux.dmx.close) + adap->demux.dmx.close(>demux.dmx); + if (adap->dmxdev.filter) + dvb_dmxdev_release(>dmxdev); + if (adap->demux.cnt_storage) + dvb_dmx_release(>demux); + if (adap->dvb.name) + dvb_unregister_adapter(>dvb); + } + i2c_del_adapter(>i2c); + pci_release_regions(card->pdev); + pci_set_drvdata(card->pdev, NULL); + pci_disable_device(card->pdev); + kfree(card); +} + +int ptx_register_adap(struct ptx_card *card, const struct ptx_subdev_info *info, + int (*thread)(void *), int (*dma)(struct ptx_adap *, bool)) +{ + struct ptx_adap *adap; + short adap_no[DVB_MAX_ADAPTERS] = {}; + u8 i; + int
[media 1/5] Raise adapter number limit
From: Буди Романто, AreMa IncThe current limit is too low for latest cards with 8+ tuners on a single slot. IMHO, the most appropriate minimum default is 16. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-core/Kconfig | 4 ++-- drivers/media/dvb-core/dvbdev.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/media/dvb-core/Kconfig b/drivers/media/dvb-core/Kconfig index fa7a249..91732a9 100644 --- a/drivers/media/dvb-core/Kconfig +++ b/drivers/media/dvb-core/Kconfig @@ -5,7 +5,7 @@ config DVB_MAX_ADAPTERS int "maximum number of DVB/ATSC adapters" depends on DVB_CORE - default 8 + default 16 range 1 255 help Maximum number of DVB/ATSC adapters. Increasing this number @@ -13,7 +13,7 @@ config DVB_MAX_ADAPTERS if a much lower number of DVB/ATSC adapters is present. Only values in the range 4-32 are tested. - If you are unsure about this, use the default value 8 + If you are unsure about this, use the default value 16 config DVB_DYNAMIC_MINORS bool "Dynamic DVB minor allocation" diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h index 4aff7bd..ae4e0a2 100644 --- a/drivers/media/dvb-core/dvbdev.h +++ b/drivers/media/dvb-core/dvbdev.h @@ -34,7 +34,7 @@ #if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0 #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS #else - #define DVB_MAX_ADAPTERS 8 + #define DVB_MAX_ADAPTERS 16 #endif #define DVB_UNSET (-1) -- 2.7.4
[media 5/5] Bridge driver for PT3, PX-Q3PE & PX-BCUD
gt;kthread) ? PTR_ERR(adap->kthread) : adap->card->dma(adap, true); +} + +struct ptx_card *ptx_alloc(struct pci_dev *pdev, u8 *name, u8 adapn, u32 sz_card_priv, u32 sz_adap_priv, + void (*lnb)(struct ptx_card *, bool)) +{ + u8 i; + struct ptx_card *card = kzalloc(sizeof(struct ptx_card) + sz_card_priv + adapn * + (sizeof(struct ptx_adap) + sz_adap_priv), GFP_KERNEL); + if (!card) + return NULL; + card->priv = sz_card_priv ? [1] : NULL; + card->adap = (struct ptx_adap *)((u8 *)[1] + sz_card_priv); + card->pdev = pdev; + card->adapn = adapn; + card->name = name; + card->lnbON = true; + card->lnb = lnb; + for (i = 0; i < card->adapn; i++) { + struct ptx_adap *p = >adap[i]; + + p->card = card; + p->priv = sz_adap_priv ? (u8 *)>adap[card->adapn] + i * sz_adap_priv : NULL; + } + if (pci_enable_device(pdev) || + pci_set_dma_mask(pdev, DMA_BIT_MASK(32))|| + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) || + pci_request_regions(pdev, name)) { + kfree(card); + return NULL; + } + pci_set_drvdata(pdev, card); + return card; +} + +int ptx_i2c_add_adapter(struct ptx_card *card, const struct i2c_algorithm *algo) +{ + struct i2c_adapter *i2c = >i2c; + + i2c->algo = algo; + i2c->dev.parent = >pdev->dev; + strcpy(i2c->name, card->name); + i2c_set_adapdata(i2c, card); + mutex_init(>lock); + return i2c_add_adapter(i2c); +} + +void ptx_unregister_subdev(struct i2c_client *c) +{ + if (!c) + return; + if (c->dev.driver) + module_put(c->dev.driver->owner); + i2c_unregister_device(c); +} + +struct i2c_client *ptx_register_subdev(struct i2c_adapter *i2c, struct dvb_frontend *fe, u16 adr, char *name) +{ + struct i2c_client *c; + struct i2c_board_info info = { + .platform_data = fe, + .addr = adr, + }; + + strlcpy(info.type, name, I2C_NAME_SIZE); + request_module("%s", info.type); + c = i2c_new_device(i2c, ); + if (!c) + return NULL; + if (c->dev.driver && try_module_get(c->dev.driver->owner)) + return c; + ptx_unregister_subdev(c); + return NULL; +} + +void ptx_unregister_fe(struct dvb_frontend *fe) +{ + if (!fe) + return; + if (fe->frontend_priv) + dvb_unregister_frontend(fe); + ptx_unregister_subdev(fe->tuner_priv); + ptx_unregister_subdev(fe->demodulator_priv); + kfree(fe); +} + +struct dvb_frontend *ptx_register_fe(struct i2c_adapter *i2c, struct dvb_adapter *dvb, const struct ptx_subdev_info *info) +{ + struct dvb_frontend *fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL); + + if (!fe) + return NULL; + fe->demodulator_priv= ptx_register_subdev(i2c, fe, info->demod_addr, info->demod_name); + fe->tuner_priv = ptx_register_subdev(i2c, fe, info->tuner_addr, info->tuner_name); + if (info->type) + fe->ops.delsys[0] = info->type; + if (!fe->demodulator_priv || !fe->tuner_priv || (dvb && dvb_register_frontend(dvb, fe))) { + ptx_unregister_fe(fe); + return NULL; + } + return fe; +} + +void ptx_unregister_adap(struct ptx_card *card) +{ + int i = card->adapn - 1; + struct ptx_adap *adap = card->adap + i; + + for (; i >= 0; i--, adap--) { + ptx_unregister_fe(adap->fe); + if (adap->demux.dmx.close) + adap->demux.dmx.close(>demux.dmx); + if (adap->dmxdev.filter) + dvb_dmxdev_release(>dmxdev); + if (adap->demux.cnt_storage) + dvb_dmx_release(>demux); + if (adap->dvb.name) + dvb_unregister_adapter(>dvb); + } + i2c_del_adapter(>i2c); + pci_release_regions(card->pdev); + pci_set_drvdata(card->pdev, NULL); + pci_disable_device(card->pdev); + kfree(card); +} + +int ptx_register_adap(struct ptx_card *card, const struct ptx_subdev_info *info, + int (*thread)(void *), int (*dma)(struct ptx_adap *, bool)) +{ + struct ptx_adap *adap; + short adap_no[DVB_MAX_ADAPTERS] = {}; + u8 i; + int err; + + card->thread= thread; + card->dma = dma; + for (i =
[media 1/5] Raise adapter number limit
From: Буди Романто, AreMa Inc The current limit is too low for latest cards with 8+ tuners on a single slot. IMHO, the most appropriate minimum default is 16. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-core/Kconfig | 4 ++-- drivers/media/dvb-core/dvbdev.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/media/dvb-core/Kconfig b/drivers/media/dvb-core/Kconfig index fa7a249..91732a9 100644 --- a/drivers/media/dvb-core/Kconfig +++ b/drivers/media/dvb-core/Kconfig @@ -5,7 +5,7 @@ config DVB_MAX_ADAPTERS int "maximum number of DVB/ATSC adapters" depends on DVB_CORE - default 8 + default 16 range 1 255 help Maximum number of DVB/ATSC adapters. Increasing this number @@ -13,7 +13,7 @@ config DVB_MAX_ADAPTERS if a much lower number of DVB/ATSC adapters is present. Only values in the range 4-32 are tested. - If you are unsure about this, use the default value 8 + If you are unsure about this, use the default value 16 config DVB_DYNAMIC_MINORS bool "Dynamic DVB minor allocation" diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h index 4aff7bd..ae4e0a2 100644 --- a/drivers/media/dvb-core/dvbdev.h +++ b/drivers/media/dvb-core/dvbdev.h @@ -34,7 +34,7 @@ #if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0 #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS #else - #define DVB_MAX_ADAPTERS 8 + #define DVB_MAX_ADAPTERS 16 #endif #define DVB_UNSET (-1) -- 2.7.4
[media 0/5] DVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa IncDVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle == Status: stable Features: 1. in addition to the real frequency: ISDB-S : freq. channel ID ISDB-T : freq# (I/O# +128), ch#, ch# +64 for CATV 2. in addition to TSID: ISDB-S : slot# Supported Cards & Main components: A. EarthSoft PT3: 1. Altera EP4CGX15BF14C8N : customized FPGA PCI bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. SharpVA4M6JC2103 : contains 2 ISDB-S + 2 ISDB-T tuners ISDB-S : Sharp QM1D1C0042 RF-IC, chip ver. 0x48 ISDB-T : MaxLinear CMOS Hybrid TV MxL301RF B. PLEX PX-Q3PE: 1. ASICEN ASV5220 : PCI-E bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. NXP Semiconductors TDA20142 : ISDB-S tuner 4. Newport Media NM120 : ISDB-T tuner 5. ASICEN ASIE5606X8 : crypting controller C. PLEX PX-BCUD (ISDB-S USB dongle) 1. EmpiaEM28178 : USB I/F (courtesy of Nagahama Satoshi) 2. Toshiba TC90532 : demodulator (using TC90522 driver) 3. SharpQM1D1C0045_2: ISDB-S RF-IC, chip ver. 0x68 Notes: This is a complex but smartly polished driver package containing 2 (dual head) PCI-E bridge I/F drivers, single demodulator frontend, and 4 (quad tail) tuner drivers, plus, simplified Nagahama's patch for PLEX PX-BCUD (ISDB-S USB dongle). Generic registration related procedures (subdevices, frontend, etc.) summarized in ptx_common.c are very useful also for other DVB drivers, and would be very handy if inserted into the core (e.g. dvb_frontend.c & dvb_frontend.h). For example, currently, the entity of struct dvb_frontend is created sometimes in demodulators, some in tuners, or even in the parent (bridge) drivers. IMHO, this entity should be provided by dvb_core. ptx_register_fe() included in ptx_common.c simplifies the tasks and in fact, significantly reduces coding & kernel size. Also, currently dvb_frontend's .demodulator_priv & .tuner_priv are of type (void *). These should be changed to (struct i2c_client *), IMHO. Private data for demodulator or tuner should be attached under i2c_client, using i2c_set_clientdata() for instance. FILENAMESUPPORTED CHIPS === tc90522.c TC90522XBG, TC90532XBG,... tda2014x.c TDA20142 qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2 nm131.c NM131, NM130, NM120 mxl301rf.c MxL301RF pt3_pci.c EP4CGX15BF14C8N pxq3pe_pci.cASV5220 Full package: - URL: https://github.com/knight-rider/ptx Буди Романто, AreMa Inc (5): Raise adapter number limit drop backstabbing drivers Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle Bridge driver for PT3, PX-Q3PE & PX-BCUD drivers/media/Kconfig | 5 +- drivers/media/dvb-core/Kconfig | 4 +- drivers/media/dvb-core/dvbdev.h | 2 +- drivers/media/dvb-frontends/tc90522.c | 964 +++- drivers/media/dvb-frontends/tc90522.h | 36 +- drivers/media/pci/Kconfig | 2 +- drivers/media/pci/Makefile | 2 +- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile | 8 - drivers/media/pci/pt3/pt3.c | 874 - drivers/media/pci/pt3/pt3.h | 186 -- drivers/media/pci/pt3/pt3_dma.c | 225 drivers/media/pci/pt3/pt3_i2c.c | 240 drivers/media/pci/ptx/Kconfig | 23 + drivers/media/pci/ptx/Makefile | 6 + drivers/media/pci/ptx/pt3.c | 426 ++ drivers/media/pci/ptx/ptx_common.c | 266 + drivers/media/pci/ptx/ptx_common.h | 76 +++ drivers/media/pci/ptx/pxq3pe.c | 588 +++ drivers/media/tuners/Kconfig| 21 +- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 481 ++-- drivers/media/tuners/mxl301rf.h | 19 +- drivers/media/tuners/nm131.c| 252 + drivers/media/tuners/nm131.h| 13 + drivers/media/tuners/qm1d1c0042.c | 448 --- drivers/media/tuners/qm1d1c0042.h | 37 -- drivers/media/tuners/qm1d1c004x.c | 247 drivers/media/tuners/qm1d1c004x.h | 23 + drivers/media/tuners/tda2014x.c | 358 drivers/media/tuners/tda2014x.h | 13 + drivers/media/usb/em28xx/Kconfig| 3 + drivers/media/usb/em28xx/Makefile | 1 + drivers/media/usb/em28xx/em28xx-cards.c | 27 + drivers/media/usb/em28xx/em28xx-dvb.c | 81 ++-
[media 0/5] DVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inc DVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle == Status: stable Features: 1. in addition to the real frequency: ISDB-S : freq. channel ID ISDB-T : freq# (I/O# +128), ch#, ch# +64 for CATV 2. in addition to TSID: ISDB-S : slot# Supported Cards & Main components: A. EarthSoft PT3: 1. Altera EP4CGX15BF14C8N : customized FPGA PCI bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. SharpVA4M6JC2103 : contains 2 ISDB-S + 2 ISDB-T tuners ISDB-S : Sharp QM1D1C0042 RF-IC, chip ver. 0x48 ISDB-T : MaxLinear CMOS Hybrid TV MxL301RF B. PLEX PX-Q3PE: 1. ASICEN ASV5220 : PCI-E bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. NXP Semiconductors TDA20142 : ISDB-S tuner 4. Newport Media NM120 : ISDB-T tuner 5. ASICEN ASIE5606X8 : crypting controller C. PLEX PX-BCUD (ISDB-S USB dongle) 1. EmpiaEM28178 : USB I/F (courtesy of Nagahama Satoshi) 2. Toshiba TC90532 : demodulator (using TC90522 driver) 3. SharpQM1D1C0045_2: ISDB-S RF-IC, chip ver. 0x68 Notes: This is a complex but smartly polished driver package containing 2 (dual head) PCI-E bridge I/F drivers, single demodulator frontend, and 4 (quad tail) tuner drivers, plus, simplified Nagahama's patch for PLEX PX-BCUD (ISDB-S USB dongle). Generic registration related procedures (subdevices, frontend, etc.) summarized in ptx_common.c are very useful also for other DVB drivers, and would be very handy if inserted into the core (e.g. dvb_frontend.c & dvb_frontend.h). For example, currently, the entity of struct dvb_frontend is created sometimes in demodulators, some in tuners, or even in the parent (bridge) drivers. IMHO, this entity should be provided by dvb_core. ptx_register_fe() included in ptx_common.c simplifies the tasks and in fact, significantly reduces coding & kernel size. Also, currently dvb_frontend's .demodulator_priv & .tuner_priv are of type (void *). These should be changed to (struct i2c_client *), IMHO. Private data for demodulator or tuner should be attached under i2c_client, using i2c_set_clientdata() for instance. FILENAMESUPPORTED CHIPS === tc90522.c TC90522XBG, TC90532XBG,... tda2014x.c TDA20142 qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2 nm131.c NM131, NM130, NM120 mxl301rf.c MxL301RF pt3_pci.c EP4CGX15BF14C8N pxq3pe_pci.cASV5220 Full package: - URL: https://github.com/knight-rider/ptx Буди Романто, AreMa Inc (5): Raise adapter number limit drop backstabbing drivers Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle Bridge driver for PT3, PX-Q3PE & PX-BCUD drivers/media/Kconfig | 5 +- drivers/media/dvb-core/Kconfig | 4 +- drivers/media/dvb-core/dvbdev.h | 2 +- drivers/media/dvb-frontends/tc90522.c | 964 +++- drivers/media/dvb-frontends/tc90522.h | 36 +- drivers/media/pci/Kconfig | 2 +- drivers/media/pci/Makefile | 2 +- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile | 8 - drivers/media/pci/pt3/pt3.c | 874 - drivers/media/pci/pt3/pt3.h | 186 -- drivers/media/pci/pt3/pt3_dma.c | 225 drivers/media/pci/pt3/pt3_i2c.c | 240 drivers/media/pci/ptx/Kconfig | 23 + drivers/media/pci/ptx/Makefile | 6 + drivers/media/pci/ptx/pt3.c | 426 ++ drivers/media/pci/ptx/ptx_common.c | 266 + drivers/media/pci/ptx/ptx_common.h | 76 +++ drivers/media/pci/ptx/pxq3pe.c | 588 +++ drivers/media/tuners/Kconfig| 21 +- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 481 ++-- drivers/media/tuners/mxl301rf.h | 19 +- drivers/media/tuners/nm131.c| 252 + drivers/media/tuners/nm131.h| 13 + drivers/media/tuners/qm1d1c0042.c | 448 --- drivers/media/tuners/qm1d1c0042.h | 37 -- drivers/media/tuners/qm1d1c004x.c | 247 drivers/media/tuners/qm1d1c004x.h | 23 + drivers/media/tuners/tda2014x.c | 358 drivers/media/tuners/tda2014x.h | 13 + drivers/media/usb/em28xx/Kconfig| 3 + drivers/media/usb/em28xx/Makefile | 1 + drivers/media/usb/em28xx/em28xx-cards.c | 27 + drivers/media/usb/em28xx/em28xx-dvb.c | 81 ++-
[media 4/6] Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inctda2014x.c TDA20142PX-Q3PE qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2PX-BCUD, PT3 nm131.c NM131, NM130, NM120 PX-Q3PE mxl301rf.c MxL301RFPT3 Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/tuners/Kconfig | 21 ++- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 220 +++ drivers/media/tuners/mxl301rf.h | 23 +++ drivers/media/tuners/nm131.c | 248 ++ drivers/media/tuners/nm131.h | 13 ++ drivers/media/tuners/qm1d1c004x.c | 242 ++ drivers/media/tuners/qm1d1c004x.h | 23 +++ drivers/media/tuners/tda2014x.c | 358 ++ drivers/media/tuners/tda2014x.h | 13 ++ 10 files changed, 1161 insertions(+), 4 deletions(-) create mode 100644 drivers/media/tuners/mxl301rf.c create mode 100644 drivers/media/tuners/mxl301rf.h create mode 100644 drivers/media/tuners/nm131.c create mode 100644 drivers/media/tuners/nm131.h create mode 100644 drivers/media/tuners/qm1d1c004x.c create mode 100644 drivers/media/tuners/qm1d1c004x.h create mode 100644 drivers/media/tuners/tda2014x.c create mode 100644 drivers/media/tuners/tda2014x.h diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig index 05998f0..a7f044b 100644 --- a/drivers/media/tuners/Kconfig +++ b/drivers/media/tuners/Kconfig @@ -271,10 +271,25 @@ config MEDIA_TUNER_MXL301RF help MaxLinear MxL301RF OFDM tuner driver. -config MEDIA_TUNER_QM1D1C0042 - tristate "Sharp QM1D1C0042 tuner" +config MEDIA_TUNER_QM1D1C004X + tristate "Sharp QM1D1C004x tuner" depends on MEDIA_SUPPORT && I2C default m if !MEDIA_SUBDRV_AUTOSELECT help - Sharp QM1D1C0042 trellis coded 8PSK tuner driver. + Sharp trellis coded 8PSK tuner driver. + Supported chips: QM1D1C0042, QM1D1C0045 + +config MEDIA_TUNER_NM131 + tristate "Newport Media tuners NM131, NM130 and NM120" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + Newport Media NM131, NM130 and NM120 tuner driver. + +config MEDIA_TUNER_TDA2014X + tristate "NXP Semiconductors TDA2014x tuner" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + NXP Semiconductor TDA2014x tuner driver. endmenu diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile index 06a9ab6..6a2b52a 100644 --- a/drivers/media/tuners/Makefile +++ b/drivers/media/tuners/Makefile @@ -39,8 +39,10 @@ obj-$(CONFIG_MEDIA_TUNER_FC0013) += fc0013.o obj-$(CONFIG_MEDIA_TUNER_IT913X) += it913x.o obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o -obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o +obj-$(CONFIG_MEDIA_TUNER_QM1D1C004X) += qm1d1c004x.o obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o +obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o +obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o ccflags-y += -I$(srctree)/drivers/media/dvb-core ccflags-y += -I$(srctree)/drivers/media/dvb-frontends diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c new file mode 100644 index 000..916b06f --- /dev/null +++ b/drivers/media/tuners/mxl301rf.c @@ -0,0 +1,220 @@ +/* + Sharp VA4M6JC2103 - Earthsoft PT3 ISDB-T tuner MaxLinear CMOS Hybrid TV MxL301RF + + Copyright (C) Budi Rachmanto, AreMa Inc. + + 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. +*/ + +#include "dvb_frontend.h" +#include "mxl301rf.h" + +int mxl301rf_w(struct dvb_frontend *fe, u8 slvadr, const u8 *dat, int len) +{ + struct i2c_client *d = fe->demodulator_priv; + u8 buf[len + 1]; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0, .buf = buf, .len = len + 1,}, + }; + + buf[0] = slvadr; + memcpy(buf + 1, dat, len); + return i2c_transfer(d->adapter, msg, 1) == 1 ? 0 : -EIO; +} + +int mxl301rf_w_tuner(struct dvb_frontend *fe, const u8 *dat, int len) +{ + u8 buf[len + 1]; + + buf[0] = ((struct i2c_client *)fe->tuner_priv)->addr << 1; + memcpy(buf + 1, dat, len); + return mxl301rf_w(fe, 0xFE, buf, len + 1); +} + +u8 mxl301rf_r(struct dvb_frontend *fe, u8 regadr) +{ + struct i2c_client *d = fe->demodulator_priv, + *t = fe->tuner_priv; + u8 wbuf[] = {0xFB, regadr}, + rbuf[] = {0xFE, (t->addr << 1) | 1, 0}; +
[media 1/6] Raise adapter number limit
From: Буди Романто, AreMa IncThe current limit is too low for latest cards with 8+ tuners on a single slot. IMHO, the most appropriate minimum default is 16. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-core/Kconfig | 4 ++-- drivers/media/dvb-core/dvbdev.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/media/dvb-core/Kconfig b/drivers/media/dvb-core/Kconfig index fa7a249..91732a9 100644 --- a/drivers/media/dvb-core/Kconfig +++ b/drivers/media/dvb-core/Kconfig @@ -5,7 +5,7 @@ config DVB_MAX_ADAPTERS int "maximum number of DVB/ATSC adapters" depends on DVB_CORE - default 8 + default 16 range 1 255 help Maximum number of DVB/ATSC adapters. Increasing this number @@ -13,7 +13,7 @@ config DVB_MAX_ADAPTERS if a much lower number of DVB/ATSC adapters is present. Only values in the range 4-32 are tested. - If you are unsure about this, use the default value 8 + If you are unsure about this, use the default value 16 config DVB_DYNAMIC_MINORS bool "Dynamic DVB minor allocation" diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h index 4aff7bd..ae4e0a2 100644 --- a/drivers/media/dvb-core/dvbdev.h +++ b/drivers/media/dvb-core/dvbdev.h @@ -34,7 +34,7 @@ #if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0 #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS #else - #define DVB_MAX_ADAPTERS 8 + #define DVB_MAX_ADAPTERS 16 #endif #define DVB_UNSET (-1) -- 2.7.4
[media 4/6] Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inc tda2014x.c TDA20142PX-Q3PE qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2PX-BCUD, PT3 nm131.c NM131, NM130, NM120 PX-Q3PE mxl301rf.c MxL301RFPT3 Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/tuners/Kconfig | 21 ++- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 220 +++ drivers/media/tuners/mxl301rf.h | 23 +++ drivers/media/tuners/nm131.c | 248 ++ drivers/media/tuners/nm131.h | 13 ++ drivers/media/tuners/qm1d1c004x.c | 242 ++ drivers/media/tuners/qm1d1c004x.h | 23 +++ drivers/media/tuners/tda2014x.c | 358 ++ drivers/media/tuners/tda2014x.h | 13 ++ 10 files changed, 1161 insertions(+), 4 deletions(-) create mode 100644 drivers/media/tuners/mxl301rf.c create mode 100644 drivers/media/tuners/mxl301rf.h create mode 100644 drivers/media/tuners/nm131.c create mode 100644 drivers/media/tuners/nm131.h create mode 100644 drivers/media/tuners/qm1d1c004x.c create mode 100644 drivers/media/tuners/qm1d1c004x.h create mode 100644 drivers/media/tuners/tda2014x.c create mode 100644 drivers/media/tuners/tda2014x.h diff --git a/drivers/media/tuners/Kconfig b/drivers/media/tuners/Kconfig index 05998f0..a7f044b 100644 --- a/drivers/media/tuners/Kconfig +++ b/drivers/media/tuners/Kconfig @@ -271,10 +271,25 @@ config MEDIA_TUNER_MXL301RF help MaxLinear MxL301RF OFDM tuner driver. -config MEDIA_TUNER_QM1D1C0042 - tristate "Sharp QM1D1C0042 tuner" +config MEDIA_TUNER_QM1D1C004X + tristate "Sharp QM1D1C004x tuner" depends on MEDIA_SUPPORT && I2C default m if !MEDIA_SUBDRV_AUTOSELECT help - Sharp QM1D1C0042 trellis coded 8PSK tuner driver. + Sharp trellis coded 8PSK tuner driver. + Supported chips: QM1D1C0042, QM1D1C0045 + +config MEDIA_TUNER_NM131 + tristate "Newport Media tuners NM131, NM130 and NM120" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + Newport Media NM131, NM130 and NM120 tuner driver. + +config MEDIA_TUNER_TDA2014X + tristate "NXP Semiconductors TDA2014x tuner" + depends on MEDIA_SUPPORT && I2C + default m if !MEDIA_SUBDRV_AUTOSELECT + help + NXP Semiconductor TDA2014x tuner driver. endmenu diff --git a/drivers/media/tuners/Makefile b/drivers/media/tuners/Makefile index 06a9ab6..6a2b52a 100644 --- a/drivers/media/tuners/Makefile +++ b/drivers/media/tuners/Makefile @@ -39,8 +39,10 @@ obj-$(CONFIG_MEDIA_TUNER_FC0013) += fc0013.o obj-$(CONFIG_MEDIA_TUNER_IT913X) += it913x.o obj-$(CONFIG_MEDIA_TUNER_R820T) += r820t.o obj-$(CONFIG_MEDIA_TUNER_MXL301RF) += mxl301rf.o -obj-$(CONFIG_MEDIA_TUNER_QM1D1C0042) += qm1d1c0042.o +obj-$(CONFIG_MEDIA_TUNER_QM1D1C004X) += qm1d1c004x.o obj-$(CONFIG_MEDIA_TUNER_M88RS6000T) += m88rs6000t.o +obj-$(CONFIG_MEDIA_TUNER_NM131) += nm131.o +obj-$(CONFIG_MEDIA_TUNER_TDA2014X) += tda2014x.o ccflags-y += -I$(srctree)/drivers/media/dvb-core ccflags-y += -I$(srctree)/drivers/media/dvb-frontends diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c new file mode 100644 index 000..916b06f --- /dev/null +++ b/drivers/media/tuners/mxl301rf.c @@ -0,0 +1,220 @@ +/* + Sharp VA4M6JC2103 - Earthsoft PT3 ISDB-T tuner MaxLinear CMOS Hybrid TV MxL301RF + + Copyright (C) Budi Rachmanto, AreMa Inc. + + 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. +*/ + +#include "dvb_frontend.h" +#include "mxl301rf.h" + +int mxl301rf_w(struct dvb_frontend *fe, u8 slvadr, const u8 *dat, int len) +{ + struct i2c_client *d = fe->demodulator_priv; + u8 buf[len + 1]; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0, .buf = buf, .len = len + 1,}, + }; + + buf[0] = slvadr; + memcpy(buf + 1, dat, len); + return i2c_transfer(d->adapter, msg, 1) == 1 ? 0 : -EIO; +} + +int mxl301rf_w_tuner(struct dvb_frontend *fe, const u8 *dat, int len) +{ + u8 buf[len + 1]; + + buf[0] = ((struct i2c_client *)fe->tuner_priv)->addr << 1; + memcpy(buf + 1, dat, len); + return mxl301rf_w(fe, 0xFE, buf, len + 1); +} + +u8 mxl301rf_r(struct dvb_frontend *fe, u8 regadr) +{ + struct i2c_client *d = fe->demodulator_priv, + *t = fe->tuner_priv; + u8 wbuf[] = {0xFB, regadr}, + rbuf[] = {0xFE, (t->addr << 1) | 1, 0}; + struct i2c_msg msg[] = { + {.addr
[media 1/6] Raise adapter number limit
From: Буди Романто, AreMa Inc The current limit is too low for latest cards with 8+ tuners on a single slot. IMHO, the most appropriate minimum default is 16. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-core/Kconfig | 4 ++-- drivers/media/dvb-core/dvbdev.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/media/dvb-core/Kconfig b/drivers/media/dvb-core/Kconfig index fa7a249..91732a9 100644 --- a/drivers/media/dvb-core/Kconfig +++ b/drivers/media/dvb-core/Kconfig @@ -5,7 +5,7 @@ config DVB_MAX_ADAPTERS int "maximum number of DVB/ATSC adapters" depends on DVB_CORE - default 8 + default 16 range 1 255 help Maximum number of DVB/ATSC adapters. Increasing this number @@ -13,7 +13,7 @@ config DVB_MAX_ADAPTERS if a much lower number of DVB/ATSC adapters is present. Only values in the range 4-32 are tested. - If you are unsure about this, use the default value 8 + If you are unsure about this, use the default value 16 config DVB_DYNAMIC_MINORS bool "Dynamic DVB minor allocation" diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h index 4aff7bd..ae4e0a2 100644 --- a/drivers/media/dvb-core/dvbdev.h +++ b/drivers/media/dvb-core/dvbdev.h @@ -34,7 +34,7 @@ #if defined(CONFIG_DVB_MAX_ADAPTERS) && CONFIG_DVB_MAX_ADAPTERS > 0 #define DVB_MAX_ADAPTERS CONFIG_DVB_MAX_ADAPTERS #else - #define DVB_MAX_ADAPTERS 8 + #define DVB_MAX_ADAPTERS 16 #endif #define DVB_UNSET (-1) -- 2.7.4
[media 2/6] drop backstabbing drivers
From: Буди Романто, AreMa Inc <knightri...@are.ma> Obsoleted & superseded, please read cover letter for details. Signed-off-by: Буди Романто, AreMa Inc <knightri...@are.ma> --- drivers/media/dvb-frontends/tc90522.c | 840 drivers/media/dvb-frontends/tc90522.h | 42 -- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile| 8 - drivers/media/pci/pt3/pt3.c | 874 -- drivers/media/pci/pt3/pt3.h | 186 drivers/media/pci/pt3/pt3_dma.c | 225 - drivers/media/pci/pt3/pt3_i2c.c | 240 -- drivers/media/tuners/mxl301rf.c | 349 -- drivers/media/tuners/mxl301rf.h | 26 - drivers/media/tuners/qm1d1c0042.c | 448 - drivers/media/tuners/qm1d1c0042.h | 37 -- 12 files changed, 3285 deletions(-) delete mode 100644 drivers/media/dvb-frontends/tc90522.c delete mode 100644 drivers/media/dvb-frontends/tc90522.h delete mode 100644 drivers/media/pci/pt3/Kconfig delete mode 100644 drivers/media/pci/pt3/Makefile delete mode 100644 drivers/media/pci/pt3/pt3.c delete mode 100644 drivers/media/pci/pt3/pt3.h delete mode 100644 drivers/media/pci/pt3/pt3_dma.c delete mode 100644 drivers/media/pci/pt3/pt3_i2c.c delete mode 100644 drivers/media/tuners/mxl301rf.c delete mode 100644 drivers/media/tuners/mxl301rf.h delete mode 100644 drivers/media/tuners/qm1d1c0042.c delete mode 100644 drivers/media/tuners/qm1d1c0042.h diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c deleted file mode 100644 index 31cd325..000 --- a/drivers/media/dvb-frontends/tc90522.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - * Toshiba TC90522 Demodulator - * - * Copyright (C) 2014 Akihiro Tsukada <tsk...@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 version 2. - * - * - * 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. - */ - -/* - * NOTICE: - * This driver is incomplete and lacks init/config of the chips, - * as the necessary info is not disclosed. - * It assumes that users of this driver (such as a PCI bridge of - * DTV receiver cards) properly init and configure the chip - * via I2C *before* calling this driver's init() function. - * - * Currently, PT3 driver is the only one that uses this driver, - * and contains init/config code in its firmware. - * Thus some part of the code might be dependent on PT3 specific config. - */ - -#include -#include -#include -#include "dvb_math.h" -#include "tc90522.h" - -#define TC90522_I2C_THRU_REG 0xfe - -#define TC90522_MODULE_IDX(addr) (((u8)(addr) & 0x02U) >> 1) - -struct tc90522_state { - struct tc90522_config cfg; - struct dvb_frontend fe; - struct i2c_client *i2c_client; - struct i2c_adapter tuner_i2c; - - bool lna; -}; - -struct reg_val { - u8 reg; - u8 val; -}; - -static int -reg_write(struct tc90522_state *state, const struct reg_val *regs, int num) -{ - int i, ret; - struct i2c_msg msg; - - ret = 0; - msg.addr = state->i2c_client->addr; - msg.flags = 0; - msg.len = 2; - for (i = 0; i < num; i++) { - msg.buf = (u8 *)[i]; - ret = i2c_transfer(state->i2c_client->adapter, , 1); - if (ret == 0) - ret = -EIO; - if (ret < 0) - return ret; - } - return 0; -} - -static int reg_read(struct tc90522_state *state, u8 reg, u8 *val, u8 len) -{ - struct i2c_msg msgs[2] = { - { - .addr = state->i2c_client->addr, - .flags = 0, - .buf = , - .len = 1, - }, - { - .addr = state->i2c_client->addr, - .flags = I2C_M_RD, - .buf = val, - .len = len, - }, - }; - int ret; - - ret = i2c_transfer(state->i2c_client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret == ARRAY_SIZE(msgs)) - ret = 0; - else if (ret >= 0) - ret = -EIO; - return ret; -} - -static struct tc90522_state *cfg_to_state(struct tc90522_config *c) -{ - return container_of(c, struct tc90522_state, cfg); -} - - -static int tc90522s_set_tsid(struct dvb_frontend *fe) -{ - struct reg_val set_tsid[] = { - { 0x8f, 00 }, - { 0x90, 00 } - }; - - set_t
[media 6/6] Bridge driver for PLEX PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa IncSupport for PLEX PX-BCUD (ISDB-S usb dongle) Nagahama's patch simplified... Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/Kconfig | 5 +- drivers/media/usb/em28xx/Kconfig| 3 ++ drivers/media/usb/em28xx/Makefile | 1 + drivers/media/usb/em28xx/em28xx-cards.c | 27 +++ drivers/media/usb/em28xx/em28xx-dvb.c | 81 - drivers/media/usb/em28xx/em28xx.h | 1 + 6 files changed, 115 insertions(+), 3 deletions(-) diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index a8518fb..37fae59 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -149,7 +149,10 @@ config DVB_NET You may want to disable the network support on embedded devices. If unsure say Y. -# This Kconfig option is used by both PCI and USB drivers +# Options used by both PCI and USB drivers +config DVB_PTX_COMMON + tristate + config TTPCI_EEPROM tristate depends on I2C diff --git a/drivers/media/usb/em28xx/Kconfig b/drivers/media/usb/em28xx/Kconfig index e382210..fc19edc 100644 --- a/drivers/media/usb/em28xx/Kconfig +++ b/drivers/media/usb/em28xx/Kconfig @@ -59,6 +59,9 @@ config VIDEO_EM28XX_DVB select DVB_DRX39XYJ if MEDIA_SUBDRV_AUTOSELECT select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT + select DVB_PTX_COMMON + select DVB_TC90522 if MEDIA_SUBDRV_AUTOSELECT + select MEDIA_TUNER_QM1D1C004X if MEDIA_SUBDRV_AUTOSELECT ---help--- This adds support for DVB cards based on the Empiatech em28xx chips. diff --git a/drivers/media/usb/em28xx/Makefile b/drivers/media/usb/em28xx/Makefile index 3f850d5..1488829 100644 --- a/drivers/media/usb/em28xx/Makefile +++ b/drivers/media/usb/em28xx/Makefile @@ -14,3 +14,4 @@ ccflags-y += -Idrivers/media/i2c ccflags-y += -Idrivers/media/tuners ccflags-y += -Idrivers/media/dvb-core ccflags-y += -Idrivers/media/dvb-frontends +ccflags-y += -Idrivers/media/pci/ptx diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index 930e3e3..772a8f8 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c @@ -492,6 +492,20 @@ static struct em28xx_reg_seq terratec_t2_stick_hd[] = { {-1, -1, -1, -1}, }; +static struct em28xx_reg_seq plex_px_bcud[] = { + {EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 0}, + {0x0d, 0xff, 0xff, 0}, + {EM2874_R50_IR_CONFIG, 0x01, 0xff, 0}, + {EM28XX_R06_I2C_CLK,0x40, 0xff, 0}, + {EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 100}, + {EM28XX_R12_VINENABLE, 0x20, 0x20, 0}, + {0x0d, 0x42, 0xff, 1000}, + {EM2874_R80_GPIO_P0_CTRL, 0xfc, 0xff, 10}, + {EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 10}, + {0x73, 0xfd, 0xff, 100}, + {-1,-1, -1, -1}, +}; + /* * Button definitions */ @@ -2306,6 +2320,17 @@ struct em28xx_board em28xx_boards[] = { .has_dvb = 1, .ir_codes = RC_MAP_TERRATEC_SLIM_2, }, + /* 3275:0085 PLEX PX-BCUD. +* Empia EM28178, TOSHIBA TC90532XBG, Sharp QM1D1C0042 */ + [EM28178_BOARD_PLEX_PX_BCUD] = { + .name = "PLEX PX-BCUD", + .xclk = EM28XX_XCLK_FREQUENCY_4_3MHZ, + .def_i2c_bus = 1, + .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE, + .tuner_type= TUNER_ABSENT, + .tuner_gpio= plex_px_bcud, + .has_dvb = 1, + }, }; EXPORT_SYMBOL_GPL(em28xx_boards); @@ -2495,6 +2520,8 @@ struct usb_device_id em28xx_id_table[] = { .driver_info = EM2861_BOARD_LEADTEK_VC100 }, { USB_DEVICE(0xeb1a, 0x8179), .driver_info = EM28178_BOARD_TERRATEC_T2_STICK_HD }, + { USB_DEVICE(0x3275, 0x0085), + .driver_info = EM28178_BOARD_PLEX_PX_BCUD }, { }, }; MODULE_DEVICE_TABLE(usb, em28xx_id_table); diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c index 5d209c7..c45112e 100644 --- a/drivers/media/usb/em28xx/em28xx-dvb.c +++ b/drivers/media/usb/em28xx/em28xx-dvb.c @@ -12,6 +12,10 @@ (c) 2012 Frank Schäfer + (c) 2016 Nagahama Satoshi + Budi Rachmanto, AreMa Inc. + - PLEX PX-BCUD support + Based on cx88-dvb, saa7134-dvb and videobuf-dvb originally written by: (c) 2004, 2005 Chris Pascoe (c) 2004 Gerd Knorr [SuSE Labs] @@ -25,11 +29,10
[media 5/6] PCIE bridge driver for PT3 & PX-Q3PE
p[i]; + + p->card = card; + p->priv = sz_adap_priv ? (u8 *)>adap[card->adapn] + i * sz_adap_priv : NULL; + } + if (pci_enable_device(pdev) || + pci_set_dma_mask(pdev, DMA_BIT_MASK(32))|| + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) || + pci_request_regions(pdev, name)) { + kfree(card); + return NULL; + } + pci_set_drvdata(pdev, card); + return card; +} + +int ptx_i2c_add_adapter(struct ptx_card *card, const struct i2c_algorithm *algo) +{ + struct i2c_adapter *i2c = >i2c; + + i2c->algo = algo; + i2c->dev.parent = >pdev->dev; + strcpy(i2c->name, card->name); + i2c_set_adapdata(i2c, card); + mutex_init(>lock); + return i2c_add_adapter(i2c); +} + +void ptx_unregister_subdev(struct i2c_client *c) +{ + if (!c) + return; + if (c->dev.driver) + module_put(c->dev.driver->owner); + i2c_unregister_device(c); +} + +struct i2c_client *ptx_register_subdev(struct i2c_adapter *i2c, struct dvb_frontend *fe, u16 adr, char *name) +{ + struct i2c_client *c; + struct i2c_board_info info = { + .platform_data = fe, + .addr = adr, + }; + + strlcpy(info.type, name, I2C_NAME_SIZE); + request_module("%s", info.type); + c = i2c_new_device(i2c, ); + if (!c) + return NULL; + if (c->dev.driver && try_module_get(c->dev.driver->owner)) + return c; + ptx_unregister_subdev(c); + return NULL; +} + +void ptx_unregister_fe(struct dvb_frontend *fe) +{ + if (!fe) + return; + if (fe->frontend_priv) + dvb_unregister_frontend(fe); + ptx_unregister_subdev(fe->tuner_priv); + ptx_unregister_subdev(fe->demodulator_priv); + kfree(fe); +} + +struct dvb_frontend *ptx_register_fe(struct i2c_adapter *i2c, struct dvb_adapter *dvb, const struct ptx_subdev_info *info) +{ + struct dvb_frontend *fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL); + + if (!fe) + return NULL; + fe->demodulator_priv= ptx_register_subdev(i2c, fe, info->demod_addr, info->demod_name); + fe->tuner_priv = ptx_register_subdev(i2c, fe, info->tuner_addr, info->tuner_name); + if (info->type) + fe->ops.delsys[0] = info->type; + if (!fe->demodulator_priv || !fe->tuner_priv || (dvb && dvb_register_frontend(dvb, fe))) { + ptx_unregister_fe(fe); + return NULL; + } + return fe; +} + +void ptx_unregister_adap(struct ptx_card *card) +{ + int i = card->adapn - 1; + struct ptx_adap *adap = card->adap + i; + + for (; i >= 0; i--, adap--) { + ptx_unregister_fe(adap->fe); + if (adap->demux.dmx.close) + adap->demux.dmx.close(>demux.dmx); + if (adap->dmxdev.filter) + dvb_dmxdev_release(>dmxdev); + if (adap->demux.cnt_storage) + dvb_dmx_release(>demux); + if (adap->dvb.name) + dvb_unregister_adapter(>dvb); + } + i2c_del_adapter(>i2c); + pci_release_regions(card->pdev); + pci_set_drvdata(card->pdev, NULL); + pci_disable_device(card->pdev); + kfree(card); +} + +int ptx_register_adap(struct ptx_card *card, const struct ptx_subdev_info *info, + int (*thread)(void *), int (*dma)(struct ptx_adap *, bool)) +{ + struct ptx_adap *adap; + short adap_no[DVB_MAX_ADAPTERS] = {}; + u8 i; + int err; + + card->thread= thread; + card->dma = dma; + for (i = 0, adap = card->adap; i < card->adapn; i++, adap++) { + struct dvb_adapter *dvb= >dvb; + struct dvb_demux*demux = >demux; + struct dmxdev *dmxdev = >dmxdev; + + if (dvb_register_adapter(dvb, card->name, THIS_MODULE, >pdev->dev, adap_no) < 0) + return -ENFILE; + demux->dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING; + demux->feednum = 1; + demux->filternum= 1; + demux->start_feed = ptx_start_feed; + demux->stop_feed= ptx_stop_feed; + if (dvb_dmx_init(demux) < 0) + return -ENOMEM; + dmxdev->filternum = 1; + dmxdev->demux = >dmx; +
[media 2/6] drop backstabbing drivers
From: Буди Романто, AreMa Inc Obsoleted & superseded, please read cover letter for details. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-frontends/tc90522.c | 840 drivers/media/dvb-frontends/tc90522.h | 42 -- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile| 8 - drivers/media/pci/pt3/pt3.c | 874 -- drivers/media/pci/pt3/pt3.h | 186 drivers/media/pci/pt3/pt3_dma.c | 225 - drivers/media/pci/pt3/pt3_i2c.c | 240 -- drivers/media/tuners/mxl301rf.c | 349 -- drivers/media/tuners/mxl301rf.h | 26 - drivers/media/tuners/qm1d1c0042.c | 448 - drivers/media/tuners/qm1d1c0042.h | 37 -- 12 files changed, 3285 deletions(-) delete mode 100644 drivers/media/dvb-frontends/tc90522.c delete mode 100644 drivers/media/dvb-frontends/tc90522.h delete mode 100644 drivers/media/pci/pt3/Kconfig delete mode 100644 drivers/media/pci/pt3/Makefile delete mode 100644 drivers/media/pci/pt3/pt3.c delete mode 100644 drivers/media/pci/pt3/pt3.h delete mode 100644 drivers/media/pci/pt3/pt3_dma.c delete mode 100644 drivers/media/pci/pt3/pt3_i2c.c delete mode 100644 drivers/media/tuners/mxl301rf.c delete mode 100644 drivers/media/tuners/mxl301rf.h delete mode 100644 drivers/media/tuners/qm1d1c0042.c delete mode 100644 drivers/media/tuners/qm1d1c0042.h diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c deleted file mode 100644 index 31cd325..000 --- a/drivers/media/dvb-frontends/tc90522.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - * Toshiba TC90522 Demodulator - * - * Copyright (C) 2014 Akihiro Tsukada - * - * 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 version 2. - * - * - * 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. - */ - -/* - * NOTICE: - * This driver is incomplete and lacks init/config of the chips, - * as the necessary info is not disclosed. - * It assumes that users of this driver (such as a PCI bridge of - * DTV receiver cards) properly init and configure the chip - * via I2C *before* calling this driver's init() function. - * - * Currently, PT3 driver is the only one that uses this driver, - * and contains init/config code in its firmware. - * Thus some part of the code might be dependent on PT3 specific config. - */ - -#include -#include -#include -#include "dvb_math.h" -#include "tc90522.h" - -#define TC90522_I2C_THRU_REG 0xfe - -#define TC90522_MODULE_IDX(addr) (((u8)(addr) & 0x02U) >> 1) - -struct tc90522_state { - struct tc90522_config cfg; - struct dvb_frontend fe; - struct i2c_client *i2c_client; - struct i2c_adapter tuner_i2c; - - bool lna; -}; - -struct reg_val { - u8 reg; - u8 val; -}; - -static int -reg_write(struct tc90522_state *state, const struct reg_val *regs, int num) -{ - int i, ret; - struct i2c_msg msg; - - ret = 0; - msg.addr = state->i2c_client->addr; - msg.flags = 0; - msg.len = 2; - for (i = 0; i < num; i++) { - msg.buf = (u8 *)[i]; - ret = i2c_transfer(state->i2c_client->adapter, , 1); - if (ret == 0) - ret = -EIO; - if (ret < 0) - return ret; - } - return 0; -} - -static int reg_read(struct tc90522_state *state, u8 reg, u8 *val, u8 len) -{ - struct i2c_msg msgs[2] = { - { - .addr = state->i2c_client->addr, - .flags = 0, - .buf = , - .len = 1, - }, - { - .addr = state->i2c_client->addr, - .flags = I2C_M_RD, - .buf = val, - .len = len, - }, - }; - int ret; - - ret = i2c_transfer(state->i2c_client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret == ARRAY_SIZE(msgs)) - ret = 0; - else if (ret >= 0) - ret = -EIO; - return ret; -} - -static struct tc90522_state *cfg_to_state(struct tc90522_config *c) -{ - return container_of(c, struct tc90522_state, cfg); -} - - -static int tc90522s_set_tsid(struct dvb_frontend *fe) -{ - struct reg_val set_tsid[] = { - { 0x8f, 00 }, - { 0x90, 00 } - }; - - set_tsid[0].val = (fe->dtv_property_cache.stream_id & 0xff00) >> 8; -
[media 6/6] Bridge driver for PLEX PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inc Support for PLEX PX-BCUD (ISDB-S usb dongle) Nagahama's patch simplified... Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/Kconfig | 5 +- drivers/media/usb/em28xx/Kconfig| 3 ++ drivers/media/usb/em28xx/Makefile | 1 + drivers/media/usb/em28xx/em28xx-cards.c | 27 +++ drivers/media/usb/em28xx/em28xx-dvb.c | 81 - drivers/media/usb/em28xx/em28xx.h | 1 + 6 files changed, 115 insertions(+), 3 deletions(-) diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index a8518fb..37fae59 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -149,7 +149,10 @@ config DVB_NET You may want to disable the network support on embedded devices. If unsure say Y. -# This Kconfig option is used by both PCI and USB drivers +# Options used by both PCI and USB drivers +config DVB_PTX_COMMON + tristate + config TTPCI_EEPROM tristate depends on I2C diff --git a/drivers/media/usb/em28xx/Kconfig b/drivers/media/usb/em28xx/Kconfig index e382210..fc19edc 100644 --- a/drivers/media/usb/em28xx/Kconfig +++ b/drivers/media/usb/em28xx/Kconfig @@ -59,6 +59,9 @@ config VIDEO_EM28XX_DVB select DVB_DRX39XYJ if MEDIA_SUBDRV_AUTOSELECT select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT + select DVB_PTX_COMMON + select DVB_TC90522 if MEDIA_SUBDRV_AUTOSELECT + select MEDIA_TUNER_QM1D1C004X if MEDIA_SUBDRV_AUTOSELECT ---help--- This adds support for DVB cards based on the Empiatech em28xx chips. diff --git a/drivers/media/usb/em28xx/Makefile b/drivers/media/usb/em28xx/Makefile index 3f850d5..1488829 100644 --- a/drivers/media/usb/em28xx/Makefile +++ b/drivers/media/usb/em28xx/Makefile @@ -14,3 +14,4 @@ ccflags-y += -Idrivers/media/i2c ccflags-y += -Idrivers/media/tuners ccflags-y += -Idrivers/media/dvb-core ccflags-y += -Idrivers/media/dvb-frontends +ccflags-y += -Idrivers/media/pci/ptx diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index 930e3e3..772a8f8 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c @@ -492,6 +492,20 @@ static struct em28xx_reg_seq terratec_t2_stick_hd[] = { {-1, -1, -1, -1}, }; +static struct em28xx_reg_seq plex_px_bcud[] = { + {EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 0}, + {0x0d, 0xff, 0xff, 0}, + {EM2874_R50_IR_CONFIG, 0x01, 0xff, 0}, + {EM28XX_R06_I2C_CLK,0x40, 0xff, 0}, + {EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 100}, + {EM28XX_R12_VINENABLE, 0x20, 0x20, 0}, + {0x0d, 0x42, 0xff, 1000}, + {EM2874_R80_GPIO_P0_CTRL, 0xfc, 0xff, 10}, + {EM2874_R80_GPIO_P0_CTRL, 0xfd, 0xff, 10}, + {0x73, 0xfd, 0xff, 100}, + {-1,-1, -1, -1}, +}; + /* * Button definitions */ @@ -2306,6 +2320,17 @@ struct em28xx_board em28xx_boards[] = { .has_dvb = 1, .ir_codes = RC_MAP_TERRATEC_SLIM_2, }, + /* 3275:0085 PLEX PX-BCUD. +* Empia EM28178, TOSHIBA TC90532XBG, Sharp QM1D1C0042 */ + [EM28178_BOARD_PLEX_PX_BCUD] = { + .name = "PLEX PX-BCUD", + .xclk = EM28XX_XCLK_FREQUENCY_4_3MHZ, + .def_i2c_bus = 1, + .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE, + .tuner_type= TUNER_ABSENT, + .tuner_gpio= plex_px_bcud, + .has_dvb = 1, + }, }; EXPORT_SYMBOL_GPL(em28xx_boards); @@ -2495,6 +2520,8 @@ struct usb_device_id em28xx_id_table[] = { .driver_info = EM2861_BOARD_LEADTEK_VC100 }, { USB_DEVICE(0xeb1a, 0x8179), .driver_info = EM28178_BOARD_TERRATEC_T2_STICK_HD }, + { USB_DEVICE(0x3275, 0x0085), + .driver_info = EM28178_BOARD_PLEX_PX_BCUD }, { }, }; MODULE_DEVICE_TABLE(usb, em28xx_id_table); diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c index 5d209c7..c45112e 100644 --- a/drivers/media/usb/em28xx/em28xx-dvb.c +++ b/drivers/media/usb/em28xx/em28xx-dvb.c @@ -12,6 +12,10 @@ (c) 2012 Frank Schäfer + (c) 2016 Nagahama Satoshi + Budi Rachmanto, AreMa Inc. + - PLEX PX-BCUD support + Based on cx88-dvb, saa7134-dvb and videobuf-dvb originally written by: (c) 2004, 2005 Chris Pascoe (c) 2004 Gerd Knorr [SuSE Labs] @@ -25,11 +29,10 @@ #include #include +#include "ptx_common.h" #include "em28xx.h" #include -#include #include -#include #include #include
[media 5/6] PCIE bridge driver for PT3 & PX-Q3PE
d->adapn] + i * sz_adap_priv : NULL; + } + if (pci_enable_device(pdev) || + pci_set_dma_mask(pdev, DMA_BIT_MASK(32))|| + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) || + pci_request_regions(pdev, name)) { + kfree(card); + return NULL; + } + pci_set_drvdata(pdev, card); + return card; +} + +int ptx_i2c_add_adapter(struct ptx_card *card, const struct i2c_algorithm *algo) +{ + struct i2c_adapter *i2c = >i2c; + + i2c->algo = algo; + i2c->dev.parent = >pdev->dev; + strcpy(i2c->name, card->name); + i2c_set_adapdata(i2c, card); + mutex_init(>lock); + return i2c_add_adapter(i2c); +} + +void ptx_unregister_subdev(struct i2c_client *c) +{ + if (!c) + return; + if (c->dev.driver) + module_put(c->dev.driver->owner); + i2c_unregister_device(c); +} + +struct i2c_client *ptx_register_subdev(struct i2c_adapter *i2c, struct dvb_frontend *fe, u16 adr, char *name) +{ + struct i2c_client *c; + struct i2c_board_info info = { + .platform_data = fe, + .addr = adr, + }; + + strlcpy(info.type, name, I2C_NAME_SIZE); + request_module("%s", info.type); + c = i2c_new_device(i2c, ); + if (!c) + return NULL; + if (c->dev.driver && try_module_get(c->dev.driver->owner)) + return c; + ptx_unregister_subdev(c); + return NULL; +} + +void ptx_unregister_fe(struct dvb_frontend *fe) +{ + if (!fe) + return; + if (fe->frontend_priv) + dvb_unregister_frontend(fe); + ptx_unregister_subdev(fe->tuner_priv); + ptx_unregister_subdev(fe->demodulator_priv); + kfree(fe); +} + +struct dvb_frontend *ptx_register_fe(struct i2c_adapter *i2c, struct dvb_adapter *dvb, const struct ptx_subdev_info *info) +{ + struct dvb_frontend *fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL); + + if (!fe) + return NULL; + fe->demodulator_priv= ptx_register_subdev(i2c, fe, info->demod_addr, info->demod_name); + fe->tuner_priv = ptx_register_subdev(i2c, fe, info->tuner_addr, info->tuner_name); + if (info->type) + fe->ops.delsys[0] = info->type; + if (!fe->demodulator_priv || !fe->tuner_priv || (dvb && dvb_register_frontend(dvb, fe))) { + ptx_unregister_fe(fe); + return NULL; + } + return fe; +} + +void ptx_unregister_adap(struct ptx_card *card) +{ + int i = card->adapn - 1; + struct ptx_adap *adap = card->adap + i; + + for (; i >= 0; i--, adap--) { + ptx_unregister_fe(adap->fe); + if (adap->demux.dmx.close) + adap->demux.dmx.close(>demux.dmx); + if (adap->dmxdev.filter) + dvb_dmxdev_release(>dmxdev); + if (adap->demux.cnt_storage) + dvb_dmx_release(>demux); + if (adap->dvb.name) + dvb_unregister_adapter(>dvb); + } + i2c_del_adapter(>i2c); + pci_release_regions(card->pdev); + pci_set_drvdata(card->pdev, NULL); + pci_disable_device(card->pdev); + kfree(card); +} + +int ptx_register_adap(struct ptx_card *card, const struct ptx_subdev_info *info, + int (*thread)(void *), int (*dma)(struct ptx_adap *, bool)) +{ + struct ptx_adap *adap; + short adap_no[DVB_MAX_ADAPTERS] = {}; + u8 i; + int err; + + card->thread= thread; + card->dma = dma; + for (i = 0, adap = card->adap; i < card->adapn; i++, adap++) { + struct dvb_adapter *dvb= >dvb; + struct dvb_demux*demux = >demux; + struct dmxdev *dmxdev = >dmxdev; + + if (dvb_register_adapter(dvb, card->name, THIS_MODULE, >pdev->dev, adap_no) < 0) + return -ENFILE; + demux->dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING; + demux->feednum = 1; + demux->filternum= 1; + demux->start_feed = ptx_start_feed; + demux->stop_feed= ptx_stop_feed; + if (dvb_dmx_init(demux) < 0) + return -ENOMEM; + dmxdev->filternum = 1; + dmxdev->demux = >dmx; + err = dvb_dmxdev_init(dmxdev, dvb); + if (err) +
[media 0/6] DVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa IncDVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle == Status: stable Features: 1. in addition to the real frequency: ISDB-S : freq. channel ID ISDB-T : freq# (I/O# +128), ch#, ch# +64 for CATV 2. in addition to TSID: ISDB-S : slot# Supported Cards & Main components: A. EarthSoft PT3: 1. Altera EP4CGX15BF14C8N : customized FPGA PCI bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. SharpVA4M6JC2103 : contains 2 ISDB-S + 2 ISDB-T tuners ISDB-S : Sharp QM1D1C0042 RF-IC, chip ver. 0x48 ISDB-T : MaxLinear CMOS Hybrid TV MxL301RF B. PLEX PX-Q3PE: 1. ASICEN ASV5220 : PCI-E bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. NXP Semiconductors TDA20142 : ISDB-S tuner 4. Newport Media NM120 : ISDB-T tuner 5. ASICEN ASIE5606X8 : crypting controller C. PLEX PX-BCUD (ISDB-S USB dongle) 1. EmpiaEM28178 : USB I/F (courtesy of Nagahama Satoshi) 2. Toshiba TC90532 : demodulator (using TC90522 driver) 3. SharpQM1D1C0045_2: ISDB-S RF-IC, chip ver. 0x68 Notes: This is a complex but smartly polished driver package containing 2 (dual head) PCI-E bridge I/F drivers, single demodulator frontend, and 4 (quad tail) tuner drivers, plus, simplified Nagahama's patch for PLEX PX-BCUD (ISDB-S USB dongle). Generic registration related procedures (subdevices, frontend, etc.) summarized in ptx_common.c are very useful also for other DVB drivers, and would be very handy if inserted into the core (e.g. dvb_frontend.c & dvb_frontend.h). For example, currently, the entity of struct dvb_frontend is created sometimes in demodulators, some in tuners, or even in the parent (bridge) drivers. IMHO, this entity should be provided by dvb_core. ptx_register_fe() included in ptx_common.c simplifies the tasks and in fact, significantly reduces coding & kernel size. Also, currently dvb_frontend's .demodulator_priv & .tuner_priv are of type (void *). These should be changed to (struct i2c_client *), IMHO. Private data for demodulator or tuner should be attached under i2c_client, using i2c_set_clientdata() for instance. FILENAMESUPPORTED CHIPS === tc90522.c TC90522XBG, TC90532XBG,... tda2014x.c TDA20142 qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2 nm131.c NM131, NM130, NM120 mxl301rf.c MxL301RF pt3_pci.c EP4CGX15BF14C8N pxq3pe_pci.cASV5220 Full package: - URL: https://github.com/knight-rider/ptx Буди Романто, AreMa Inc (6): Raise adapter number limit drop backstabbing drivers Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle PCIE bridge driver for PT3 & PX-Q3PE Bridge driver for PLEX PX-BCUD ISDB-S USB dongle drivers/media/Kconfig | 5 +- drivers/media/dvb-core/Kconfig | 4 +- drivers/media/dvb-core/dvbdev.h | 2 +- drivers/media/dvb-frontends/tc90522.c | 964 +++- drivers/media/dvb-frontends/tc90522.h | 36 +- drivers/media/pci/Kconfig | 2 +- drivers/media/pci/Makefile | 2 +- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile | 8 - drivers/media/pci/pt3/pt3.c | 874 - drivers/media/pci/pt3/pt3.h | 186 -- drivers/media/pci/pt3/pt3_dma.c | 225 drivers/media/pci/pt3/pt3_i2c.c | 240 drivers/media/pci/ptx/Kconfig | 23 + drivers/media/pci/ptx/Makefile | 6 + drivers/media/pci/ptx/pt3.c | 426 ++ drivers/media/pci/ptx/ptx_common.c | 266 + drivers/media/pci/ptx/ptx_common.h | 76 +++ drivers/media/pci/ptx/pxq3pe.c | 585 +++ drivers/media/tuners/Kconfig| 21 +- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 471 ++-- drivers/media/tuners/mxl301rf.h | 19 +- drivers/media/tuners/nm131.c| 248 drivers/media/tuners/nm131.h| 13 + drivers/media/tuners/qm1d1c0042.c | 448 --- drivers/media/tuners/qm1d1c0042.h | 37 -- drivers/media/tuners/qm1d1c004x.c | 242 drivers/media/tuners/qm1d1c004x.h | 23 + drivers/media/tuners/tda2014x.c | 358 drivers/media/tuners/tda2014x.h | 13 + drivers/media/usb/em28xx/Kconfig| 3 + drivers/media/usb/em28xx/Makefile | 1 + drivers/media/usb/em28xx/em28xx-cards.c | 27 +
[media 0/6] DVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
From: Буди Романто, AreMa Inc DVB driver for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle == Status: stable Features: 1. in addition to the real frequency: ISDB-S : freq. channel ID ISDB-T : freq# (I/O# +128), ch#, ch# +64 for CATV 2. in addition to TSID: ISDB-S : slot# Supported Cards & Main components: A. EarthSoft PT3: 1. Altera EP4CGX15BF14C8N : customized FPGA PCI bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. SharpVA4M6JC2103 : contains 2 ISDB-S + 2 ISDB-T tuners ISDB-S : Sharp QM1D1C0042 RF-IC, chip ver. 0x48 ISDB-T : MaxLinear CMOS Hybrid TV MxL301RF B. PLEX PX-Q3PE: 1. ASICEN ASV5220 : PCI-E bridge 2. Toshiba TC90522XBG : quad demodulator (2ch OFDM + 2ch 8PSK) 3. NXP Semiconductors TDA20142 : ISDB-S tuner 4. Newport Media NM120 : ISDB-T tuner 5. ASICEN ASIE5606X8 : crypting controller C. PLEX PX-BCUD (ISDB-S USB dongle) 1. EmpiaEM28178 : USB I/F (courtesy of Nagahama Satoshi) 2. Toshiba TC90532 : demodulator (using TC90522 driver) 3. SharpQM1D1C0045_2: ISDB-S RF-IC, chip ver. 0x68 Notes: This is a complex but smartly polished driver package containing 2 (dual head) PCI-E bridge I/F drivers, single demodulator frontend, and 4 (quad tail) tuner drivers, plus, simplified Nagahama's patch for PLEX PX-BCUD (ISDB-S USB dongle). Generic registration related procedures (subdevices, frontend, etc.) summarized in ptx_common.c are very useful also for other DVB drivers, and would be very handy if inserted into the core (e.g. dvb_frontend.c & dvb_frontend.h). For example, currently, the entity of struct dvb_frontend is created sometimes in demodulators, some in tuners, or even in the parent (bridge) drivers. IMHO, this entity should be provided by dvb_core. ptx_register_fe() included in ptx_common.c simplifies the tasks and in fact, significantly reduces coding & kernel size. Also, currently dvb_frontend's .demodulator_priv & .tuner_priv are of type (void *). These should be changed to (struct i2c_client *), IMHO. Private data for demodulator or tuner should be attached under i2c_client, using i2c_set_clientdata() for instance. FILENAMESUPPORTED CHIPS === tc90522.c TC90522XBG, TC90532XBG,... tda2014x.c TDA20142 qm1d1c004x.cQM1D1C0042, QM1D1C0045, QM1D1C0045_2 nm131.c NM131, NM130, NM120 mxl301rf.c MxL301RF pt3_pci.c EP4CGX15BF14C8N pxq3pe_pci.cASV5220 Full package: - URL: https://github.com/knight-rider/ptx Буди Романто, AreMa Inc (6): Raise adapter number limit drop backstabbing drivers Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle Tuners for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle PCIE bridge driver for PT3 & PX-Q3PE Bridge driver for PLEX PX-BCUD ISDB-S USB dongle drivers/media/Kconfig | 5 +- drivers/media/dvb-core/Kconfig | 4 +- drivers/media/dvb-core/dvbdev.h | 2 +- drivers/media/dvb-frontends/tc90522.c | 964 +++- drivers/media/dvb-frontends/tc90522.h | 36 +- drivers/media/pci/Kconfig | 2 +- drivers/media/pci/Makefile | 2 +- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile | 8 - drivers/media/pci/pt3/pt3.c | 874 - drivers/media/pci/pt3/pt3.h | 186 -- drivers/media/pci/pt3/pt3_dma.c | 225 drivers/media/pci/pt3/pt3_i2c.c | 240 drivers/media/pci/ptx/Kconfig | 23 + drivers/media/pci/ptx/Makefile | 6 + drivers/media/pci/ptx/pt3.c | 426 ++ drivers/media/pci/ptx/ptx_common.c | 266 + drivers/media/pci/ptx/ptx_common.h | 76 +++ drivers/media/pci/ptx/pxq3pe.c | 585 +++ drivers/media/tuners/Kconfig| 21 +- drivers/media/tuners/Makefile | 4 +- drivers/media/tuners/mxl301rf.c | 471 ++-- drivers/media/tuners/mxl301rf.h | 19 +- drivers/media/tuners/nm131.c| 248 drivers/media/tuners/nm131.h| 13 + drivers/media/tuners/qm1d1c0042.c | 448 --- drivers/media/tuners/qm1d1c0042.h | 37 -- drivers/media/tuners/qm1d1c004x.c | 242 drivers/media/tuners/qm1d1c004x.h | 23 + drivers/media/tuners/tda2014x.c | 358 drivers/media/tuners/tda2014x.h | 13 + drivers/media/usb/em28xx/Kconfig| 3 + drivers/media/usb/em28xx/Makefile | 1 + drivers/media/usb/em28xx/em28xx-cards.c | 27 +
[media 3/6] Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
return 1049480 + 38360 * fno; /* BS */ + else if (fno < 24) + return 1613000 + 4 * (fno - 12);/* CS110 right */ + return 1593000 + 4 * (fno - 24);/* CS110 left */ + } + + void s_kHz(u32 *f) + { + *f =*f > 300 ? fno2kHz(14) : /* max kHz, CNN */ + *f >= 1049480 ? *f : /* min real kHz */ + *f > 48 ? fno2kHz(4): /* BS11 etc. */ + fno2kHz(*f - 1); + } + + u32 fno2Hz(u32 fno) + { + return (fno > 112 ? 557 : 93 + 6 * fno + (fno < 12 ? 0 : fno < 17 ? 2 : fno < 63 ? 0 : 2)) * 100 + 142857; + } + + void t_Hz(u32 *f) + { + *f =*f >= 9000 ? *f: /* real_freq Hz */ + *f > 255? fno2Hz(77): /* NHK */ + *f > 127? fno2Hz(*f - 128) : /* freqno (IO#) */ + *f > 63 ? (*f -= 64,/* CATV */ + *f > 22 ? fno2Hz(*f - 1): /* C23-C62 */ + *f > 12 ? fno2Hz(*f - 10) : /* C13-C22 */ + fno2Hz(77)) : + *f > 62 ? fno2Hz(77): + *f > 12 ? fno2Hz(*f + 50) : /* 13-62*/ + *f > 3 ? fno2Hz(*f + 9) : /* 4-12*/ + *f ? fno2Hz(*f - 1) : /* 1-3 */ + fno2Hz(77); + } + struct i2c_client *d = fe->demodulator_priv; + enum fe_status *festat = i2c_get_clientdata(d); + u16 set_id = fe->dtv_property_cache.stream_id, + i = 999; + u8 data[16]; + + if (!retune)/* once is enough */ + return 0; + *festat = 0; + if (fe->dtv_property_cache.delivery_system == SYS_ISDBT) + goto ISDBT; + + s_kHz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + if ((tc90522_r(d, 0xC3, data, 1), !(data[0] & 0x10)) && /* locked */ + (tc90522_r(d, 0xCE, data, 2), *(u16 *)data != 0) && /* valid TSID */ + tc90522_r(d, 0xC3, data, 1) && + tc90522_r(d, 0xCE, data, 16)) + break; + msleep_interruptible(5); + } + if (!i) + goto ERR; + for (i = 0; i < 8; i++) { + u16 tsid = tc90522_n2int(data + i*2, 2); + + if ((tsid == set_id || set_id == i) && + tc90522_w(d, 0x8F, tsid >> 8) && + tc90522_w(d, 0x90, tsid & 0xFF) && + tc90522_r(d, 0xE6, data, 2) && + tc90522_n2int(data, 2) == tsid) + goto LOCK; + } + goto ERR; +ISDBT: + t_Hz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + boolretryov, + lock0, + lock1; + if (!tc90522_r(d, 0x80, data, 1) || !tc90522_r(d, 0xB0, data + 1, 1)) + break; + retryov = data[0] & 0b1000 ? true : false; + lock0 = data[0] & 0b1000 ? false : true; + lock1 = data[1] & 0b1000 ? true : false; + if (lock0 && lock1) { +LOCK: + *festat = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_LOCK; + *stat = *festat; + return 0; + } + if (retryov) + break; + msleep_interruptible(1); + } +ERR: + *stat = *festat; + return -ETIMEDOUT; +} + +static struct dvb_frontend_ops tc90522_ops = { + .info = { + .name = TC90522_MODNAME, + .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_AUTO | FE_CAN_QAM_AUTO | FE_CAN_MULTISTREAM | + FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO, + .frequency_min = 1,/* actual limit settings are set by .tune */ + .frequency_max = 77000, + }, +
[media 3/6] Demodulator for Earthsoft PT3, PLEX PX-Q3PE ISDB-S/T PCIE cards & PX-BCUD ISDB-S USB dongle
S */ + else if (fno < 24) + return 1613000 + 4 * (fno - 12);/* CS110 right */ + return 1593000 + 4 * (fno - 24);/* CS110 left */ + } + + void s_kHz(u32 *f) + { + *f =*f > 300 ? fno2kHz(14) : /* max kHz, CNN */ + *f >= 1049480 ? *f : /* min real kHz */ + *f > 48 ? fno2kHz(4): /* BS11 etc. */ + fno2kHz(*f - 1); + } + + u32 fno2Hz(u32 fno) + { + return (fno > 112 ? 557 : 93 + 6 * fno + (fno < 12 ? 0 : fno < 17 ? 2 : fno < 63 ? 0 : 2)) * 100 + 142857; + } + + void t_Hz(u32 *f) + { + *f =*f >= 9000 ? *f: /* real_freq Hz */ + *f > 255? fno2Hz(77): /* NHK */ + *f > 127? fno2Hz(*f - 128) : /* freqno (IO#) */ + *f > 63 ? (*f -= 64,/* CATV */ + *f > 22 ? fno2Hz(*f - 1): /* C23-C62 */ + *f > 12 ? fno2Hz(*f - 10) : /* C13-C22 */ + fno2Hz(77)) : + *f > 62 ? fno2Hz(77): + *f > 12 ? fno2Hz(*f + 50) : /* 13-62*/ + *f > 3 ? fno2Hz(*f + 9) : /* 4-12*/ + *f ? fno2Hz(*f - 1) : /* 1-3 */ + fno2Hz(77); + } + struct i2c_client *d = fe->demodulator_priv; + enum fe_status *festat = i2c_get_clientdata(d); + u16 set_id = fe->dtv_property_cache.stream_id, + i = 999; + u8 data[16]; + + if (!retune)/* once is enough */ + return 0; + *festat = 0; + if (fe->dtv_property_cache.delivery_system == SYS_ISDBT) + goto ISDBT; + + s_kHz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + if ((tc90522_r(d, 0xC3, data, 1), !(data[0] & 0x10)) && /* locked */ + (tc90522_r(d, 0xCE, data, 2), *(u16 *)data != 0) && /* valid TSID */ + tc90522_r(d, 0xC3, data, 1) && + tc90522_r(d, 0xCE, data, 16)) + break; + msleep_interruptible(5); + } + if (!i) + goto ERR; + for (i = 0; i < 8; i++) { + u16 tsid = tc90522_n2int(data + i*2, 2); + + if ((tsid == set_id || set_id == i) && + tc90522_w(d, 0x8F, tsid >> 8) && + tc90522_w(d, 0x90, tsid & 0xFF) && + tc90522_r(d, 0xE6, data, 2) && + tc90522_n2int(data, 2) == tsid) + goto LOCK; + } + goto ERR; +ISDBT: + t_Hz(>dtv_property_cache.frequency); + if (fe->ops.tuner_ops.set_params(fe)) + return -EIO; + while (i--) { + boolretryov, + lock0, + lock1; + if (!tc90522_r(d, 0x80, data, 1) || !tc90522_r(d, 0xB0, data + 1, 1)) + break; + retryov = data[0] & 0b1000 ? true : false; + lock0 = data[0] & 0b1000 ? false : true; + lock1 = data[1] & 0b1000 ? true : false; + if (lock0 && lock1) { +LOCK: + *festat = FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_LOCK; + *stat = *festat; + return 0; + } + if (retryov) + break; + msleep_interruptible(1); + } +ERR: + *stat = *festat; + return -ETIMEDOUT; +} + +static struct dvb_frontend_ops tc90522_ops = { + .info = { + .name = TC90522_MODNAME, + .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_AUTO | FE_CAN_QAM_AUTO | FE_CAN_MULTISTREAM | + FE_CAN_TRANSMISSION_MODE_AUTO | FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_HIERARCHY_AUTO, + .frequency_min = 1,/* actual limit settings are set by .tune */ + .frequency_max = 77000, + }, + .get_frontend_algo = tc90522_get_frontend_algo, + .read_snr
[media 3/8] drop backstabbing drivers
From: Буди Романто, AreMa Inc <knightri...@are.ma> Obsoleted & superseded, please read cover letter for details. Signed-off-by: Буди Романто, AreMa Inc <knightri...@are.ma> --- drivers/media/dvb-frontends/tc90522.c | 840 drivers/media/dvb-frontends/tc90522.h | 42 -- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile| 8 - drivers/media/pci/pt3/pt3.c | 874 -- drivers/media/pci/pt3/pt3.h | 186 drivers/media/pci/pt3/pt3_dma.c | 225 - drivers/media/pci/pt3/pt3_i2c.c | 240 -- drivers/media/tuners/mxl301rf.c | 349 -- drivers/media/tuners/mxl301rf.h | 26 - drivers/media/tuners/qm1d1c0042.c | 448 - drivers/media/tuners/qm1d1c0042.h | 37 -- 12 files changed, 3285 deletions(-) delete mode 100644 drivers/media/dvb-frontends/tc90522.c delete mode 100644 drivers/media/dvb-frontends/tc90522.h delete mode 100644 drivers/media/pci/pt3/Kconfig delete mode 100644 drivers/media/pci/pt3/Makefile delete mode 100644 drivers/media/pci/pt3/pt3.c delete mode 100644 drivers/media/pci/pt3/pt3.h delete mode 100644 drivers/media/pci/pt3/pt3_dma.c delete mode 100644 drivers/media/pci/pt3/pt3_i2c.c delete mode 100644 drivers/media/tuners/mxl301rf.c delete mode 100644 drivers/media/tuners/mxl301rf.h delete mode 100644 drivers/media/tuners/qm1d1c0042.c delete mode 100644 drivers/media/tuners/qm1d1c0042.h diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c deleted file mode 100644 index 31cd325..000 --- a/drivers/media/dvb-frontends/tc90522.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - * Toshiba TC90522 Demodulator - * - * Copyright (C) 2014 Akihiro Tsukada <tsk...@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 version 2. - * - * - * 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. - */ - -/* - * NOTICE: - * This driver is incomplete and lacks init/config of the chips, - * as the necessary info is not disclosed. - * It assumes that users of this driver (such as a PCI bridge of - * DTV receiver cards) properly init and configure the chip - * via I2C *before* calling this driver's init() function. - * - * Currently, PT3 driver is the only one that uses this driver, - * and contains init/config code in its firmware. - * Thus some part of the code might be dependent on PT3 specific config. - */ - -#include -#include -#include -#include "dvb_math.h" -#include "tc90522.h" - -#define TC90522_I2C_THRU_REG 0xfe - -#define TC90522_MODULE_IDX(addr) (((u8)(addr) & 0x02U) >> 1) - -struct tc90522_state { - struct tc90522_config cfg; - struct dvb_frontend fe; - struct i2c_client *i2c_client; - struct i2c_adapter tuner_i2c; - - bool lna; -}; - -struct reg_val { - u8 reg; - u8 val; -}; - -static int -reg_write(struct tc90522_state *state, const struct reg_val *regs, int num) -{ - int i, ret; - struct i2c_msg msg; - - ret = 0; - msg.addr = state->i2c_client->addr; - msg.flags = 0; - msg.len = 2; - for (i = 0; i < num; i++) { - msg.buf = (u8 *)[i]; - ret = i2c_transfer(state->i2c_client->adapter, , 1); - if (ret == 0) - ret = -EIO; - if (ret < 0) - return ret; - } - return 0; -} - -static int reg_read(struct tc90522_state *state, u8 reg, u8 *val, u8 len) -{ - struct i2c_msg msgs[2] = { - { - .addr = state->i2c_client->addr, - .flags = 0, - .buf = , - .len = 1, - }, - { - .addr = state->i2c_client->addr, - .flags = I2C_M_RD, - .buf = val, - .len = len, - }, - }; - int ret; - - ret = i2c_transfer(state->i2c_client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret == ARRAY_SIZE(msgs)) - ret = 0; - else if (ret >= 0) - ret = -EIO; - return ret; -} - -static struct tc90522_state *cfg_to_state(struct tc90522_config *c) -{ - return container_of(c, struct tc90522_state, cfg); -} - - -static int tc90522s_set_tsid(struct dvb_frontend *fe) -{ - struct reg_val set_tsid[] = { - { 0x8f, 00 }, - { 0x90, 00 } - }; - - set_t
[media 3/8] drop backstabbing drivers
From: Буди Романто, AreMa Inc Obsoleted & superseded, please read cover letter for details. Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/dvb-frontends/tc90522.c | 840 drivers/media/dvb-frontends/tc90522.h | 42 -- drivers/media/pci/pt3/Kconfig | 10 - drivers/media/pci/pt3/Makefile| 8 - drivers/media/pci/pt3/pt3.c | 874 -- drivers/media/pci/pt3/pt3.h | 186 drivers/media/pci/pt3/pt3_dma.c | 225 - drivers/media/pci/pt3/pt3_i2c.c | 240 -- drivers/media/tuners/mxl301rf.c | 349 -- drivers/media/tuners/mxl301rf.h | 26 - drivers/media/tuners/qm1d1c0042.c | 448 - drivers/media/tuners/qm1d1c0042.h | 37 -- 12 files changed, 3285 deletions(-) delete mode 100644 drivers/media/dvb-frontends/tc90522.c delete mode 100644 drivers/media/dvb-frontends/tc90522.h delete mode 100644 drivers/media/pci/pt3/Kconfig delete mode 100644 drivers/media/pci/pt3/Makefile delete mode 100644 drivers/media/pci/pt3/pt3.c delete mode 100644 drivers/media/pci/pt3/pt3.h delete mode 100644 drivers/media/pci/pt3/pt3_dma.c delete mode 100644 drivers/media/pci/pt3/pt3_i2c.c delete mode 100644 drivers/media/tuners/mxl301rf.c delete mode 100644 drivers/media/tuners/mxl301rf.h delete mode 100644 drivers/media/tuners/qm1d1c0042.c delete mode 100644 drivers/media/tuners/qm1d1c0042.h diff --git a/drivers/media/dvb-frontends/tc90522.c b/drivers/media/dvb-frontends/tc90522.c deleted file mode 100644 index 31cd325..000 --- a/drivers/media/dvb-frontends/tc90522.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - * Toshiba TC90522 Demodulator - * - * Copyright (C) 2014 Akihiro Tsukada - * - * 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 version 2. - * - * - * 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. - */ - -/* - * NOTICE: - * This driver is incomplete and lacks init/config of the chips, - * as the necessary info is not disclosed. - * It assumes that users of this driver (such as a PCI bridge of - * DTV receiver cards) properly init and configure the chip - * via I2C *before* calling this driver's init() function. - * - * Currently, PT3 driver is the only one that uses this driver, - * and contains init/config code in its firmware. - * Thus some part of the code might be dependent on PT3 specific config. - */ - -#include -#include -#include -#include "dvb_math.h" -#include "tc90522.h" - -#define TC90522_I2C_THRU_REG 0xfe - -#define TC90522_MODULE_IDX(addr) (((u8)(addr) & 0x02U) >> 1) - -struct tc90522_state { - struct tc90522_config cfg; - struct dvb_frontend fe; - struct i2c_client *i2c_client; - struct i2c_adapter tuner_i2c; - - bool lna; -}; - -struct reg_val { - u8 reg; - u8 val; -}; - -static int -reg_write(struct tc90522_state *state, const struct reg_val *regs, int num) -{ - int i, ret; - struct i2c_msg msg; - - ret = 0; - msg.addr = state->i2c_client->addr; - msg.flags = 0; - msg.len = 2; - for (i = 0; i < num; i++) { - msg.buf = (u8 *)[i]; - ret = i2c_transfer(state->i2c_client->adapter, , 1); - if (ret == 0) - ret = -EIO; - if (ret < 0) - return ret; - } - return 0; -} - -static int reg_read(struct tc90522_state *state, u8 reg, u8 *val, u8 len) -{ - struct i2c_msg msgs[2] = { - { - .addr = state->i2c_client->addr, - .flags = 0, - .buf = , - .len = 1, - }, - { - .addr = state->i2c_client->addr, - .flags = I2C_M_RD, - .buf = val, - .len = len, - }, - }; - int ret; - - ret = i2c_transfer(state->i2c_client->adapter, msgs, ARRAY_SIZE(msgs)); - if (ret == ARRAY_SIZE(msgs)) - ret = 0; - else if (ret >= 0) - ret = -EIO; - return ret; -} - -static struct tc90522_state *cfg_to_state(struct tc90522_config *c) -{ - return container_of(c, struct tc90522_state, cfg); -} - - -static int tc90522s_set_tsid(struct dvb_frontend *fe) -{ - struct reg_val set_tsid[] = { - { 0x8f, 00 }, - { 0x90, 00 } - }; - - set_tsid[0].val = (fe->dtv_property_cache.stream_id & 0xff00) >> 8; -
[media 5/8] MaxLinear MxL301RF ISDB-T tuner
From: Буди Романто, AreMa IncSigned-off-by: Буди Романто, AreMa Inc --- drivers/media/tuners/mxl301rf.c | 220 drivers/media/tuners/mxl301rf.h | 23 + 2 files changed, 243 insertions(+) create mode 100644 drivers/media/tuners/mxl301rf.c create mode 100644 drivers/media/tuners/mxl301rf.h diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c new file mode 100644 index 000..916b06f --- /dev/null +++ b/drivers/media/tuners/mxl301rf.c @@ -0,0 +1,220 @@ +/* + Sharp VA4M6JC2103 - Earthsoft PT3 ISDB-T tuner MaxLinear CMOS Hybrid TV MxL301RF + + Copyright (C) Budi Rachmanto, AreMa Inc. + + 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. +*/ + +#include "dvb_frontend.h" +#include "mxl301rf.h" + +int mxl301rf_w(struct dvb_frontend *fe, u8 slvadr, const u8 *dat, int len) +{ + struct i2c_client *d = fe->demodulator_priv; + u8 buf[len + 1]; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0, .buf = buf, .len = len + 1,}, + }; + + buf[0] = slvadr; + memcpy(buf + 1, dat, len); + return i2c_transfer(d->adapter, msg, 1) == 1 ? 0 : -EIO; +} + +int mxl301rf_w_tuner(struct dvb_frontend *fe, const u8 *dat, int len) +{ + u8 buf[len + 1]; + + buf[0] = ((struct i2c_client *)fe->tuner_priv)->addr << 1; + memcpy(buf + 1, dat, len); + return mxl301rf_w(fe, 0xFE, buf, len + 1); +} + +u8 mxl301rf_r(struct dvb_frontend *fe, u8 regadr) +{ + struct i2c_client *d = fe->demodulator_priv, + *t = fe->tuner_priv; + u8 wbuf[] = {0xFB, regadr}, + rbuf[] = {0xFE, (t->addr << 1) | 1, 0}; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0,.buf= rbuf, .len= 2,}, + {.addr = d->addr, .flags = I2C_M_RD, .buf= rbuf + 2, .len= 1,}, + }; + mxl301rf_w_tuner(fe, wbuf, sizeof(wbuf)); + return t->addr && (i2c_transfer(d->adapter, msg, 2) == 2) ? rbuf[2] : 0; +} + +enum mxl301rf_agc { + MXL301RF_AGC_AUTO, + MXL301RF_AGC_MANUAL, +}; + +int mxl301rf_set_agc(struct dvb_frontend *fe, enum mxl301rf_agc agc) +{ + u8 dat = agc == MXL301RF_AGC_AUTO ? 0x40 : 0x00, + imsrst = 0x01 << 6; + int err = mxl301rf_w(fe, 0x25, , 1); + + dat = 0x4c | (agc == MXL301RF_AGC_AUTO ? 0 : 1); + return err || + mxl301rf_w(fe, 0x23, , 1) || + mxl301rf_w(fe, 0x01, , 1); +} + +int mxl301rf_sleep(struct dvb_frontend *fe) +{ + u8 buf = (1 << 7) | (1 << 4), + dat[] = {0x01, 0x00, 0x13, 0x00}; + int err = mxl301rf_set_agc(fe, MXL301RF_AGC_MANUAL); + + if (err) + return err; + mxl301rf_w_tuner(fe, dat, sizeof(dat)); + return mxl301rf_w(fe, 0x03, , 1); +} + +int mxl301rf_tune(struct dvb_frontend *fe) +{ + struct shf_dvbt { + u32 freq, /* Channel center frequency @ kHz */ + freq_th;/* Offset frequency threshold @ kHz */ + u8 shf_val,/* Spur shift value */ + shf_dir;/* Spur shift direction */ + } shf_dvbt_tab[] = { + { 64500, 500, 0x92, 0x07}, + {191500, 300, 0xe2, 0x07}, + {205500, 500, 0x2c, 0x04}, + {212500, 500, 0x1e, 0x04}, + {226500, 500, 0xd4, 0x07}, + { 99143, 500, 0x9c, 0x07}, + {173143, 500, 0xd4, 0x07}, + {191143, 300, 0xd4, 0x07}, + {207143, 500, 0xce, 0x07}, + {225143, 500, 0xce, 0x07}, + {243143, 500, 0xd4, 0x07}, + {261143, 500, 0xd4, 0x07}, + {291143, 500, 0xd4, 0x07}, + {339143, 500, 0x2c, 0x04}, + {117143, 500, 0x7a, 0x07}, + {135143, 300, 0x7a, 0x07}, + {153143, 500, 0x01, 0x07} + }; + u8 rf_dat[] = { + 0x13, 0x00, /* abort tune */ + 0x3b, 0xc0, + 0x3b, 0x80, + 0x10, 0x95, /* BW */ + 0x1a, 0x05, + 0x61, 0x00, + 0x62, 0xa0, + 0x11, 0x40, /* 2 bytes to store RF */ + 0x12, 0x0e, /* 2 bytes to store RF */ + 0x13, 0x01 /* start tune */ + }; + const u8 idac[] = {
[media 5/8] MaxLinear MxL301RF ISDB-T tuner
From: Буди Романто, AreMa Inc Signed-off-by: Буди Романто, AreMa Inc --- drivers/media/tuners/mxl301rf.c | 220 drivers/media/tuners/mxl301rf.h | 23 + 2 files changed, 243 insertions(+) create mode 100644 drivers/media/tuners/mxl301rf.c create mode 100644 drivers/media/tuners/mxl301rf.h diff --git a/drivers/media/tuners/mxl301rf.c b/drivers/media/tuners/mxl301rf.c new file mode 100644 index 000..916b06f --- /dev/null +++ b/drivers/media/tuners/mxl301rf.c @@ -0,0 +1,220 @@ +/* + Sharp VA4M6JC2103 - Earthsoft PT3 ISDB-T tuner MaxLinear CMOS Hybrid TV MxL301RF + + Copyright (C) Budi Rachmanto, AreMa Inc. + + 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. +*/ + +#include "dvb_frontend.h" +#include "mxl301rf.h" + +int mxl301rf_w(struct dvb_frontend *fe, u8 slvadr, const u8 *dat, int len) +{ + struct i2c_client *d = fe->demodulator_priv; + u8 buf[len + 1]; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0, .buf = buf, .len = len + 1,}, + }; + + buf[0] = slvadr; + memcpy(buf + 1, dat, len); + return i2c_transfer(d->adapter, msg, 1) == 1 ? 0 : -EIO; +} + +int mxl301rf_w_tuner(struct dvb_frontend *fe, const u8 *dat, int len) +{ + u8 buf[len + 1]; + + buf[0] = ((struct i2c_client *)fe->tuner_priv)->addr << 1; + memcpy(buf + 1, dat, len); + return mxl301rf_w(fe, 0xFE, buf, len + 1); +} + +u8 mxl301rf_r(struct dvb_frontend *fe, u8 regadr) +{ + struct i2c_client *d = fe->demodulator_priv, + *t = fe->tuner_priv; + u8 wbuf[] = {0xFB, regadr}, + rbuf[] = {0xFE, (t->addr << 1) | 1, 0}; + struct i2c_msg msg[] = { + {.addr = d->addr, .flags = 0,.buf= rbuf, .len= 2,}, + {.addr = d->addr, .flags = I2C_M_RD, .buf= rbuf + 2, .len= 1,}, + }; + mxl301rf_w_tuner(fe, wbuf, sizeof(wbuf)); + return t->addr && (i2c_transfer(d->adapter, msg, 2) == 2) ? rbuf[2] : 0; +} + +enum mxl301rf_agc { + MXL301RF_AGC_AUTO, + MXL301RF_AGC_MANUAL, +}; + +int mxl301rf_set_agc(struct dvb_frontend *fe, enum mxl301rf_agc agc) +{ + u8 dat = agc == MXL301RF_AGC_AUTO ? 0x40 : 0x00, + imsrst = 0x01 << 6; + int err = mxl301rf_w(fe, 0x25, , 1); + + dat = 0x4c | (agc == MXL301RF_AGC_AUTO ? 0 : 1); + return err || + mxl301rf_w(fe, 0x23, , 1) || + mxl301rf_w(fe, 0x01, , 1); +} + +int mxl301rf_sleep(struct dvb_frontend *fe) +{ + u8 buf = (1 << 7) | (1 << 4), + dat[] = {0x01, 0x00, 0x13, 0x00}; + int err = mxl301rf_set_agc(fe, MXL301RF_AGC_MANUAL); + + if (err) + return err; + mxl301rf_w_tuner(fe, dat, sizeof(dat)); + return mxl301rf_w(fe, 0x03, , 1); +} + +int mxl301rf_tune(struct dvb_frontend *fe) +{ + struct shf_dvbt { + u32 freq, /* Channel center frequency @ kHz */ + freq_th;/* Offset frequency threshold @ kHz */ + u8 shf_val,/* Spur shift value */ + shf_dir;/* Spur shift direction */ + } shf_dvbt_tab[] = { + { 64500, 500, 0x92, 0x07}, + {191500, 300, 0xe2, 0x07}, + {205500, 500, 0x2c, 0x04}, + {212500, 500, 0x1e, 0x04}, + {226500, 500, 0xd4, 0x07}, + { 99143, 500, 0x9c, 0x07}, + {173143, 500, 0xd4, 0x07}, + {191143, 300, 0xd4, 0x07}, + {207143, 500, 0xce, 0x07}, + {225143, 500, 0xce, 0x07}, + {243143, 500, 0xd4, 0x07}, + {261143, 500, 0xd4, 0x07}, + {291143, 500, 0xd4, 0x07}, + {339143, 500, 0x2c, 0x04}, + {117143, 500, 0x7a, 0x07}, + {135143, 300, 0x7a, 0x07}, + {153143, 500, 0x01, 0x07} + }; + u8 rf_dat[] = { + 0x13, 0x00, /* abort tune */ + 0x3b, 0xc0, + 0x3b, 0x80, + 0x10, 0x95, /* BW */ + 0x1a, 0x05, + 0x61, 0x00, + 0x62, 0xa0, + 0x11, 0x40, /* 2 bytes to store RF */ + 0x12, 0x0e, /* 2 bytes to store RF */ + 0x13, 0x01 /* start tune */ + }; + const u8 idac[] = { + 0x0d, 0x00, + 0x0c,
[media 7/8] PCIE bridge driver for PT3 & PX-Q3PE
le_device(pdev) || + pci_set_dma_mask(pdev, DMA_BIT_MASK(32))|| + pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)) || + pci_request_regions(pdev, name)) { + kfree(card); + return NULL; + } + pci_set_drvdata(pdev, card); + return card; +} + +int ptx_i2c_add_adapter(struct ptx_card *card, const struct i2c_algorithm *algo) +{ + struct i2c_adapter *i2c = >i2c; + + i2c->algo = algo; + i2c->dev.parent = >pdev->dev; + strcpy(i2c->name, card->name); + i2c_set_adapdata(i2c, card); + mutex_init(>lock); + return i2c_add_adapter(i2c); +} + +void ptx_unregister_subdev(struct i2c_client *c) +{ + if (!c) + return; + if (c->dev.driver) + module_put(c->dev.driver->owner); + i2c_unregister_device(c); +} + +struct i2c_client *ptx_register_subdev(struct i2c_adapter *i2c, struct dvb_frontend *fe, u16 adr, char *name) +{ + struct i2c_client *c; + struct i2c_board_info info = { + .platform_data = fe, + .addr = adr, + }; + + strlcpy(info.type, name, I2C_NAME_SIZE); + request_module("%s", info.type); + c = i2c_new_device(i2c, ); + if (!c) + return NULL; + if (c->dev.driver && try_module_get(c->dev.driver->owner)) + return c; + ptx_unregister_subdev(c); + return NULL; +} + +void ptx_unregister_fe(struct dvb_frontend *fe) +{ + if (!fe) + return; + if (fe->frontend_priv) + dvb_unregister_frontend(fe); + ptx_unregister_subdev(fe->tuner_priv); + ptx_unregister_subdev(fe->demodulator_priv); + kfree(fe); +} + +struct dvb_frontend *ptx_register_fe(struct i2c_adapter *i2c, struct dvb_adapter *dvb, const struct ptx_subdev_info *info) +{ + struct dvb_frontend *fe = kzalloc(sizeof(struct dvb_frontend), GFP_KERNEL); + + if (!fe) + return NULL; + fe->demodulator_priv= ptx_register_subdev(i2c, fe, info->demod_addr, info->demod_name); + fe->tuner_priv = ptx_register_subdev(i2c, fe, info->tuner_addr, info->tuner_name); + if (info->type) + fe->ops.delsys[0] = info->type; + if (!fe->demodulator_priv || !fe->tuner_priv || (dvb && dvb_register_frontend(dvb, fe))) { + ptx_unregister_fe(fe); + return NULL; + } + return fe; +} + +void ptx_unregister_adap(struct ptx_card *card) +{ + int i = card->adapn - 1; + struct ptx_adap *adap = card->adap + i; + + for (; i >= 0; i--, adap--) { + ptx_unregister_fe(adap->fe); + if (adap->demux.dmx.close) + adap->demux.dmx.close(>demux.dmx); + if (adap->dmxdev.filter) + dvb_dmxdev_release(>dmxdev); + if (adap->demux.cnt_storage) + dvb_dmx_release(>demux); + if (adap->dvb.name) + dvb_unregister_adapter(>dvb); + } + i2c_del_adapter(>i2c); + pci_release_regions(card->pdev); + pci_set_drvdata(card->pdev, NULL); + pci_disable_device(card->pdev); + kfree(card); +} + +DVB_DEFINE_MOD_OPT_ADAPTER_NR(adap_no); +int ptx_register_adap(struct ptx_card *card, const struct ptx_subdev_info *info, + int (*thread)(void *), int (*dma)(struct ptx_adap *, bool)) +{ + struct ptx_adap *adap; + u8 i; + int err; + + card->thread= thread; + card->dma = dma; + for (i = 0, adap = card->adap; i < card->adapn; i++, adap++) { + struct dvb_adapter *dvb= >dvb; + struct dvb_demux*demux = >demux; + struct dmxdev *dmxdev = >dmxdev; + + if (dvb_register_adapter(dvb, card->name, THIS_MODULE, >pdev->dev, adap_no) < 0) + return -ENFILE; + demux->dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING; + demux->feednum = 1; + demux->filternum= 1; + demux->start_feed = ptx_start_feed; + demux->stop_feed= ptx_stop_feed; + if (dvb_dmx_init(demux) < 0) + return -ENOMEM; + dmxdev->filternum = 1; + dmxdev->demux = >dmx; + err = dvb_dmxdev_init(dmxdev, dvb); + if (err) + return err; + adap->fe= ptx_register_fe(>car