Skip to content

Commit

Permalink
media-tv/v4l-dvb-saa716x: fix compile with kernel >=5.6
Browse files Browse the repository at this point in the history
Package-Manager: Portage-3.0.9, Repoman-3.0.1
Signed-off-by: Martin Dummer <[email protected]>
Closes: gentoo#17767
Signed-off-by: Joonas Niilola <[email protected]>
  • Loading branch information
madmartin authored and juippis committed Nov 10, 2020
1 parent e29efa4 commit 97e385e
Show file tree
Hide file tree
Showing 6 changed files with 628 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
diff -Naur powARman-v4l-dvb-saa716x-83f3bfd93a95.orig/linux/drivers/media/common/saa716x/saa716x_ff_phi.c powARman-v4l-dvb-saa716x-83f3bfd93a95/linux/drivers/media/common/saa716x/saa716x_ff_phi.c
--- powARman-v4l-dvb-saa716x-83f3bfd93a95.orig/linux/drivers/media/common/saa716x/saa716x_ff_phi.c 2015-12-29 19:40:55.000000000 +0100
+++ powARman-v4l-dvb-saa716x-83f3bfd93a95/linux/drivers/media/common/saa716x/saa716x_ff_phi.c 2020-10-04 11:40:59.830329660 +0200
@@ -41,7 +41,7 @@
}

/* skip first PHI window as it is already mapped */
- sti7109->mmio_uc = ioremap_nocache(phi1_start + 0x10000, 0x30000);
+ sti7109->mmio_uc = ioremap(phi1_start + 0x10000, 0x30000);
if (!sti7109->mmio_uc) {
dprintk(SAA716x_ERROR, 1, "Mem PHI1 remap failed");
err = -ENODEV;
diff -Naur powARman-v4l-dvb-saa716x-83f3bfd93a95.orig/linux/drivers/media/common/saa716x/saa716x_pci.c powARman-v4l-dvb-saa716x-83f3bfd93a95/linux/drivers/media/common/saa716x/saa716x_pci.c
--- powARman-v4l-dvb-saa716x-83f3bfd93a95.orig/linux/drivers/media/common/saa716x/saa716x_pci.c 2020-10-04 11:38:55.811653278 +0200
+++ powARman-v4l-dvb-saa716x-83f3bfd93a95/linux/drivers/media/common/saa716x/saa716x_pci.c 2020-10-04 11:40:34.557784199 +0200
@@ -185,7 +185,7 @@
goto fail2;
}

- saa716x->mmio = ioremap_nocache(pci_resource_start(pdev, 0), 0x30000);
+ saa716x->mmio = ioremap(pci_resource_start(pdev, 0), 0x30000);
if (!saa716x->mmio) {
dprintk(SAA716x_ERROR, 1, "Mem 0 remap failed");
ret = -ENODEV;
diff -Naur powARman-v4l-dvb-saa716x-83f3bfd93a95.orig/v4l/compat.h powARman-v4l-dvb-saa716x-83f3bfd93a95/v4l/compat.h
--- powARman-v4l-dvb-saa716x-83f3bfd93a95.orig/v4l/compat.h 2015-12-29 19:40:55.000000000 +0100
+++ powARman-v4l-dvb-saa716x-83f3bfd93a95/v4l/compat.h 2020-10-04 11:41:58.379593434 +0200
@@ -571,8 +571,8 @@

#ifdef NEED_PCI_IOREMAP_BAR
#define pci_ioremap_bar(pdev, bar) \
- ioremap_nocache(pci_resource_start(pdev, bar), \
- pci_resource_len(pdev, bar))
+ ioremap(pci_resource_start(pdev, bar), \
+ pci_resource_len(pdev, bar))
#endif

#ifdef NEED_POLL_SCHEDULE
32 changes: 32 additions & 0 deletions media-tv/v4l-dvb-saa716x/files/v4l-dvb-saa716x-up-to-4.14.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# file v4l-dvb-saa716x-4.10-fix-compile.patch
--- a/linux/drivers/media/common/saa716x/saa716x_ff.h
+++ b/linux/drivers/media/common/saa716x/saa716x_ff.h
@@ -1,7 +1,6 @@
#ifndef __SAA716x_FF_H
#define __SAA716x_FF_H

-#include "dvb_filter.h"
#include "dvb_ringbuffer.h"
#include <linux/version.h>
#include <linux/workqueue.h>
@@ -95,6 +94,7 @@
#define MAX_RESULT_LEN 256
#define MAX_DATA_LEN (1024 * 1024)

+#define TS_SIZE 188
#define TSOUT_LEN (1024 * TS_SIZE)
#define TSOUT_LEVEL_FILL (350 * TS_SIZE)
#define TSOUT_LEVEL_HIGH (30 * TS_SIZE)

# file v4l-dvb-saa716x-4.14.0-fix-compile.patch
--- a/linux/drivers/media/common/saa716x/saa716x_pci.c 2018-03-24 11:39:20.777643694 +0100
+++ b/linux/drivers/media/common/saa716x/saa716x_pci.c 2018-03-24 11:41:02.135696671 +0100
@@ -39,7 +39,7 @@
for (i = 0; i < SAA716x_MSI_MAX_VECTORS; i++)
saa716x->msix_entries[i].entry = i;

- ret = pci_enable_msix(pdev, saa716x->msix_entries, SAA716x_MSI_MAX_VECTORS);
+ ret = pci_enable_msix_range(pdev, saa716x->msix_entries, SAA716x_MSI_MAX_VECTORS, SAA716x_MSI_MAX_VECTORS);
if (ret < 0)
dprintk(SAA716x_ERROR, 1, "MSI-X request failed <%d>", ret);
if (ret > 0)
217 changes: 217 additions & 0 deletions media-tv/v4l-dvb-saa716x/files/v4l-dvb-saa716x-up-to-4.17.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
# file v4l-dvb-saa716x-4.15-fix-autorepeat.patch

# Source: https://github.com/s-moch/linux-saa716x/commit/0b2276ee2e6383ad577fce5c694f8c4062d5334b.patch

From 0b2276ee2e6383ad577fce5c694f8c4062d5334b Mon Sep 17 00:00:00 2001
From: Soeren Moch <[email protected]>
Date: Sat, 2 Dec 2017 20:51:10 +0100
Subject: [PATCH] saa716x_ff: Remove autorepeat handling

Let the input layer handle autorepeat for the IR remote.
So no repeat_key timer is required anymore.

Signed-off-by: Soeren Moch <[email protected]>
---
drivers/media/common/saa716x/saa716x_ff_ir.c | 45 ++++++++--------------------
1 file changed, 12 insertions(+), 33 deletions(-)

diff --git a/drivers/media/common/saa716x/saa716x_ff_ir.c b/drivers/media/common/saa716x/saa716x_ff_ir.c
index 35624789aa862..ad6f38611026c 100644
--- a/linux/drivers/media/common/saa716x/saa716x_ff_ir.c
+++ b/linux/drivers/media/common/saa716x/saa716x_ff_ir.c
@@ -40,7 +40,7 @@ struct infrared {
u8 protocol;
u16 last_key;
u16 last_toggle;
- bool delay_timer_finished;
+ bool key_pressed;
};

#define IR_RC5 0
@@ -52,11 +52,12 @@ static void ir_emit_keyup(unsigned long parm)
{
struct infrared *ir = (struct infrared *) parm;

- if (!ir || !test_bit(ir->last_key, ir->input_dev->key))
+ if (!ir || !ir->key_pressed)
return;

input_report_key(ir->input_dev, ir->last_key, 0);
input_sync(ir->input_dev);
+ ir->key_pressed = false;
}


@@ -114,28 +115,18 @@ static void ir_emit_key(unsigned long parm)
return;
}

- if (timer_pending(&ir->keyup_timer)) {
- del_timer(&ir->keyup_timer);
- if (ir->last_key != keycode || toggle != ir->last_toggle) {
- ir->delay_timer_finished = false;
- input_event(ir->input_dev, EV_KEY, ir->last_key, 0);
- input_event(ir->input_dev, EV_KEY, keycode, 1);
- input_sync(ir->input_dev);
- } else if (ir->delay_timer_finished) {
- input_event(ir->input_dev, EV_KEY, keycode, 2);
- input_sync(ir->input_dev);
- }
- } else {
- ir->delay_timer_finished = false;
- input_event(ir->input_dev, EV_KEY, keycode, 1);
- input_sync(ir->input_dev);
- }
+ if (ir->key_pressed &&
+ (ir->last_key != keycode || toggle != ir->last_toggle))
+ input_event(ir->input_dev, EV_KEY, ir->last_key, 0);

+ input_event(ir->input_dev, EV_KEY, keycode, 1);
+ input_sync(ir->input_dev);
+
+ ir->key_pressed = true;
ir->last_key = keycode;
ir->last_toggle = toggle;

- ir->keyup_timer.expires = jiffies + UP_TIMEOUT;
- add_timer(&ir->keyup_timer);
+ mod_timer(&ir->keyup_timer, jiffies + UP_TIMEOUT);

}

@@ -166,16 +157,6 @@ static void ir_register_keys(struct infrared *ir)
ir->input_dev->keycodemax = ARRAY_SIZE(ir->key_map);
}

-
-/* called by the input driver after rep[REP_DELAY] ms */
-static void ir_repeat_key(unsigned long parm)
-{
- struct infrared *ir = (struct infrared *) parm;
-
- ir->delay_timer_finished = true;
-}
-
-
/* interrupt handler */
void saa716x_ir_handler(struct saa716x_dev *saa716x, u32 ir_cmd)
{
@@ -236,9 +217,7 @@ int saa716x_ir_init(struct saa716x_dev *saa716x)
ir->key_map[i] = i+1;
ir_register_keys(ir);

- /* override repeat timer */
- input_dev->timer.function = ir_repeat_key;
- input_dev->timer.data = (unsigned long) ir;
+ input_enable_softrepeat(input_dev, 800, 200);

tasklet_init(&ir->tasklet, ir_emit_key, (unsigned long) saa716x);
saa716x->ir_priv = ir;

# file v4l-dvb-saa716x-4.15-fix-timers.patch
# Source: https://github.com/s-moch/linux-saa716x/commit/1002d79c4ba60de0dbeacba0f289119556d7450d.patch

From 1002d79c4ba60de0dbeacba0f289119556d7450d Mon Sep 17 00:00:00 2001
From: Soeren Moch <[email protected]>
Date: Sat, 2 Dec 2017 21:23:34 +0100
Subject: [PATCH] saa716x_ff: Convert to new timer API

Convert to new timer API in linux-4.15.

Signed-off-by: Soeren Moch <[email protected]>
---
drivers/media/common/saa716x/saa716x_ff_ir.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/media/common/saa716x/saa716x_ff_ir.c b/drivers/media/common/saa716x/saa716x_ff_ir.c
index ad6f38611026c..7894adff4d4f6 100644
--- a/linux/drivers/media/common/saa716x/saa716x_ff_ir.c
+++ b/linux/drivers/media/common/saa716x/saa716x_ff_ir.c
@@ -48,9 +48,9 @@ struct infrared {


/* key-up timer */
-static void ir_emit_keyup(unsigned long parm)
+static void ir_emit_keyup(struct timer_list *t)
{
- struct infrared *ir = (struct infrared *) parm;
+ struct infrared *ir = from_timer(ir, t, keyup_timer);

if (!ir || !ir->key_pressed)
return;
@@ -184,9 +184,7 @@ int saa716x_ir_init(struct saa716x_dev *saa716x)
if (!ir)
return -ENOMEM;

- init_timer(&ir->keyup_timer);
- ir->keyup_timer.function = ir_emit_keyup;
- ir->keyup_timer.data = (unsigned long) ir;
+ timer_setup(&ir->keyup_timer, ir_emit_keyup, 0);

input_dev = input_allocate_device();
if (!input_dev)

# file v4l-dvb-saa716x-4.16-fix-compile.patch
diff -Naur powARman-v4l-dvb-saa716x-3b9fce66666a.orig/linux/drivers/media/common/saa716x/saa716x_adap.c powARman-v4l-dvb-saa716x-3b9fce66666a/linux/drivers/media/common/saa716x/saa716x_adap.c
--- powARman-v4l-dvb-saa716x-3b9fce66666a.orig/linux/drivers/media/common/saa716x/saa716x_adap.c 2018-04-04 08:24:59.454708009 +0200
+++ powARman-v4l-dvb-saa716x-3b9fce66666a/linux/drivers/media/common/saa716x/saa716x_adap.c 2018-04-04 08:25:36.263560559 +0200
@@ -1,9 +1,9 @@
#include <linux/bitops.h>

-#include "dmxdev.h"
-#include "dvbdev.h"
-#include "dvb_demux.h"
-#include "dvb_frontend.h"
+#include <media/dmxdev.h>
+#include <media/dvbdev.h>
+#include <media/dvb_demux.h>
+#include <media/dvb_frontend.h>

#include "saa716x_mod.h"
#include "saa716x_spi.h"
diff -Naur powARman-v4l-dvb-saa716x-3b9fce66666a.orig/linux/drivers/media/common/saa716x/saa716x_ff.h powARman-v4l-dvb-saa716x-3b9fce66666a/linux/drivers/media/common/saa716x/saa716x_ff.h
--- powARman-v4l-dvb-saa716x-3b9fce66666a.orig/linux/drivers/media/common/saa716x/saa716x_ff.h 2018-04-04 08:24:59.458708101 +0200
+++ powARman-v4l-dvb-saa716x-3b9fce66666a/linux/drivers/media/common/saa716x/saa716x_ff.h 2018-04-04 08:25:36.263560559 +0200
@@ -1,7 +1,7 @@
#ifndef __SAA716x_FF_H
#define __SAA716x_FF_H

-#include "dvb_ringbuffer.h"
+#include <media/dvb_ringbuffer.h>
#include <linux/version.h>
#include <linux/workqueue.h>

diff -Naur powARman-v4l-dvb-saa716x-3b9fce66666a.orig/linux/drivers/media/common/saa716x/saa716x_priv.h powARman-v4l-dvb-saa716x-3b9fce66666a/linux/drivers/media/common/saa716x/saa716x_priv.h
--- powARman-v4l-dvb-saa716x-3b9fce66666a.orig/linux/drivers/media/common/saa716x/saa716x_priv.h 2018-04-04 08:24:59.458708101 +0200
+++ powARman-v4l-dvb-saa716x-3b9fce66666a/linux/drivers/media/common/saa716x/saa716x_priv.h 2018-04-04 08:25:36.263560559 +0200
@@ -18,11 +18,11 @@
#include "saa716x_spi.h"
#include "saa716x_vip.h"

-#include "dvbdev.h"
-#include "dvb_demux.h"
-#include "dmxdev.h"
-#include "dvb_frontend.h"
-#include "dvb_net.h"
+#include <media/dvbdev.h>
+#include <media/dvb_demux.h>
+#include <media/dmxdev.h>
+#include <media/dvb_frontend.h>
+#include <media/dvb_net.h>

#define SAA716x_ERROR 0
#define SAA716x_NOTICE 1

# file v4l-dvb-saa716x-4.17-define-AUDIO_GET_PTS.patch
--- a/linux/drivers/media/common/saa716x/saa716x_ff.h 2018-11-08 15:44:10.479886225 +0100
+++ b/linux/drivers/media/common/saa716x/saa716x_ff.h 2018-11-08 15:45:19.981237523 +0100
@@ -108,6 +108,9 @@
#define VIDEO_CAPTURE_OFF 0
#define VIDEO_CAPTURE_ONE_SHOT 1

+#ifndef AUDIO_GET_PTS
+#define AUDIO_GET_PTS _IOR('o', 19, __u64)
+#endif

/* place to store all the necessary device information */
struct sti7109_dev {
97 changes: 97 additions & 0 deletions media-tv/v4l-dvb-saa716x/files/v4l-dvb-saa716x-up-to-4.4.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# file OSD_RAW_CMD_patch_2.diff
--- a/linux/drivers/media/common/saa716x/saa716x_ff_cmd.h.orig 2011-11-12 14:46:51.175700236 +0100
+++ b/linux/drivers/media/common/saa716x/saa716x_ff_cmd.h 2011-11-12 14:45:10.103702959 +0100
@@ -1,6 +1,24 @@
#ifndef __SAA716x_FF_CMD_H
#define __SAA716x_FF_CMD_H

+#if !defined OSD_RAW_CMD
+typedef struct osd_raw_cmd_s {
+ const void *cmd_data;
+ int cmd_len;
+ void *result_data;
+ int result_len;
+} osd_raw_cmd_t;
+
+typedef struct osd_raw_data_s {
+ const void *data_buffer;
+ int data_length;
+ int data_handle;
+} osd_raw_data_t;
+
+#define OSD_RAW_CMD _IOWR('o', 162, osd_raw_cmd_t)
+#define OSD_RAW_DATA _IOWR('o', 163, osd_raw_data_t)
+#endif
+
extern int sti7109_cmd_init(struct sti7109_dev *sti7109);
extern int sti7109_raw_cmd(struct sti7109_dev * sti7109,
osd_raw_cmd_t * cmd);

# file v4l-dvb-saa716x-Makefilepatch-2.diff
--- v4l-dvb-saa716x-cfa4b4faab67/linux/drivers/media/common/saa716x/Makefile.orig 2013-03-02 07:44:51.112642592 +0100
+++ v4l-dvb-saa716x-cfa4b4faab67/linux/drivers/media/common/saa716x/Makefile 2013-03-02 07:46:56.703138542 +0100
@@ -24,3 +24,5 @@
obj-$(CONFIG_DVB_SAA716X_FF) += saa716x_ff.o

EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ -Idrivers/media/dvb/frontends/ -Idrivers/media/dvb-core/ -Idrivers/media/dvb-frontends/
+EXTRA_CFLAGS += -Idrivers/media/common/tuners/ # up to kernel 3.6
+EXTRA_CFLAGS += -Idrivers/media/tuners/ # kernel 3.7+


# file v4l-dvb-saa716x-3.19-set_gpio.patch
--- a/linux/drivers/media/common/saa716x/saa716x_budget.c 2014-11-09 15:44:55.000000000 +0100
+++ b/linux/drivers/media/common/saa716x/saa716x_budget.c 2015-02-28 13:58:01.258743639 +0100
@@ -497,10 +497,10 @@
break;
}

- err = stv090x_set_gpio(fe, 2, 0, en, 0);
+ err = skystar2_stv090x_config.set_gpio(fe, 2, 0, en, 0);
if (err < 0)
goto exit;
- err = stv090x_set_gpio(fe, 3, 0, sel, 0);
+ err = skystar2_stv090x_config.set_gpio(fe, 3, 0, sel, 0);
if (err < 0)
goto exit;

@@ -519,7 +519,7 @@
else
value = 0;

- err = stv090x_set_gpio(fe, 4, 0, value, 0);
+ err = skystar2_stv090x_config.set_gpio(fe, 4, 0, value, 0);
if (err < 0)
goto exit;

# file v4l-dvb-saa716x-4.2-fix-compile.patch
--- a/linux/drivers/media/common/saa716x/saa716x_budget.c 2015-09-03 00:30:08.662553247 +0200
+++ b/linux/drivers/media/common/saa716x/saa716x_budget.c 2015-09-03 00:31:03.899206845 +0200
@@ -306,7 +306,7 @@
#define SAA716x_MODEL_TWINHAN_VP1028 "Twinhan/Azurewave VP-1028"
#define SAA716x_DEV_TWINHAN_VP1028 "DVB-S"

-static int vp1028_dvbs_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+static int vp1028_dvbs_set_voltage(struct dvb_frontend *fe, enum fe_sec_voltage voltage)
{
struct saa716x_dev *saa716x = fe->dvb->priv;

--- a/linux/drivers/media/common/saa716x/saa716x_hybrid.c 2014-11-09 15:44:55.000000000 +0100
+++ b/linux/drivers/media/common/saa716x/saa716x_hybrid.c 2015-09-03 00:31:03.899206845 +0200
@@ -321,7 +321,7 @@
.request_firmware = tda1004x_vp6090_request_firmware,
};

-static int vp6090_dvbs_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
+static int vp6090_dvbs_set_voltage(struct dvb_frontend *fe, enum fe_sec_voltage voltage)
{
struct saa716x_dev *saa716x = fe->dvb->priv;

--- a/linux/drivers/media/common/saa716x/saa716x_pci.c 2014-11-09 15:44:55.000000000 +0100
+++ b/linux/drivers/media/common/saa716x/saa716x_pci.c 2015-09-03 00:31:03.900206839 +0200
@@ -1,3 +1,5 @@
+#include <asm/atomic.h>
+#include <linux/spinlock_types.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/page.h>

Loading

0 comments on commit 97e385e

Please sign in to comment.