summaryrefslogtreecommitdiff
authorChuangcheng Peng <chuangcheng.peng@amlogic.com>2020-02-25 10:10:18 (GMT)
committer Chuangcheng Peng <chuangcheng.peng@amlogic.com>2020-03-10 03:14:12 (GMT)
commit408cbeeada0c1a1f3ac91ae9ffda659f97cda562 (patch)
treefb860f6320123b02a37c4e9657833fc1074253ad
parent0548bdac0018109e546443d39b301fb7eecb82a6 (diff)
downloadmedia_modules-408cbeeada0c1a1f3ac91ae9ffda659f97cda562.zip
media_modules-408cbeeada0c1a1f3ac91ae9ffda659f97cda562.tar.gz
media_modules-408cbeeada0c1a1f3ac91ae9ffda659f97cda562.tar.bz2
demux: update 4.9 to 5.4 [1/1]
PD#SWPL-19089 Problem: support 5.4 kernel Solution: update amlogic-4.9-dev code match with 5.4 kernel Verify: verify at ac214 Change-Id: I3826523834cb6f5668fe99def3155a0b0b082fed Signed-off-by: Chuangcheng Peng <chuangcheng.peng@amlogic.com>
Diffstat
-rw-r--r--drivers/stream_input/Makefile7
-rw-r--r--drivers/stream_input/parser/demux/Makefile2
-rw-r--r--drivers/stream_input/parser/demux/aml_dmx.c12
-rw-r--r--drivers/stream_input/parser/demux/aml_dmx.h2
-rw-r--r--drivers/stream_input/parser/demux/aml_dsc.c12
-rw-r--r--drivers/stream_input/parser/demux/aml_dsc.h1
-rw-r--r--drivers/stream_input/parser/demux/aml_dvb.c76
-rw-r--r--drivers/stream_input/parser/demux/aml_dvb.h1
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/asyncfifo.c9
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/frontend.c4
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/hwdemux.c26
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/hwdemux.h5
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/s2p.h16
-rwxr-xr-xdrivers/stream_input/parser/demux/sw_demux/dvbcsa2/Makefile.bak13
-rw-r--r--drivers/stream_input/parser/dvb_ci/Makefile3
-rw-r--r--drivers/stream_input/parser/dvb_ci/aml_ci.c15
-rw-r--r--drivers/stream_input/parser/dvb_ci/aml_spi.c54
-rw-r--r--drivers/stream_input/parser/dvb_ci/aml_spi.h4
-rw-r--r--drivers/stream_input/parser/dvb_ci/cimax/aml_cimax_usb.c57
-rw-r--r--drivers/stream_input/parser/dvb_ci/cimax/dvb_ca_en50221_cimax.c1
-rw-r--r--drivers/stream_input/parser/dvb_ci/cimax/dvb_ringbuffer.c6
-rw-r--r--drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.c17
-rw-r--r--drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.h3
-rw-r--r--drivers/stream_input/parser/dvb_ci/cimcu/dvb_ca_en50221_cimcu.c1
-rw-r--r--drivers/stream_input/parser/dvb_common.h49
-rw-r--r--drivers/stream_input/parser/hw_demux/Makefile2
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dmx.c151
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb.c528
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb.h30
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb_reg.h6
-rw-r--r--drivers/stream_input/parser/hw_demux/c_stb_regs_define.h2
31 files changed, 662 insertions, 453 deletions
diff --git a/drivers/stream_input/Makefile b/drivers/stream_input/Makefile
index 73dfd13..1262e96 100644
--- a/drivers/stream_input/Makefile
+++ b/drivers/stream_input/Makefile
@@ -10,7 +10,14 @@ stream_input-objs += parser/psparser.o
stream_input-objs += parser/rmparser.o
stream_input-objs += subtitle/subtitle.o
+stream_input-objs += parser/dvb_common.o
obj-$(CONFIG_AMLOGIC_DVB) += parser/hw_demux/
+obj-$(CONFIG_AMLOGIC_DVB) += parser/demux/
+obj-$(CONFIG_AMLOGIC_DVB) += parser/dvb_ci/
+
+ccflags-y += -I.
+ccflags-y += -I$(srctree)/include/media
+
#obj-y += tv_frontend/
# obj-y += box-frontend/avl6211/
# obj-y += box-frontend/atbm8881/
diff --git a/drivers/stream_input/parser/demux/Makefile b/drivers/stream_input/parser/demux/Makefile
index c0df578..1796d5b 100644
--- a/drivers/stream_input/parser/demux/Makefile
+++ b/drivers/stream_input/parser/demux/Makefile
@@ -1,6 +1,6 @@
obj-m += aml_swdmx.o
-ccflags-y += -I$(srctree)/drivers/media/dvb-core -I$(srctree)/drivers/gpio -I$(srctree)/include
+ccflags-y += -I$(srctree)/include/media -I$(srctree)/drivers/media/pci/ttpci -I$(srctree)/drivers/gpio -I$(srctree)/include
aml_swdmx-objs += aml_dvb.o
aml_swdmx-objs += aml_dsc.o
diff --git a/drivers/stream_input/parser/demux/aml_dmx.c b/drivers/stream_input/parser/demux/aml_dmx.c
index a5aa41d..cb9e541 100644
--- a/drivers/stream_input/parser/demux/aml_dmx.c
+++ b/drivers/stream_input/parser/demux/aml_dmx.c
@@ -41,7 +41,7 @@
#include <linux/crc32.h>
#include <asm/uaccess.h>
#include <asm/div64.h>
-
+#include <linux/sched/signal.h>
//#include "aml_dvb.h"
#include "aml_dmx.h"
#include "aml_dmx_ext.h"
@@ -223,7 +223,7 @@ static void _ts_pkt_cb (SWDMX_TsPacket *pkt, SWDMX_Ptr data)
return ;
}
if (ts_feed->ts_cb) {
- ts_feed->ts_cb(pkt->packet,pkt->packet_len,NULL,0,source_feed);
+ ts_feed->ts_cb(pkt->packet,pkt->packet_len,NULL,0,source_feed,0);
}
}
static void _sec_cb (SWDMX_UInt8 *sec, SWDMX_Int len, SWDMX_Ptr data)
@@ -238,13 +238,12 @@ static void _sec_cb (SWDMX_UInt8 *sec, SWDMX_Int len, SWDMX_Ptr data)
}
if (sec_feed->sec_cb) {
- sec_feed->sec_cb(sec,len,NULL, 0,source_filter);
+ sec_feed->sec_cb(sec,len,NULL, 0,source_filter,0);
}
}
static int _dmx_ts_feed_set(struct dmx_ts_feed *ts_feed, u16 pid, int ts_type,
- enum dmx_ts_pes pes_type,
- size_t circular_buffer_size, ktime_t timeout)
+ enum dmx_ts_pes pes_type, ktime_t timeout)
{
struct sw_demux_ts_feed *feed = (struct sw_demux_ts_feed *)ts_feed;
struct aml_dmx *demux = (struct aml_dmx *)ts_feed->parent->priv;
@@ -391,8 +390,7 @@ static int _dmx_section_feed_allocate_filter(struct dmx_section_feed *feed,
}
static int _dmx_section_feed_set(struct dmx_section_feed *feed,
- u16 pid, size_t circular_buffer_size,
- int check_crc)
+ u16 pid, int check_crc)
{
struct sw_demux_sec_feed *sec_feed = (struct sw_demux_sec_feed *)feed;
struct aml_dmx *demux = (struct aml_dmx *)feed->parent->priv;
diff --git a/drivers/stream_input/parser/demux/aml_dmx.h b/drivers/stream_input/parser/demux/aml_dmx.h
index 1246bc2..b75b22d 100644
--- a/drivers/stream_input/parser/demux/aml_dmx.h
+++ b/drivers/stream_input/parser/demux/aml_dmx.h
@@ -22,7 +22,7 @@
#include "sw_demux/swdemux.h"
#include "hw_demux/hwdemux.h"
-#include "demux.h"
+//#include "demux.h"
#include "dvbdev.h"
#include <dmxdev.h>
diff --git a/drivers/stream_input/parser/demux/aml_dsc.c b/drivers/stream_input/parser/demux/aml_dsc.c
index 636ceea..032c5e7 100644
--- a/drivers/stream_input/parser/demux/aml_dsc.c
+++ b/drivers/stream_input/parser/demux/aml_dsc.c
@@ -799,7 +799,7 @@ static int _dvb_dsc_open(struct inode *inode, struct file *file)
return 0;
}
-static int _dsc_set_pid(struct aml_dsc *dsc, ca_pid_t *pi) {
+static int _dsc_set_pid(struct aml_dsc *dsc, struct ca_pid *pi) {
int i;
struct DescChannel *ch;
int ret = 0;
@@ -848,7 +848,7 @@ static int _dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
_dsc_reset(dsc);
break;
case CA_GET_CAP: {
- ca_caps_t *cap = parg;
+ struct ca_caps *cap = parg;
cap->slot_num = 1;
cap->slot_type = CA_DESCR;
@@ -857,7 +857,7 @@ static int _dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
break;
}
case CA_GET_SLOT_INFO: {
- ca_slot_info_t *slot = parg;
+ struct ca_slot_info *slot = parg;
slot->num = 1;
slot->type = CA_DESCR;
@@ -865,14 +865,14 @@ static int _dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
break;
}
case CA_GET_DESCR_INFO: {
- ca_descr_info_t *descr = parg;
+ struct ca_descr_info *descr = parg;
descr->num = DSC_CHANNEL_NUM;
descr->type = 0;
break;
}
case CA_SET_DESCR: {
- ca_descr_t *d = parg;
+ struct ca_descr *d = parg;
struct ca_descr_ex dex;
dex.index = d->index;
@@ -884,7 +884,7 @@ static int _dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
break;
}
case CA_SET_PID: {
- ca_pid_t *pi = parg;
+ struct ca_pid *pi = parg;
ret = _dsc_set_pid(dsc,pi);
diff --git a/drivers/stream_input/parser/demux/aml_dsc.h b/drivers/stream_input/parser/demux/aml_dsc.h
index 14ae6fa..2b758fa 100644
--- a/drivers/stream_input/parser/demux/aml_dsc.h
+++ b/drivers/stream_input/parser/demux/aml_dsc.h
@@ -25,6 +25,7 @@
#include <dmxdev.h>
#include <linux/device.h>
#include "hw_demux/s2p.h"
+#include "../dvb_common.h"
#define SW_DSC_MODE 0
#define HW_DSC_MODE 1
diff --git a/drivers/stream_input/parser/demux/aml_dvb.c b/drivers/stream_input/parser/demux/aml_dvb.c
index 8c4df62..8ae14e5 100644
--- a/drivers/stream_input/parser/demux/aml_dvb.c
+++ b/drivers/stream_input/parser/demux/aml_dvb.c
@@ -49,9 +49,9 @@
DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
-extern ssize_t stb_show_tuner_setting(struct class *class,
+extern ssize_t tuner_setting_show(struct class *class,
struct class_attribute *attr, char *buf);
-extern ssize_t stb_store_tuner_setting(struct class *class,
+extern ssize_t tuner_setting_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t count);
@@ -67,7 +67,7 @@ typedef struct _ChainPath
static ChainPath DmxChainPath[MAX_DMXCHAINPATH_NUM];
#define DSC_MODE_FUNC_DECL(i)\
-static ssize_t dsc##i##_store_mode(struct class *class,\
+static ssize_t dsc##i##_mode_store(struct class *class,\
struct class_attribute *attr, const char *buf,size_t size) {\
if (!strncmp("sw", buf, 2)) {\
dsc_set_mode(&aml_dvb_device.dsc[i], SW_DSC_MODE);\
@@ -76,7 +76,7 @@ static ssize_t dsc##i##_store_mode(struct class *class,\
}\
return 0;\
}\
-static ssize_t dsc##i##_show_mode(struct class *class,\
+static ssize_t dsc##i##_mode_show(struct class *class,\
struct class_attribute *attr, char *buf) {\
int mode = 0;\
char *str ;\
@@ -94,7 +94,7 @@ static ssize_t dsc##i##_show_mode(struct class *class,\
}
#define DSC_PATH_FUNC_DECL(i) \
-static ssize_t dsc##i##_store_path(struct class *class,\
+static ssize_t dsc##i##_path_store(struct class *class,\
struct class_attribute *attr, const char *buf,\
size_t size) {\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -122,7 +122,7 @@ ERROR:\
pr_error("error, such as path=0,link=1");\
return 0;\
}\
-static ssize_t dsc##i##_show_path(struct class *class,\
+static ssize_t dsc##i##_path_show(struct class *class,\
struct class_attribute *attr, char *buf) {\
int n = 0;\
int dsc_id = -1;\
@@ -143,7 +143,7 @@ static ssize_t dsc##i##_show_path(struct class *class,\
}
#define CHAIN_PATH_FUNC_DECL(i)\
-ssize_t chain_path##i##_store_source(struct class *class,\
+ssize_t path##i##_source_store(struct class *class,\
struct class_attribute *attr, const char *buf,\
size_t size)\
{\
@@ -178,7 +178,7 @@ ssize_t chain_path##i##_store_source(struct class *class,\
}\
return size;\
}\
-ssize_t chain_path##i##_show_source(struct class *class,\
+ssize_t path##i##_source_show(struct class *class,\
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = aml_get_dvb_device();\
@@ -224,7 +224,7 @@ ssize_t chain_path##i##_show_source(struct class *class,\
}
#define WORK_MODE_FUNC_DECL(i)\
-ssize_t chain_path##i##_store_work_mode(struct class *class,\
+ssize_t path##i##_work_mode_store(struct class *class,\
struct class_attribute *attr, const char *buf,\
size_t size)\
{\
@@ -241,7 +241,7 @@ ssize_t chain_path##i##_store_work_mode(struct class *class,\
dmx_set_work_mode(&dvb->dmx[i], mode);\
return size;\
}\
-ssize_t chain_path##i##_show_work_mode(struct class *class,\
+ssize_t path##i##_work_mode_show(struct class *class,\
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = aml_get_dvb_device();\
@@ -269,7 +269,7 @@ ssize_t chain_path##i##_show_work_mode(struct class *class,\
}
#define PATH_BUFF_STATUS_FUNC_DECL(i)\
-ssize_t path##i##_set_buf_warning_level(struct class *class,\
+ssize_t path##i##_buf_status_store(struct class *class,\
struct class_attribute *attr, const char *buf,\
size_t size)\
{\
@@ -288,7 +288,7 @@ ssize_t path##i##_set_buf_warning_level(struct class *class,\
}\
return size;\
}\
-ssize_t path##i##_show_buf_warning_status(struct class *class,\
+ssize_t path##i##_buf_status_show(struct class *class,\
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = aml_get_dvb_device();\
@@ -333,30 +333,42 @@ WORK_MODE_FUNC_DECL(1)
PATH_BUFF_STATUS_FUNC_DECL(0)
PATH_BUFF_STATUS_FUNC_DECL(1)
-static struct class_attribute aml_dvb_class_attrs[] = {
- __ATTR(path0_source, 0664, chain_path0_show_source,
- chain_path0_store_source),
- __ATTR(path1_source, 0664, chain_path1_show_source,
- chain_path1_store_source),
- __ATTR(dsc0_mode, 0664, dsc0_show_mode,dsc0_store_mode),
- __ATTR(dsc1_mode, 0664, dsc1_show_mode,dsc1_store_mode),
- __ATTR(dsc0_path, 0664, dsc0_show_path,dsc0_store_path),
- __ATTR(dsc1_path, 0664, dsc1_show_path,dsc1_store_path),
- __ATTR(path0_work_mode, 0664, chain_path0_show_work_mode,\
- chain_path0_store_work_mode),
- __ATTR(path1_work_mode, 0664, chain_path1_show_work_mode,\
- chain_path1_store_work_mode),
- __ATTR(path0_buf_status, 0664, path0_show_buf_warning_status,\
- path0_set_buf_warning_level),
- __ATTR(path1_buf_status, 0664, path1_show_buf_warning_status,\
- path1_set_buf_warning_level),\
- __ATTR(tuner_setting, 0664, stb_show_tuner_setting, stb_store_tuner_setting),
- __ATTR_NULL
+static CLASS_ATTR_RW(path0_source);
+static CLASS_ATTR_RW(path1_source);
+static CLASS_ATTR_RW(dsc0_mode);
+static CLASS_ATTR_RW(dsc1_mode);
+static CLASS_ATTR_RW(dsc0_path);
+static CLASS_ATTR_RW(dsc1_path);
+static CLASS_ATTR_RW(path0_work_mode);
+static CLASS_ATTR_RW(path1_work_mode);
+static CLASS_ATTR_RW(path0_buf_status);
+static CLASS_ATTR_RW(path1_buf_status);
+static CLASS_ATTR_RW(tuner_setting);
+
+#define DVB_ATTR(name) &class_attr_##name.attr
+
+static struct attribute *aml_dvb_class_attrs[] = {
+ DVB_ATTR(path0_source),
+ DVB_ATTR(path1_source),
+ DVB_ATTR(dsc0_mode),
+ DVB_ATTR(dsc1_mode),
+ DVB_ATTR(dsc0_path),
+ DVB_ATTR(dsc1_path),
+ DVB_ATTR(path0_work_mode),
+ DVB_ATTR(path1_work_mode),
+ DVB_ATTR(path0_buf_status),
+ DVB_ATTR(path1_buf_status),
+ DVB_ATTR(tuner_setting),
+ NULL
};
+
+ATTRIBUTE_GROUPS(aml_dvb_class);
+
+
static struct class aml_dvb_class = {
.name = "stb",
- .class_attrs = aml_dvb_class_attrs,
+ .class_groups = aml_dvb_class_groups,
};
static void dmx_chain_path_init(void) {
diff --git a/drivers/stream_input/parser/demux/aml_dvb.h b/drivers/stream_input/parser/demux/aml_dvb.h
index 539025d..42540eb 100644
--- a/drivers/stream_input/parser/demux/aml_dvb.h
+++ b/drivers/stream_input/parser/demux/aml_dvb.h
@@ -30,7 +30,6 @@
#define DSC_DEV_COUNT 2
#define FE_DEV_COUNT 2
-
struct aml_dvb {
struct dvb_device dvb_dev;
struct dvb_adapter dvb_adapter;
diff --git a/drivers/stream_input/parser/demux/hw_demux/asyncfifo.c b/drivers/stream_input/parser/demux/hw_demux/asyncfifo.c
index 569d63c..b5033c0 100644
--- a/drivers/stream_input/parser/demux/hw_demux/asyncfifo.c
+++ b/drivers/stream_input/parser/demux/hw_demux/asyncfifo.c
@@ -304,9 +304,9 @@ loop:
}
return 0;
}
-static void timer_asyncfifo_func(unsigned long arg)
+static void timer_asyncfifo_func(struct timer_list * timer)
{
- struct aml_asyncfifo *afifo = (struct aml_asyncfifo *)arg;
+ struct aml_asyncfifo *afifo = from_timer(afifo,timer,asyncfifo_timer);
HWDMX_Demux *pdmx;
struct aml_dvb *dvb = afifo->dvb;
u32 start_addr;
@@ -425,12 +425,17 @@ static int _async_fifo_init(struct aml_asyncfifo *afifo, int initirq,
pr_error("create asyncfifo task fail\n");
}
afifo->flush_time_ms = asyncfifo_flush_time;
+
+#if 0
init_timer(&afifo->asyncfifo_timer);
afifo->asyncfifo_timer.function = timer_asyncfifo_func;
afifo->asyncfifo_timer.expires =
jiffies + msecs_to_jiffies(afifo->flush_time_ms);
afifo->asyncfifo_timer.data = (unsigned long)afifo;
add_timer(&afifo->asyncfifo_timer);
+#endif
+
+ timer_setup(&afifo->asyncfifo_timer, timer_asyncfifo_func,0);
/*alloc buffer*/
ret = _asyncfifo_set_buffer(afifo, buf_len, buf);
diff --git a/drivers/stream_input/parser/demux/hw_demux/frontend.c b/drivers/stream_input/parser/demux/hw_demux/frontend.c
index e648c4d..0e0e978 100644
--- a/drivers/stream_input/parser/demux/hw_demux/frontend.c
+++ b/drivers/stream_input/parser/demux/hw_demux/frontend.c
@@ -57,7 +57,7 @@ static enum dtv_demod_type s_demod_type[FE_DEV_COUNT] = {AM_DTV_DEMOD_NONE, AM_D
static enum tuner_type s_tuner_type[FE_DEV_COUNT] = {AM_TUNER_NONE, AM_TUNER_NONE};
-ssize_t stb_show_tuner_setting(struct class *class,
+ssize_t tuner_setting_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = aml_get_dvb_device();
@@ -71,7 +71,7 @@ ssize_t stb_show_tuner_setting(struct class *class,
return 0;
}
-ssize_t stb_store_tuner_setting(struct class *class,
+ssize_t tuner_setting_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t count)
{
diff --git a/drivers/stream_input/parser/demux/hw_demux/hwdemux.c b/drivers/stream_input/parser/demux/hw_demux/hwdemux.c
index 1577cb3..1871939 100644
--- a/drivers/stream_input/parser/demux/hw_demux/hwdemux.c
+++ b/drivers/stream_input/parser/demux/hw_demux/hwdemux.c
@@ -40,7 +40,7 @@
#include <linux/poll.h>
#include <linux/crc32.h>
#include <linux/clk.h>
-
+#include <linux/of_irq.h>
#include <asm/uaccess.h>
#include <asm/div64.h>
@@ -1012,8 +1012,8 @@ int hwdmx_probe(struct platform_device *pdev){
u32 value;
int i = 0;
int ret = 0;
- struct resource *res;
struct aml_dvb *advb = aml_get_dvb_device();
+ struct device_node *node_dmx = NULL;
_hwdmx_get_base_addr(pdev);
@@ -1028,14 +1028,20 @@ int hwdmx_probe(struct platform_device *pdev){
pr_inf("%s: 0x%x\n", buf, value);
advb->ts_out_invert = value;
}
- for (i = 0; i < DEMUX_COUNT; i++) {
- Demux[i].dmx_irq = -1;
- snprintf(buf, sizeof(buf), "demux%d_irq", i);
- res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, buf);
- if (res)
- Demux[i].dmx_irq = res->start;
-
- pr_error("%s irq num:%d \r\n", buf, Demux[i].dmx_irq);
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "dmx");
+ node_dmx = of_parse_phandle(advb->pdev->dev.of_node, buf, 0);
+ if (node_dmx) {
+ for (i = 0; i < DEMUX_COUNT; i++) {
+ Demux[i].dmx_irq = -1;
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "demux%d_irq", i);
+ ret = of_irq_get_byname(node_dmx, buf);
+ if (ret > 0)
+ Demux[i].dmx_irq = ret;
+
+ pr_error("%s irq num:%d \r\n", buf, Demux[i].dmx_irq);
+ }
}
frontend_probe(pdev);
s2p_probe(pdev);
diff --git a/drivers/stream_input/parser/demux/hw_demux/hwdemux.h b/drivers/stream_input/parser/demux/hw_demux/hwdemux.h
index da2e6c7..6cfe83f 100644
--- a/drivers/stream_input/parser/demux/hw_demux/hwdemux.h
+++ b/drivers/stream_input/parser/demux/hw_demux/hwdemux.h
@@ -20,14 +20,15 @@
#ifndef _AML_HWDMX_H_
#define _AML_HWDMX_H_
#include <linux/dvb/dmx.h>
-
+#include "../../dvb_common.h"
+#if 0
enum aml_dmx_id_t {
AM_DMX_0 = 0,
AM_DMX_1,
AM_DMX_2,
AM_DMX_MAX,
};
-
+#endif
typedef struct HWDMX_Demux_s HWDMX_Demux;
typedef struct HWDMX_Chan_s HWDMX_Chan;
typedef int (*HWDMX_Cb)(char *buf, int count, void *udata);
diff --git a/drivers/stream_input/parser/demux/hw_demux/s2p.h b/drivers/stream_input/parser/demux/hw_demux/s2p.h
index a5e8e8e..d671e1f 100644
--- a/drivers/stream_input/parser/demux/hw_demux/s2p.h
+++ b/drivers/stream_input/parser/demux/hw_demux/s2p.h
@@ -20,22 +20,6 @@
#ifndef _S2P_H_
#define _S2P_H_
-enum aml_ts_source_t {
- AM_TS_SRC_TS0,
- AM_TS_SRC_TS1,
- AM_TS_SRC_TS2,
- AM_TS_SRC_TS3,
-
- AM_TS_SRC_S_TS0,
- AM_TS_SRC_S_TS1,
- AM_TS_SRC_S_TS2,
-
- AM_TS_SRC_HIU,
- AM_TS_SRC_DMX0,
- AM_TS_SRC_DMX1,
- AM_TS_SRC_DMX2
-};
-
enum{
AM_TS_DISABLE,
AM_TS_PARALLEL,
diff --git a/drivers/stream_input/parser/demux/sw_demux/dvbcsa2/Makefile.bak b/drivers/stream_input/parser/demux/sw_demux/dvbcsa2/Makefile.bak
deleted file mode 100755
index 6603c63..0000000
--- a/drivers/stream_input/parser/demux/sw_demux/dvbcsa2/Makefile.bak
+++ b/dev/null
@@ -1,13 +0,0 @@
-#
-# AMLOGIC sw demux driver
-#
-
-obj-$(AMLOGIC_SWDEMUX_DVBCSA) += dvbcsa_bs_algo.o \
- dvbcsa_algo.o \
- dvbcsa_block.o \
- dvbcsa_bs_block.o \
- dvbcsa_bs_key.o \
- dvbcsa_bs_stream.o \
- dvbcsa_bs_transpose.o \
- dvbcsa_key.o \
- dvbcsa_stream.o
diff --git a/drivers/stream_input/parser/dvb_ci/Makefile b/drivers/stream_input/parser/dvb_ci/Makefile
index 25cdcb9..ac411fd 100644
--- a/drivers/stream_input/parser/dvb_ci/Makefile
+++ b/drivers/stream_input/parser/dvb_ci/Makefile
@@ -5,6 +5,7 @@ ci-objs = $(amlci-objs) $(cimcu-objs) $(cimax-objs)
amlci-objs = aml_pcmcia.o aml_ci.o aml_spi.o
cimcu-objs = cimcu/dvb_ca_en50221_cimcu.o
cimax-objs = cimax/dvb_ca_en50221_cimax.o cimax/aml_cimax.o cimax/dvb_ringbuffer.o
+KBUILD_CFLAGS += -Wno-implicit-fallthrough
cimax-usb-objs += cimax/usb/SRC/cimax+usb-driver.o cimax/usb/SRC/cimax+usb_fw.o
cimax-usb-objs += cimax/usb/SRC/cimax+usb_config.o
cimax-objs += cimax/aml_cimax_usb.o
@@ -13,4 +14,6 @@ ccflags-y += -I$(srctree)/
ccflags-y += -I$(srctree)/include
ccflags-y += -I$(srctree)/drivers/gpio
ccflags-y += -I$(srctree)/drivers/media/dvb-core
+ccflags-y += -I$(srctree)/include/media
+ccflags-y += -I$(srctree)/drivers/media/pci/ttpci
diff --git a/drivers/stream_input/parser/dvb_ci/aml_ci.c b/drivers/stream_input/parser/dvb_ci/aml_ci.c
index d457a05..ada77f6 100644
--- a/drivers/stream_input/parser/dvb_ci/aml_ci.c
+++ b/drivers/stream_input/parser/dvb_ci/aml_ci.c
@@ -26,6 +26,8 @@
#include <linux/device.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
+#include <linux/sysfs.h>
+#include <linux/of.h>
#include "aml_ci.h"
#include "aml_spi.h"
#include "cimax/aml_cimax.h"
@@ -621,19 +623,22 @@ void aml_ci_exit(struct aml_ci *ci)
static struct aml_ci *ci_dev;
-static ssize_t aml_ci_ts_show(struct class *class,
+static ssize_t ts_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
ret = sprintf(buf, "ts%d\n", 1);
return ret;
}
+static CLASS_ATTR_RO(ts);
-static struct class_attribute amlci_class_attrs[] = {
- __ATTR(ts, S_IRUGO | S_IWUSR, aml_ci_ts_show, NULL),
- __ATTR_NULL
+static struct attribute *aml_ci_attrs[] = {
+ &class_attr_ts.attr,
+ NULL
};
+ATTRIBUTE_GROUPS(aml_ci);
+
static int aml_ci_register_class(struct aml_ci *ci)
{
#define CLASS_NAME_LEN 48
@@ -648,7 +653,7 @@ static int aml_ci_register_class(struct aml_ci *ci)
snprintf((char *)clp->name, CLASS_NAME_LEN, "amlci-%d", ci->id);
clp->owner = THIS_MODULE;
- clp->class_attrs = amlci_class_attrs;
+ clp->class_groups = aml_ci_groups;
ret = class_register(clp);
if (ret)
kfree(clp->name);
diff --git a/drivers/stream_input/parser/dvb_ci/aml_spi.c b/drivers/stream_input/parser/dvb_ci/aml_spi.c
index 49498fa..b9defc5 100644
--- a/drivers/stream_input/parser/dvb_ci/aml_spi.c
+++ b/drivers/stream_input/parser/dvb_ci/aml_spi.c
@@ -31,7 +31,8 @@
#include <linux/gpio/consumer.h>
#include <linux/device.h>
#include <linux/slab.h>
-#include <linux/amlogic/sd.h>
+//#include <linux/amlogic/sd.h>
+#include <linux/mmc/sd.h>
#include <linux/of_irq.h>
#include <linux/irq.h>
#include "aml_spi.h"
@@ -933,8 +934,8 @@ static int aml_spi_get_config_from_dts(struct aml_spi *spi_dev)
spi_dev->irq = irq_of_parse_and_map(
pdev->dev.of_node, 0);
AML_CI_GPIO_IRQ_BASE = spi_dev->irq - val;
- pr_dbg("get spi irq : %d 0:%d USEDBASE:%d val:%d\r\n",
- spi_dev->irq, INT_GPIO_0, AML_CI_GPIO_IRQ_BASE, val);
+ pr_dbg("get spi irq : %d USEDBASE:%d val:%d\r\n",
+ spi_dev->irq, AML_CI_GPIO_IRQ_BASE, val);
/*get reset pwd cd1 cd2 gpio pin*/
spi_dev->reset_pin = NULL;
ret = spi_get_gpio_by_name(spi_dev, &spi_dev->reset_pin,
@@ -1646,7 +1647,7 @@ pr_error("Skipping unknown tupletype:0x%x L:0x%x\n",
return 0;
}
-static ssize_t aml_spi_ci_reset_help(struct class *class,
+static ssize_t reset_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
@@ -1654,7 +1655,7 @@ struct class_attribute *attr, char *buf)
return ret;
}
-static ssize_t aml_spi_ci_reset(struct class *class,
+static ssize_t reset_store(struct class *class,
struct class_attribute *attr, const char *buf, size_t size)
{
int ret;
@@ -1663,7 +1664,7 @@ struct class_attribute *attr, const char *buf, size_t size)
return size;
}
-static ssize_t aml_spi_ci_pwr_help(struct class *class,
+static ssize_t pwr_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
@@ -1671,7 +1672,7 @@ struct class_attribute *attr, char *buf)
return ret;
}
-static ssize_t aml_spi_ci_pwr(struct class *class,
+static ssize_t pwr_store(struct class *class,
struct class_attribute *attr, const char *buf, size_t size)
{
int ret = 0;
@@ -1682,7 +1683,7 @@ struct class_attribute *attr, const char *buf, size_t size)
ret = aml_gio_power(&g_spi_dev->pc, enable);
return size;
}
-static ssize_t aml_spi_ci_state_show(struct class *class,
+static ssize_t status_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
@@ -1692,7 +1693,7 @@ struct class_attribute *attr, char *buf)
return ret;
}
-static ssize_t aml_spi_ci_irq_show(struct class *class,
+static ssize_t irq_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
@@ -1701,7 +1702,7 @@ struct class_attribute *attr, char *buf)
return ret;
}
-static ssize_t aml_spi_io_test_help(struct class *class,
+static ssize_t iotest_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
@@ -1710,7 +1711,7 @@ struct class_attribute *attr, char *buf)
return ret;
}
-static ssize_t aml_spi_io_test(struct class *class,
+static ssize_t iotest_store(struct class *class,
struct class_attribute *attr, const char *buf, size_t size)
{
int n = 0;
@@ -1797,27 +1798,28 @@ retval = aml_ci_mem_write_by_spi(ci, 0, addr, val);
kfree(buf_orig);
return size;
}
-
-static struct class_attribute aml_spi_class_attrs[] = {
- __ATTR(reset, S_IRUGO | S_IWUSR,
- aml_spi_ci_reset_help, aml_spi_ci_reset),
- __ATTR(pwr, S_IRUGO | S_IWUSR,
- aml_spi_ci_pwr_help, aml_spi_ci_pwr),
- __ATTR(irq, S_IRUGO | S_IWUSR,
- aml_spi_ci_irq_show, NULL),
- __ATTR(status, S_IRUGO | S_IWUSR,
- aml_spi_ci_state_show, NULL),
- __ATTR(iotest, S_IRUGO | S_IWUSR,
- aml_spi_io_test_help, aml_spi_io_test),
- __ATTR_NULL
+static CLASS_ATTR_RW(reset);
+static CLASS_ATTR_RW(pwr);
+static CLASS_ATTR_RO(irq);
+static CLASS_ATTR_RO(status);
+static CLASS_ATTR_RW(iotest);
+
+static struct attribute *aml_spi_class_attrs[] = {
+ &class_attr_reset.attr,
+ &class_attr_pwr.attr,
+ &class_attr_irq.attr,
+ &class_attr_status.attr,
+ &class_attr_iotest.attr,
+ NULL
};
+ATTRIBUTE_GROUPS(aml_spi_class);
+
static struct class aml_spi_class = {
.name = "aml_dvb_spi_test",
- .class_attrs = aml_spi_class_attrs,
+ .class_groups = aml_spi_class_groups,
};
-
/**\brief aml_con_gpio_by_spi:control gpio by spi
* \param gpio: the value is from AM_CON_GPIO def
* \param level: 0: set low,1:set hight
diff --git a/drivers/stream_input/parser/dvb_ci/aml_spi.h b/drivers/stream_input/parser/dvb_ci/aml_spi.h
index 7a9493e..d33a72f 100644
--- a/drivers/stream_input/parser/dvb_ci/aml_spi.h
+++ b/drivers/stream_input/parser/dvb_ci/aml_spi.h
@@ -20,11 +20,11 @@
#ifndef __AML_SPI_H_
#define __AML_SPI_H_
-#include <linux/amlogic/aml_gpio_consumer.h>
+//#include <linux/amlogic/aml_gpio_consumer.h>
#include <linux/gpio/consumer.h>
#include "aml_pcmcia.h"
#include "aml_ci.h"
-#include "drivers/media/dvb-core/dvb_ca_en50221.h"
+#include "dvb_ca_en50221.h"
/*
aml spi dev
diff --git a/drivers/stream_input/parser/dvb_ci/cimax/aml_cimax_usb.c b/drivers/stream_input/parser/dvb_ci/cimax/aml_cimax_usb.c
index b74b34a..a45655e 100644
--- a/drivers/stream_input/parser/dvb_ci/cimax/aml_cimax_usb.c
+++ b/drivers/stream_input/parser/dvb_ci/cimax/aml_cimax_usb.c
@@ -24,6 +24,9 @@
#include <linux/mutex.h>
#include <linux/firmware.h>
#include <linux/delay.h>
+#include <linux/of_gpio.h>
+#include <linux/sched/clock.h>
+
//#include <linux/switch.h>
#include "aml_cimax.h"
@@ -469,8 +472,8 @@ module_param_named(usbcam_irq_mode, cam_irq_mode, int, 0644);
#define REG_TIMEOUT 500
#define CAM_TIMEOUT 5000
-static int aml_cimax_usb_mod_init(void);
-static void aml_cimax_usb_mod_exit(void);
+static int aml_cimax_usb_mod_init(struct platform_device *pdev);
+static void aml_cimax_usb_mod_exit(struct platform_device *pdev);
static int cimax_usb_set_loop(struct cimax_usb *usb, int loop);
@@ -1322,7 +1325,7 @@ int aml_cimax_usb_init(struct platform_device *pdev, struct aml_cimax *cimax)
g_usb = cimax_usb;
- aml_cimax_usb_mod_init();
+ aml_cimax_usb_mod_init(pdev);
cimax_usb_set_cb(cimax_usb_dev_add, cimax_usb_dev_remove);
@@ -1337,7 +1340,7 @@ int aml_cimax_usb_exit(struct aml_cimax *cimax)
if (!usb)
return -ENODEV;
- aml_cimax_usb_mod_exit();
+ aml_cimax_usb_mod_exit(usb->pdev);
cimax_usb_device_close(usb->dev);
cimax_usb_setup_poll(usb, STOP_MODE);
@@ -1679,34 +1682,50 @@ static ssize_t detect_store(struct class *class,
return size;
}
-
-static struct class_attribute cimax_usb_class_attrs[] = {
- __ATTR_RW(reset),
- __ATTR_RO(debug),
- __ATTR_RW(addr),
- __ATTR_RW(reg),
- __ATTR_RW(cis),
- __ATTR_RO(ts_rate),
- __ATTR_RW(loop),
- __ATTR_WO(slot_reset),
- __ATTR_WO(detect),
- __ATTR_NULL
+static CLASS_ATTR_RW(reset);
+static CLASS_ATTR_RO(debug);
+static CLASS_ATTR_RW(addr);
+static CLASS_ATTR_RW(reg);
+static CLASS_ATTR_RW(cis);
+static CLASS_ATTR_RO(ts_rate);
+static CLASS_ATTR_RW(loop);
+static CLASS_ATTR_WO(slot_reset);
+static CLASS_ATTR_WO(detect);
+
+#define CLASS_ATTR(name) &class_attr_##name.attr
+
+static struct attribute *cimax_usb_class_attrs[] = {
+ CLASS_ATTR(reset),
+ CLASS_ATTR(debug),
+ CLASS_ATTR(addr),
+ CLASS_ATTR(reg),
+ CLASS_ATTR(cis),
+ CLASS_ATTR(ts_rate),
+ CLASS_ATTR(loop),
+ CLASS_ATTR(slot_reset),
+ CLASS_ATTR(detect),
+ NULL
};
+
+ATTRIBUTE_GROUPS(cimax_usb_class);
+
static struct class cimax_usb_class = {
.name = "cimax_usb",
- .class_attrs = cimax_usb_class_attrs,
+ .class_groups = cimax_usb_class_groups,
};
-static int aml_cimax_usb_mod_init(void)
+static int aml_cimax_usb_mod_init(struct platform_device *pdev)
{
int ret;
pr_dbg("Amlogic CIMAX USB Init\n");
+
ret = class_register(&cimax_usb_class);
+
return 0;
}
-static void aml_cimax_usb_mod_exit(void)
+static void aml_cimax_usb_mod_exit(struct platform_device *pdev)
{
pr_dbg("Amlogic CIMAX USB Exit\n");
class_unregister(&cimax_usb_class);
diff --git a/drivers/stream_input/parser/dvb_ci/cimax/dvb_ca_en50221_cimax.c b/drivers/stream_input/parser/dvb_ci/cimax/dvb_ca_en50221_cimax.c
index 0f09799..eb69d72 100644
--- a/drivers/stream_input/parser/dvb_ci/cimax/dvb_ca_en50221_cimax.c
+++ b/drivers/stream_input/parser/dvb_ci/cimax/dvb_ca_en50221_cimax.c
@@ -27,6 +27,7 @@
#include <linux/delay.h>
#include <linux/spinlock.h>
#include <linux/sched.h>
+#include <linux/sched/signal.h>
#include <linux/kthread.h>
#include "dvb_ca_en50221_cimax.h"
diff --git a/drivers/stream_input/parser/dvb_ci/cimax/dvb_ringbuffer.c b/drivers/stream_input/parser/dvb_ci/cimax/dvb_ringbuffer.c
index fa5c163..ffdb8fb 100644
--- a/drivers/stream_input/parser/dvb_ci/cimax/dvb_ringbuffer.c
+++ b/drivers/stream_input/parser/dvb_ci/cimax/dvb_ringbuffer.c
@@ -31,7 +31,7 @@
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/string.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
#include "dvb_ringbuffer.h"
@@ -70,12 +70,12 @@ ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf)
{
ssize_t free;
- /* ACCESS_ONCE() to load read pointer on writer side
+ /* READ_ONCE() to load read pointer on writer side
* this pairs with smp_store_release() in dvb_ringbuffer_read(),
* dvb_ringbuffer_read_user(), dvb_ringbuffer_flush(),
* or dvb_ringbuffer_reset()
*/
- free = ACCESS_ONCE(rbuf->pread) - rbuf->pwrite;
+ free = READ_ONCE(rbuf->pread) - rbuf->pwrite;
if (free <= 0)
free += rbuf->size;
return free-1;
diff --git a/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.c b/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.c
index 43cdcde..e5e9af5 100644
--- a/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.c
+++ b/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.c
@@ -1495,7 +1495,7 @@ static int device_tsbulk_send(struct device_s *device,
/*dbg("Transmit %d bytes\n",urb->transfer_buffer_length);*/
/*dbg_dump("txBuf",
urb->transfer_buffer, urb->transfer_buffer_length);*/
- mod_timer(&(device->channel[index].StartBulkReadTimer),
+ mod_timer(&(gbulk_timer[index].StartBulkReadTimer),
usecs_to_jiffies(50));
if (usb_submit_urb(urb, GFP_KERNEL) < 0) {
@@ -1510,9 +1510,9 @@ static int device_tsbulk_send(struct device_s *device,
} /* device_tsbulk_send */
/* ---------------------------------------------------------- */
-static void StartBulkRead_func(unsigned long context)
+static void StartBulkRead_func(struct timer_list * timer)
{
- struct bulk_timer_s *bulk_time = (struct bulk_timer_s *) context;
+ struct bulk_timer_s *bulk_time = from_timer(bulk_time,timer,StartBulkReadTimer) ;
device_start_tsbulk_in(bulk_time->device, bulk_time->index);
}
@@ -1552,9 +1552,8 @@ static int device_drv_open(struct device_s *device)
device->channel[index].FirstTransfer = true;
gbulk_timer[index].device = device;
gbulk_timer[index].index = index;
- setup_timer(&device->channel[index].StartBulkReadTimer,
- StartBulkRead_func,
- (unsigned long)&(gbulk_timer[index]));
+ timer_setup(&gbulk_timer[index].StartBulkReadTimer,
+ StartBulkRead_func,0);
}
#ifdef DEBUG_CONTINUITY
init_tab_cc();
@@ -1821,9 +1820,11 @@ static long device_ioctl(struct file *file,
/* Verify direction (read/write) */
if (_IOC_DIR(cmd) & _IOC_READ)
- err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
+// err = !access_ok(VERIFY_WRITE, (void *)arg, _IOC_SIZE(cmd));
+ err = !access_ok((void *)arg, _IOC_SIZE(cmd));
else if (_IOC_DIR(cmd) & _IOC_WRITE)
- err = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
+// err = !access_ok(VERIFY_READ, (void *)arg, _IOC_SIZE(cmd));
+ err = !access_ok((void *)arg, _IOC_SIZE(cmd));
if (err)
return -EFAULT;
diff --git a/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.h b/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.h
index e4656e0..774c50a 100644
--- a/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.h
+++ b/drivers/stream_input/parser/dvb_ci/cimax/usb/SRC/cimax+usb-driver.h
@@ -298,6 +298,7 @@ struct ci_bulk_s {
/**
* @brief
* TS channel (can use isoc or bulk interface).
+ * x
*/
struct ts_channel_s {
spinlock_t inLock;
@@ -320,7 +321,6 @@ struct ts_channel_s {
int nbByteSend;
int nbByteRead;
__u8 FirstTransfer;
- struct timer_list StartBulkReadTimer;
#ifdef DEBUG_BITRATE
ktime_t bitrateTime
@@ -344,6 +344,7 @@ struct device_s {
struct bulk_timer_s {
struct device_s *device;
__u8 index;
+ struct timer_list StartBulkReadTimer;
};
int cimax_usb_select_interface(struct device_s *device, unsigned long intf);
diff --git a/drivers/stream_input/parser/dvb_ci/cimcu/dvb_ca_en50221_cimcu.c b/drivers/stream_input/parser/dvb_ci/cimcu/dvb_ca_en50221_cimcu.c
index 762f5ff..dc06f30 100644
--- a/drivers/stream_input/parser/dvb_ci/cimcu/dvb_ca_en50221_cimcu.c
+++ b/drivers/stream_input/parser/dvb_ci/cimcu/dvb_ca_en50221_cimcu.c
@@ -37,6 +37,7 @@
#include <linux/spinlock.h>
#include <linux/sched.h>
#include <linux/kthread.h>
+#include <linux/sched/signal.h>
#include "dvb_ca_en50221_cimcu.h"
#include "../cimax/dvb_ringbuffer.h"
diff --git a/drivers/stream_input/parser/dvb_common.h b/drivers/stream_input/parser/dvb_common.h
index 85a21d5..f36097c 100644
--- a/drivers/stream_input/parser/dvb_common.h
+++ b/drivers/stream_input/parser/dvb_common.h
@@ -22,6 +22,49 @@
#include "dvb_frontend.h"
+typedef enum dmx_source {
+ DMX_SOURCE_FRONT0 = 0,
+ DMX_SOURCE_FRONT1,
+ DMX_SOURCE_FRONT2,
+ DMX_SOURCE_FRONT3,
+ DMX_SOURCE_DVR0 = 16,
+ DMX_SOURCE_DVR1,
+ DMX_SOURCE_DVR2,
+ DMX_SOURCE_DVR3,
+
+#ifdef CONFIG_AMLOGIC_DVB_COMPAT
+ DMX_SOURCE_FRONT0_OFFSET = 100,
+ DMX_SOURCE_FRONT1_OFFSET,
+ DMX_SOURCE_FRONT2_OFFSET
+#endif
+} dmx_source_t;
+
+enum aml_dmx_id_t {
+ AM_DMX_0 = 0,
+ AM_DMX_1,
+ AM_DMX_2,
+ AM_DMX_MAX,
+};
+
+enum aml_ts_source_t {
+ AM_TS_SRC_TS0,
+ AM_TS_SRC_TS1,
+ AM_TS_SRC_TS2,
+ AM_TS_SRC_TS3,
+
+ AM_TS_SRC_S_TS0,
+ AM_TS_SRC_S_TS1,
+ AM_TS_SRC_S_TS2,
+ AM_TS_SRC_S_TS3,
+
+ AM_TS_SRC_HIU,
+ AM_TS_SRC_HIU1,
+ AM_TS_SRC_DMX0,
+ AM_TS_SRC_DMX1,
+ AM_TS_SRC_DMX2
+};
+
+
extern int dvb_attach_tuner(struct dvb_frontend *fe, struct aml_tuner *tuner,
enum tuner_type *type);
extern int dvb_detach_tuner(enum tuner_type *type);
@@ -114,6 +157,12 @@ static inline struct dvb_frontend *cxd2856_attach(
{
return NULL;
}
+
+static inline struct dvb_frontend *aml_dtvdm_attach(
+ const struct demod_config *cfg)
+{
+ return NULL;
+}
/* For attach demod driver end */
#endif /* __DVB_COMMON_H__ */
diff --git a/drivers/stream_input/parser/hw_demux/Makefile b/drivers/stream_input/parser/hw_demux/Makefile
index e031594..93454ae 100644
--- a/drivers/stream_input/parser/hw_demux/Makefile
+++ b/drivers/stream_input/parser/hw_demux/Makefile
@@ -1,6 +1,6 @@
obj-m += aml_hardware_dmx.o
-ccflags-y += -I$(srctree)/drivers/media/dvb-core -I$(srctree)/drivers/gpio -I$(srctree)/include -DENABLE_DEMUX_DRIVER
+ccflags-y += -I$(srctree)/include/media -I$(srctree)/drivers/media/pci/ttpci -I$(srctree)/drivers/gpio -I$(srctree)/include -DENABLE_DEMUX_DRIVER
aml_hardware_dmx-objs += aml_dvb.o
aml_hardware_dmx-objs += aml_dmx.o
diff --git a/drivers/stream_input/parser/hw_demux/aml_dmx.c b/drivers/stream_input/parser/hw_demux/aml_dmx.c
index 6809e4c..ef01f55 100644
--- a/drivers/stream_input/parser/hw_demux/aml_dmx.c
+++ b/drivers/stream_input/parser/hw_demux/aml_dmx.c
@@ -49,6 +49,7 @@
#include "c_stb_regs_define.h"
#include "aml_dvb.h"
#include "aml_dvb_reg.h"
+#include <linux/sched/signal.h>
#define ENABLE_SEC_BUFF_WATCHDOG
@@ -175,6 +176,8 @@ static u32 old_stb_top_config;
static u32 old_fec_input_control;
static int have_old_stb_top_config = 1;
static int have_old_fec_input_control = 1;
+static int s_key_endia = 0;
+static int s_add_s2p2 = 0;
static void
dmx_write_reg(int r, u32 v)
@@ -465,9 +468,9 @@ static int asyncfifo_buf_len = ASYNCFIFO_BUFFER_SIZE_DEFAULT;
/*Section buffer watchdog*/
-static void section_buffer_watchdog_func(unsigned long arg)
+static void section_buffer_watchdog_func(struct timer_list * timer)
{
- struct aml_dvb *dvb = (struct aml_dvb *)arg;
+ struct aml_dvb *dvb = from_timer(dvb,timer,watchdog_timer);
struct aml_dmx *dmx;
u32 section_busy32 = 0, om_cmd_status32 = 0,
demux_channel_activity32 = 0;
@@ -720,7 +723,7 @@ static void section_notify(struct aml_dmx *dmx, struct aml_filter *f, u8 *p)
struct dvb_demux_feed *feed = dmx->channel[f->chan_id].feed;
if (feed && feed->cb.sec)
- feed->cb.sec(p, sec_len, NULL, 0, f->filter);
+ feed->cb.sec(p, sec_len, NULL, 0, f->filter,0);
}
static void hardware_match_section(struct aml_dmx *dmx,
@@ -1174,7 +1177,7 @@ static void process_sub(struct aml_dmx *dmx)
{
dmx->channel[2].feed->cb.ts(buffer1_virt, len1,
buffer2_virt, len2,
- &dmx->channel[2].feed->feed.ts);
+ &dmx->channel[2].feed->feed.ts,0);
}
}
WRITE_MPEG_REG(PARSER_SUB_RP, rd_ptr);
@@ -1235,7 +1238,7 @@ static void process_pes(struct aml_dmx *dmx)
if (ch->feed->ts_type & TS_PAYLOAD_ONLY) {
ch->feed->cb.ts(buffer1,
len1, buffer2, len2,
- &ch->feed->feed.ts);
+ &ch->feed->feed.ts,0);
}
}
}
@@ -1426,7 +1429,7 @@ static void dvr_process_channel(struct aml_asyncfifo *afifo,
channel->dvr_feed->cb.ts(
(u8 *)afifo->pages+afifo->buf_read*size,
cnt*size, NULL, 0,
- &channel->dvr_feed->feed.ts);
+ &channel->dvr_feed->feed.ts,0);
} else {
blk.addr = afifo->blk.addr+afifo->buf_read*size;
blk.len = cnt*size;
@@ -1439,7 +1442,7 @@ static void dvr_process_channel(struct aml_asyncfifo *afifo,
(u8 *)&blk,
sizeof(struct aml_dvr_block),
NULL, 0,
- &channel->dvr_feed->feed.ts);
+ &channel->dvr_feed->feed.ts,0);
}
}
afifo->buf_read = 0;
@@ -1461,7 +1464,7 @@ static void dvr_process_channel(struct aml_asyncfifo *afifo,
channel->dvr_feed->cb.ts(
(u8 *)afifo->pages+afifo->buf_read*size,
cnt*size, NULL, 0,
- &channel->dvr_feed->feed.ts);
+ &channel->dvr_feed->feed.ts,0);
}
} else {
blk.addr = afifo->blk.addr+afifo->buf_read*size;
@@ -1475,7 +1478,7 @@ static void dvr_process_channel(struct aml_asyncfifo *afifo,
(u8 *)&blk,
sizeof(struct aml_dvr_block),
NULL, 0,
- &channel->dvr_feed->feed.ts);
+ &channel->dvr_feed->feed.ts,0);
}
}
afifo->buf_read = afifo->buf_toggle;
@@ -1545,7 +1548,10 @@ static irqreturn_t dvr_irq_handler(int irq_number, void *para)
tasklet_schedule(&afifo->asyncfifo_tasklet);
return IRQ_HANDLED;
}
-
+int aml_s2p_add(int num) {
+ s_add_s2p2 = num;
+ return 0;
+}
/*Enable the STB*/
static void stb_enable(struct aml_dvb *dvb)
{
@@ -1713,7 +1719,7 @@ static void stb_enable(struct aml_dvb *dvb)
(ciplus));
ciplus = 0;
- if (get_cpu_type() >= MESON_CPU_MAJOR_ID_TL1) {
+ if (s_add_s2p2) {
invert2 = dvb->s2p[2].invert;
WRITE_MPEG_REG(STB_S2P2_CONFIG,
@@ -1725,7 +1731,7 @@ static void stb_enable(struct aml_dvb *dvb)
hiu = 0;
/* invert ts out clk,add ci model need add this*/
if (dvb->ts_out_invert) {
- printk("ts out invert ---\r\n");
+ /*printk("ts out invert ---\r\n");*/
data = READ_MPEG_REG(TS_TOP_CONFIG);
data |= 1 << TS_OUT_CLK_INVERT;
WRITE_MPEG_REG(TS_TOP_CONFIG, data);
@@ -2079,7 +2085,7 @@ static void aml_ci_plus_config(int key_endian, int mode, int algo)
pr_dbg("%s mode:%d,alog:%d\n",__FUNCTION__,mode,algo);
- if (get_cpu_type() < MESON_CPU_MAJOR_ID_SM1) {
+ if (s_key_endia == 0) {
WRITE_MPEG_REG(CIPLUS_ENDIAN,
(15 << AES_MSG_OUT_ENDIAN)
| (15 << AES_MSG_IN_ENDIAN)
@@ -2246,7 +2252,7 @@ static int dsc_set_aes_des_sm4_key(struct aml_dsc_channel *ch, int flags,
int algo = 0;
if (!from_kl) {
- if (get_cpu_type() < MESON_CPU_MAJOR_ID_SM1) {
+ if (s_key_endia == 0) {
k3 = (key[0] << 24) | (key[1] << 16) | (key[2] << 8) | key[3];
k2 = (key[4] << 24) | (key[5] << 16) | (key[6] << 8) | key[7];
k1 = (key[8] << 24) | (key[9] << 16) | (key[10] << 8) | key[11];
@@ -2383,7 +2389,10 @@ int dsc_enable(struct aml_dsc *dsc, int enable)
}
return 0;
}
-
+int dsc_set_key_endia(int key_endia) {
+ s_key_endia = key_endia;
+ return 0;
+}
/*Set section buffer*/
static int dmx_alloc_sec_buffer(struct aml_dmx *dmx)
{
@@ -2821,13 +2830,9 @@ static int dmx_init(struct aml_dmx *dmx)
/*Reset the hardware */
if (!dvb->dmx_init) {
- init_timer(&dvb->watchdog_timer);
- dvb->watchdog_timer.function = section_buffer_watchdog_func;
- dvb->watchdog_timer.expires =
- jiffies + msecs_to_jiffies(WATCHDOG_TIMER);
- dvb->watchdog_timer.data = (unsigned long)dvb;
+ timer_setup(&dvb->watchdog_timer, section_buffer_watchdog_func,0);
#ifdef ENABLE_SEC_BUFF_WATCHDOG
- add_timer(&dvb->watchdog_timer);
+ mod_timer(&dvb->watchdog_timer,jiffies + msecs_to_jiffies(WATCHDOG_TIMER));
#endif
dmx_reset_hw(dvb);
}
@@ -3154,7 +3159,7 @@ static int dmx_enable(struct aml_dmx *dmx)
(invert1 << INVERT_S2P1_FEC_CLK);
WRITE_MPEG_REG(STB_TOP_CONFIG, v);
- if (get_cpu_type() >= MESON_CPU_MAJOR_ID_TL1) {
+ if (s_add_s2p2) {
invert2 = dvb->s2p[2].invert;
//add s2p2 config
@@ -5455,7 +5460,7 @@ int _set_tsfile_clkdiv(struct aml_dvb *dvb, int clkdiv)
return 0;
}
-static ssize_t stb_set_tsfile_clkdiv(struct class *class,
+static ssize_t tsfile_clkdiv_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size)
{
@@ -5467,7 +5472,7 @@ static ssize_t stb_set_tsfile_clkdiv(struct class *class,
return size;
}
-static ssize_t stb_get_tsfile_clkdiv(struct class *class,
+static ssize_t tsfile_clkdiv_show(struct class *class,
struct class_attribute *attr, char *buf)
{
ssize_t ret;
@@ -5537,7 +5542,7 @@ static ssize_t dmx_timeout_store(struct class *class,
#define DEMUX_SCAMBLE_FUNC_DECL(i) \
-static ssize_t dmx_reg_value_show_demux##i##_scramble(struct class *class, \
+static ssize_t demux##i##_scramble_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
int data = 0;\
@@ -5634,21 +5639,21 @@ static ssize_t reset_fec_input_ctrl_store(struct class *class,
return size;
}
-static ssize_t dmx_reg_addr_show_source(struct class *class,
+static ssize_t register_addr_show(struct class *class,
struct class_attribute *attr,
char *buf);
-static ssize_t dmx_reg_addr_store_source(struct class *class,
+static ssize_t register_addr_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size);
-static ssize_t dmx_id_show_source(struct class *class,
+static ssize_t dmx_id_show(struct class *class,
struct class_attribute *attr, char *buf);
-static ssize_t dmx_id_store_source(struct class *class,
+static ssize_t dmx_id_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size);
-static ssize_t dmx_reg_value_show_source(struct class *class,
+static ssize_t register_value_show(struct class *class,
struct class_attribute *attr,
char *buf);
-static ssize_t dmx_reg_value_store_source(struct class *class,
+static ssize_t register_value_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size);
static ssize_t dmx_sec_statistics_show(struct class *class,
@@ -5656,51 +5661,63 @@ static ssize_t dmx_sec_statistics_show(struct class *class,
char *buf);
static int reg_addr;
-static struct class_attribute aml_dmx_class_attrs[] = {
- __ATTR(dmx_id, 0644, dmx_id_show_source,
- dmx_id_store_source),
- __ATTR(register_addr, 0644, dmx_reg_addr_show_source,
- dmx_reg_addr_store_source),
- __ATTR(register_value, 0644, dmx_reg_value_show_source,
- dmx_reg_value_store_source),
- __ATTR(tsfile_clkdiv, 0644, stb_get_tsfile_clkdiv,
- stb_set_tsfile_clkdiv),
+static CLASS_ATTR_RW(dmx_id);
+static CLASS_ATTR_RW(register_addr);
+static CLASS_ATTR_RW(register_value);
+static CLASS_ATTR_RW(tsfile_clkdiv);
#define DEMUX_SCAMBLE_ATTR_DECL(i)\
- __ATTR(demux##i##_scramble, 0644, \
- dmx_reg_value_show_demux##i##_scramble, NULL)
+ CLASS_ATTR_RO(demux##i##_scramble);
#if DMX_DEV_COUNT > 0
- DEMUX_SCAMBLE_ATTR_DECL(0),
+DEMUX_SCAMBLE_ATTR_DECL(0);
#endif
#if DMX_DEV_COUNT > 1
- DEMUX_SCAMBLE_ATTR_DECL(1),
+DEMUX_SCAMBLE_ATTR_DECL(1);
#endif
#if DMX_DEV_COUNT > 2
- DEMUX_SCAMBLE_ATTR_DECL(2),
+DEMUX_SCAMBLE_ATTR_DECL(2);
#endif
- __ATTR(dmx_smallsec, 0644,
- dmx_smallsec_show,
- dmx_smallsec_store),
- __ATTR(dmx_timeout, 0644,
- dmx_timeout_show,
- dmx_timeout_store),
- __ATTR(reset_fec_input_ctrl, 0644,
- reset_fec_input_ctrl_show,
- reset_fec_input_ctrl_store),
- __ATTR(ciplus_output_ctrl, 0644,
- ciplus_output_ctrl_show,
- ciplus_output_ctrl_store),
- __ATTR_RO(dmx_sec_statistics),
- __ATTR_NULL
+static CLASS_ATTR_RW(dmx_smallsec);
+static CLASS_ATTR_RW(dmx_timeout);
+static CLASS_ATTR_RW(reset_fec_input_ctrl);
+static CLASS_ATTR_RW(ciplus_output_ctrl);
+static CLASS_ATTR_RO(dmx_sec_statistics);
+
+#define DMX_ATTR(name) &class_attr_##name.attr
+
+static struct attribute *aml_dmx_class_attrs[] = {
+ DMX_ATTR(dmx_id),
+ DMX_ATTR(register_addr),
+ DMX_ATTR(register_value),
+ DMX_ATTR(tsfile_clkdiv),
+ DMX_ATTR(dmx_smallsec),
+ DMX_ATTR(dmx_timeout),
+ DMX_ATTR(reset_fec_input_ctrl),
+ DMX_ATTR(ciplus_output_ctrl),
+ DMX_ATTR(dmx_sec_statistics),
+#define DEMUX_SCRAMBLE(i) \
+ DMX_ATTR(demux##i##_scramble)
+#if DMX_DEV_COUNT > 0
+ DEMUX_SCRAMBLE(0),
+#endif
+#if DMX_DEV_COUNT > 1
+ DEMUX_SCRAMBLE(1),
+#endif
+#if DMX_DEV_COUNT > 2
+ DEMUX_SCRAMBLE(2),
+#endif
+ NULL,
};
+ATTRIBUTE_GROUPS(aml_dmx_class);
+
static struct class aml_dmx_class = {
.name = "dmx",
- .class_attrs = aml_dmx_class_attrs,
+ .class_groups = aml_dmx_class_groups,
};
-static ssize_t dmx_id_show_source(struct class *class,
+static ssize_t dmx_id_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int ret;
@@ -5709,7 +5726,7 @@ static ssize_t dmx_id_show_source(struct class *class,
return ret;
}
-static ssize_t dmx_id_store_source(struct class *class,
+static ssize_t dmx_id_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size)
{
@@ -5728,7 +5745,7 @@ static ssize_t dmx_id_store_source(struct class *class,
return size;
}
-static ssize_t dmx_reg_addr_show_source(struct class *class,
+static ssize_t register_addr_show(struct class *class,
struct class_attribute *attr,
char *buf)
{
@@ -5738,7 +5755,7 @@ static ssize_t dmx_reg_addr_show_source(struct class *class,
return ret;
}
-static ssize_t dmx_reg_addr_store_source(struct class *class,
+static ssize_t register_addr_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size)
{
@@ -5752,7 +5769,7 @@ static ssize_t dmx_reg_addr_store_source(struct class *class,
return size;
}
-static ssize_t dmx_reg_value_show_source(struct class *class,
+static ssize_t register_value_show(struct class *class,
struct class_attribute *attr,
char *buf)
{
@@ -5763,7 +5780,7 @@ static ssize_t dmx_reg_value_show_source(struct class *class,
return ret;
}
-static ssize_t dmx_reg_value_store_source(struct class *class,
+static ssize_t register_value_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size)
{
@@ -5802,7 +5819,6 @@ static ssize_t dmx_sec_statistics_show(struct class *class,
int aml_regist_dmx_class(void)
{
-
if (class_register(&aml_dmx_class) < 0)
pr_error("register class error\n");
@@ -5811,7 +5827,6 @@ int aml_regist_dmx_class(void)
int aml_unregist_dmx_class(void)
{
-
class_unregister(&aml_dmx_class);
return 0;
}
diff --git a/drivers/stream_input/parser/hw_demux/aml_dvb.c b/drivers/stream_input/parser/hw_demux/aml_dvb.c
index 2c8c09a..157bdf4 100644
--- a/drivers/stream_input/parser/hw_demux/aml_dvb.c
+++ b/drivers/stream_input/parser/hw_demux/aml_dvb.c
@@ -50,6 +50,7 @@
#include <linux/amlogic/media/utils/amstream.h>
#include <linux/amlogic/cpu_version.h>
#include <linux/clk.h>
+#include <linux/of_irq.h>
#include "c_stb_define.h"
#include "c_stb_regs_define.h"
#include "aml_dvb.h"
@@ -171,8 +172,7 @@ static void aml_dvb_dmx_release(struct aml_dvb *advb, struct aml_dmx *dmx)
static int aml_dvb_dmx_init(struct aml_dvb *advb, struct aml_dmx *dmx, int id)
{
int i, ret;
-
- struct resource *res;
+ struct device_node *node_dmx = NULL;
char buf[32];
switch (id) {
@@ -186,13 +186,19 @@ static int aml_dvb_dmx_init(struct aml_dvb *advb, struct aml_dmx *dmx, int id)
dmx->dmx_irq = INT_DEMUX_2;
break;
}
-
- snprintf(buf, sizeof(buf), "demux%d_irq", id);
- res = platform_get_resource_byname(advb->pdev, IORESOURCE_IRQ, buf);
- if (res)
- dmx->dmx_irq = res->start;
-
- printk("%s irq num:%d \r\n", buf, dmx->dmx_irq);
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "dmx");
+ node_dmx = of_parse_phandle(advb->pdev->dev.of_node, buf, 0);
+ if (node_dmx) {
+ memset(buf, 0, sizeof(buf));
+ snprintf(buf, sizeof(buf), "demux%d_irq", id);
+ ret = of_irq_get_byname(node_dmx, buf);
+ if (ret > 0)
+ dmx->dmx_irq = ret;
+ printk("get irq num demux%d_irq:%d\n",id,dmx->dmx_irq);
+ } else {
+ printk("get default demux%d_irq:%d\n",id,dmx->dmx_irq);
+ }
dmx->source = -1;
dmx->dump_ts_select = 0;
@@ -478,7 +484,7 @@ static int dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
dsc_reset(dsc);
break;
case CA_GET_CAP: {
- ca_caps_t *cap = parg;
+ struct ca_caps *cap = parg;
cap->slot_num = 1;
cap->slot_type = CA_DESCR;
@@ -487,7 +493,7 @@ static int dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
break;
}
case CA_GET_SLOT_INFO: {
- ca_slot_info_t *slot = parg;
+ struct ca_slot_info *slot = parg;
slot->num = 1;
slot->type = CA_DESCR;
@@ -495,14 +501,14 @@ static int dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
break;
}
case CA_GET_DESCR_INFO: {
- ca_descr_info_t *descr = parg;
+ struct ca_descr_info *descr = parg;
descr->num = DSC_COUNT;
descr->type = 0;
break;
}
case CA_SET_DESCR: {
- ca_descr_t *d = parg;
+ struct ca_descr *d = parg;
struct ca_descr_ex dex;
dex.index = d->index;
@@ -515,7 +521,7 @@ static int dvb_dsc_do_ioctl(struct file *file, unsigned int cmd,
break;
}
case CA_SET_PID: {
- ca_pid_t *pi = parg;
+ struct ca_pid *pi = parg;
int i;
if (pi->index == -1) {
@@ -681,8 +687,9 @@ static struct dvb_device dvbdev_dsc = {
static int aml_dvb_asyncfifo_init(struct aml_dvb *advb,
struct aml_asyncfifo *asyncfifo, int id)
{
- struct resource *res;
char buf[32];
+ int ret = 0;
+ struct device_node *node_dmx = NULL;
if (id == 0)
asyncfifo->asyncfifo_irq = INT_ASYNC_FIFO_FLUSH;
@@ -691,11 +698,19 @@ static int aml_dvb_asyncfifo_init(struct aml_dvb *advb,
else
asyncfifo->asyncfifo_irq = INT_ASYNC_FIFO2_FLUSH;
- snprintf(buf, sizeof(buf), "dvr%d_irq", id);
- res = platform_get_resource_byname(advb->pdev, IORESOURCE_IRQ, buf);
- if (res)
- asyncfifo->asyncfifo_irq = res->start;
- pr_inf("%s irq num:%d \n", buf, asyncfifo->asyncfifo_irq);
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "dmx");
+ node_dmx = of_parse_phandle(advb->pdev->dev.of_node, buf, 0);
+ if (node_dmx) {
+ memset(buf, 0, sizeof(buf));
+ snprintf(buf, sizeof(buf), "dvr%d_irq", id);
+ ret = of_irq_get_byname(node_dmx, buf);
+ if (ret > 0)
+ asyncfifo->asyncfifo_irq = ret;
+ printk("get async%d_irq:%d\n",id,asyncfifo->asyncfifo_irq);
+ } else {
+ printk("get default async%d_irq:%d\n",id,asyncfifo->asyncfifo_irq);
+ }
asyncfifo->dvb = advb;
asyncfifo->id = id;
asyncfifo->init = 0;
@@ -743,7 +758,7 @@ static void aml_dvb_dsc_release(struct aml_dvb *advb,
/*Show the STB input source*/
-static ssize_t stb_show_source(struct class *class,
+static ssize_t source_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -790,7 +805,7 @@ static ssize_t stb_show_source(struct class *class,
return ret;
}
-static ssize_t stb_clear_av(struct class *class,
+static ssize_t clear_av_store(struct class *class,
struct class_attribute *attr, const char *buf,
size_t size)
{
@@ -805,7 +820,7 @@ static ssize_t stb_clear_av(struct class *class,
}
/*Set the STB input source*/
-static ssize_t stb_store_source(struct class *class,
+static ssize_t source_store(struct class *class,
struct class_attribute *attr, const char *buf,
size_t size)
{
@@ -835,7 +850,7 @@ static ssize_t stb_store_source(struct class *class,
return size;
}
-static ssize_t show_dmx_reset_all_flag(struct class *class,
+static ssize_t demux_reset_all_flag_show(struct class *class,
struct class_attribute *attr, char *buf)
{
ssize_t ret = 0;
@@ -848,7 +863,7 @@ static ssize_t show_dmx_reset_all_flag(struct class *class,
ret = sprintf(buf, "%s\n", src);
return ret;
}
-static ssize_t set_dmx_reset_all_flag(struct class *class,
+static ssize_t demux_reset_all_flag_store(struct class *class,
struct class_attribute *attr, const char *buf,
size_t size)
{
@@ -863,7 +878,7 @@ static ssize_t set_dmx_reset_all_flag(struct class *class,
/*Show the descrambler's input source*/
#define DSC_SOURCE_FUNC_DECL(i) \
-static ssize_t dsc##i##_show_source(struct class *class, \
+static ssize_t dsc##i##_source_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -901,7 +916,7 @@ static ssize_t dsc##i##_show_source(struct class *class, \
ret = sprintf(buf, "%s-%s\n", src, dst);\
return ret;\
} \
-static ssize_t dsc##i##_store_source(struct class *class, \
+static ssize_t dsc##i##_source_store(struct class *class, \
struct class_attribute *attr, const char *buf, size_t size)\
{\
dmx_source_t src = -1, dst = -1;\
@@ -930,7 +945,7 @@ static ssize_t dsc##i##_store_source(struct class *class, \
/*Show free descramblers count*/
#define DSC_FREE_FUNC_DECL(i) \
-static ssize_t dsc##i##_show_free_dscs(struct class *class, \
+static ssize_t dsc##i##_free_dscs_show(struct class *class, \
struct class_attribute *attr, char *buf) \
{ \
struct aml_dvb *dvb = &aml_dvb_device; \
@@ -960,7 +975,7 @@ static ssize_t dsc##i##_show_free_dscs(struct class *class, \
#endif
/*Show the TS output source*/
-static ssize_t tso_show_source(struct class *class,
+static ssize_t tso_source_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -1005,7 +1020,7 @@ static ssize_t tso_show_source(struct class *class,
}
/*Set the TS output source*/
-static ssize_t tso_store_source(struct class *class,
+static ssize_t tso_source_store(struct class *class,
struct class_attribute *attr, const char *buf,
size_t size)
{
@@ -1035,7 +1050,7 @@ static ssize_t tso_store_source(struct class *class,
/*Show PCR*/
#define DEMUX_PCR_FUNC_DECL(i) \
-static ssize_t demux##i##_show_pcr(struct class *class, \
+static ssize_t demux##i##_pcr_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
int f = 0;\
@@ -1050,7 +1065,7 @@ static ssize_t demux##i##_show_pcr(struct class *class, \
/*Show the STB input source*/
#define DEMUX_SOURCE_FUNC_DECL(i) \
-static ssize_t demux##i##_show_source(struct class *class, \
+static ssize_t demux##i##_source_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1095,7 +1110,7 @@ static ssize_t demux##i##_show_source(struct class *class, \
ret = sprintf(buf, "%s\n", src);\
return ret;\
} \
-static ssize_t demux##i##_store_source(struct class *class, \
+static ssize_t demux##i##_source_store(struct class *class, \
struct class_attribute *attr, const char *buf, size_t size)\
{\
dmx_source_t src = -1;\
@@ -1127,7 +1142,7 @@ static ssize_t demux##i##_store_source(struct class *class, \
/*Show free filters count*/
#define DEMUX_FREE_FILTERS_FUNC_DECL(i) \
-static ssize_t demux##i##_show_free_filters(struct class *class, \
+static ssize_t demux##i##_free_filters_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1148,7 +1163,7 @@ static ssize_t demux##i##_show_free_filters(struct class *class, \
/*Show filter users count*/
#define DEMUX_FILTER_USERS_FUNC_DECL(i) \
-static ssize_t demux##i##_show_filter_users(struct class *class, \
+static ssize_t demux##i##_filter_users_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1172,7 +1187,7 @@ static ssize_t demux##i##_show_filter_users(struct class *class, \
ret = sprintf(buf, "%d\n", count);\
return ret;\
} \
-static ssize_t demux##i##_store_filter_used(struct class *class, \
+static ssize_t demux##i##_filter_users_store(struct class *class, \
struct class_attribute *attr, const char *buf, size_t size)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1195,7 +1210,7 @@ static ssize_t demux##i##_store_filter_used(struct class *class, \
/*Show ts header*/
#define DEMUX_TS_HEADER_FUNC_DECL(i) \
-static ssize_t demux##i##_show_ts_header(struct class *class, \
+static ssize_t demux##i##_ts_header_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
int hdr = 0;\
@@ -1210,7 +1225,7 @@ static ssize_t demux##i##_show_ts_header(struct class *class, \
/*Show channel activity*/
#define DEMUX_CHANNEL_ACTIVITY_FUNC_DECL(i) \
-static ssize_t demux##i##_show_channel_activity(struct class *class, \
+static ssize_t demux##i##_channel_activity_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
int f = 0;\
@@ -1238,7 +1253,7 @@ static ssize_t demux##i##_reset_store(struct class *class, \
/*DVR record mode*/
#define DVR_MODE_FUNC_DECL(i) \
-static ssize_t dvr##i##_show_mode(struct class *class, \
+static ssize_t dvr##i##_mode_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1253,7 +1268,7 @@ static ssize_t dvr##i##_show_mode(struct class *class, \
ret = sprintf(buf, "%s\n", mode);\
return ret;\
} \
-static ssize_t dvr##i##_store_mode(struct class *class, \
+static ssize_t dvr##i##_mode_store(struct class *class, \
struct class_attribute *attr, const char *buf, size_t size)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1305,7 +1320,7 @@ static ssize_t dvr##i##_store_mode(struct class *class, \
/*Show the async fifo source*/
#define ASYNCFIFO_SOURCE_FUNC_DECL(i) \
-static ssize_t asyncfifo##i##_show_source(struct class *class, \
+static ssize_t asyncfifo##i##_source_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1331,7 +1346,7 @@ static ssize_t asyncfifo##i##_show_source(struct class *class, \
ret = sprintf(buf, "%s\n", src);\
return ret;\
} \
-static ssize_t asyncfifo##i##_store_source(struct class *class, \
+static ssize_t asyncfifo##i##_source_store(struct class *class, \
struct class_attribute *attr, const char *buf, size_t size)\
{\
enum aml_dmx_id_t src = -1;\
@@ -1364,7 +1379,7 @@ ASYNCFIFO_SOURCE_FUNC_DECL(0)
/*Show the async fifo flush size*/
#define ASYNCFIFO_FLUSHSIZE_FUNC_DECL(i) \
-static ssize_t asyncfifo##i##_show_flush_size(struct class *class, \
+static ssize_t asyncfifo##i##_flush_size_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1375,7 +1390,7 @@ static ssize_t asyncfifo##i##_show_flush_size(struct class *class, \
ret = sprintf(buf, "%d\n", afifo->flush_size);\
return ret;\
} \
-static ssize_t asyncfifo##i##_store_flush_size(struct class *class, \
+static ssize_t asyncfifo##i##_flush_size_store(struct class *class, \
struct class_attribute *attr, \
const char *buf, size_t size)\
{\
@@ -1411,7 +1426,7 @@ ASYNCFIFO_FLUSHSIZE_FUNC_DECL(0)
/*Show the async fifo secure buffer addr*/
#define ASYNCFIFO_SECUREADDR_FUNC_DECL(i) \
-static ssize_t asyncfifo##i##_show_secure_addr(struct class *class, \
+static ssize_t asyncfifo##i##_secure_addr_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1422,7 +1437,7 @@ static ssize_t asyncfifo##i##_show_secure_addr(struct class *class, \
ret = sprintf(buf, "0x%x\n", afifo->blk.addr);\
return ret;\
} \
-static ssize_t asyncfifo##i##_store_secure_addr(struct class *class, \
+static ssize_t asyncfifo##i##_secure_addr_store(struct class *class, \
struct class_attribute *attr, \
const char *buf, size_t size)\
{\
@@ -1455,7 +1470,7 @@ const char *buf, size_t size)\
/*Show the async fifo secure enable*/
#define ASYNCFIFO_SECURENABLE_FUNC_DECL(i) \
-static ssize_t asyncfifo##i##_show_secure_enable(struct class *class, \
+static ssize_t asyncfifo##i##_secure_enable_show(struct class *class, \
struct class_attribute *attr, char *buf)\
{\
struct aml_dvb *dvb = &aml_dvb_device;\
@@ -1466,7 +1481,7 @@ static ssize_t asyncfifo##i##_show_secure_enable(struct class *class, \
ret = sprintf(buf, "%d\n", afifo->secure_enable);\
return ret;\
} \
-static ssize_t asyncfifo##i##_store_secure_enable(struct class *class, \
+static ssize_t asyncfifo##i##_secure_enable_store(struct class *class, \
struct class_attribute *attr, \
const char *buf, size_t size)\
{\
@@ -1500,7 +1515,7 @@ ASYNCFIFO_SECURENABLE_FUNC_DECL(0)
#endif
/*Reset the Demux*/
-static ssize_t demux_do_reset(struct class *class,
+static ssize_t demux_reset_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t size)
{
@@ -1518,7 +1533,7 @@ static ssize_t demux_do_reset(struct class *class,
}
/*Show the Video PTS value*/
-static ssize_t demux_show_video_pts(struct class *class,
+static ssize_t video_pts_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -1530,7 +1545,7 @@ static ssize_t demux_show_video_pts(struct class *class,
}
/*Show the Audio PTS value*/
-static ssize_t demux_show_audio_pts(struct class *class,
+static ssize_t audio_pts_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -1542,7 +1557,7 @@ static ssize_t demux_show_audio_pts(struct class *class,
}
/*Show the Video PTS bit32 value*/
-static ssize_t demux_show_video_pts_bit32(struct class *class,
+static ssize_t video_pts_bit32_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -1554,7 +1569,7 @@ static ssize_t demux_show_video_pts_bit32(struct class *class,
}
/*Show the Audio PTS bit32 value*/
-static ssize_t demux_show_audio_pts_bit32(struct class *class,
+static ssize_t audio_pts_bit32_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -1567,7 +1582,7 @@ static ssize_t demux_show_audio_pts_bit32(struct class *class,
/*Show the First Video PTS value*/
-static ssize_t demux_show_first_video_pts(struct class *class,
+static ssize_t first_video_pts_show(struct class *class,
struct class_attribute *attr,
char *buf)
{
@@ -1580,7 +1595,7 @@ static ssize_t demux_show_first_video_pts(struct class *class,
}
/*Show the First Audio PTS value*/
-static ssize_t demux_show_first_audio_pts(struct class *class,
+static ssize_t first_audio_pts_show(struct class *class,
struct class_attribute *attr,
char *buf)
{
@@ -1592,7 +1607,7 @@ static ssize_t demux_show_first_audio_pts(struct class *class,
return ret;
}
-static ssize_t stb_show_hw_setting(struct class *class,
+static ssize_t hw_setting_show(struct class *class,
struct class_attribute *attr, char *buf)
{
int r, total = 0;
@@ -1621,7 +1636,7 @@ static ssize_t stb_show_hw_setting(struct class *class,
return total;
}
-static ssize_t stb_store_hw_setting(struct class *class,
+static ssize_t hw_setting_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t count)
{
@@ -1690,7 +1705,7 @@ static ssize_t stb_store_hw_setting(struct class *class,
return count;
}
-static ssize_t stb_show_tuner_setting(struct class *class,
+static ssize_t tuner_setting_show(struct class *class,
struct class_attribute *attr, char *buf)
{
struct aml_dvb *dvb = &aml_dvb_device;
@@ -1704,7 +1719,7 @@ static ssize_t stb_show_tuner_setting(struct class *class,
return 0;
}
-static ssize_t stb_store_tuner_setting(struct class *class,
+static ssize_t tuner_setting_store(struct class *class,
struct class_attribute *attr,
const char *buf, size_t count)
{
@@ -1766,144 +1781,296 @@ EXIT:
return count;
}
-static struct class_attribute aml_stb_class_attrs[] = {
- __ATTR(hw_setting, 0664, stb_show_hw_setting,
- stb_store_hw_setting),
- __ATTR(source, 0664, stb_show_source,
- stb_store_source),
- __ATTR(demux_reset_all_flag, 0664, show_dmx_reset_all_flag,
- set_dmx_reset_all_flag),
- __ATTR(tso_source, 0644, tso_show_source,
- tso_store_source),
+static CLASS_ATTR_RW(hw_setting);
+static CLASS_ATTR_RW(source);
+static CLASS_ATTR_RW(demux_reset_all_flag);
+static CLASS_ATTR_RW(tso_source);
#define DEMUX_SOURCE_ATTR_PCR(i)\
- __ATTR(demux##i##_pcr, 0644, demux##i##_show_pcr, NULL)
+ static CLASS_ATTR_RO(demux##i##_pcr)
#define DEMUX_SOURCE_ATTR_DECL(i)\
- __ATTR(demux##i##_source, 0664,\
- demux##i##_show_source, demux##i##_store_source)
+ static CLASS_ATTR_RW(demux##i##_source)
#define DEMUX_FREE_FILTERS_ATTR_DECL(i)\
- __ATTR(demux##i##_free_filters, 0644, \
- demux##i##_show_free_filters, NULL)
+ static CLASS_ATTR_RO(demux##i##_free_filters)
#define DEMUX_FILTER_USERS_ATTR_DECL(i)\
- __ATTR(demux##i##_filter_users, 0644, \
- demux##i##_show_filter_users, demux##i##_store_filter_used)
+ static CLASS_ATTR_RW(demux##i##_filter_users)
#define DVR_MODE_ATTR_DECL(i)\
- __ATTR(dvr##i##_mode, 0644, dvr##i##_show_mode, \
- dvr##i##_store_mode)
+ static CLASS_ATTR_RW(dvr##i##_mode)
#define DEMUX_TS_HEADER_ATTR_DECL(i)\
- __ATTR(demux##i##_ts_header, 0644, \
- demux##i##_show_ts_header, NULL)
+ static CLASS_ATTR_RO(demux##i##_ts_header)
#define DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(i)\
- __ATTR(demux##i##_channel_activity, 0644, \
- demux##i##_show_channel_activity, NULL)
+ static CLASS_ATTR_RO(demux##i##_channel_activity)
#define DMX_RESET_ATTR_DECL(i)\
- __ATTR(demux##i##_reset, 0644, NULL, \
- demux##i##_reset_store)
+ static CLASS_ATTR_WO(demux##i##_reset)
#if DMX_DEV_COUNT > 0
- DEMUX_SOURCE_ATTR_PCR(0),
- DEMUX_SOURCE_ATTR_DECL(0),
- DEMUX_FREE_FILTERS_ATTR_DECL(0),
- DEMUX_FILTER_USERS_ATTR_DECL(0),
- DVR_MODE_ATTR_DECL(0),
- DEMUX_TS_HEADER_ATTR_DECL(0),
- DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(0),
- DMX_RESET_ATTR_DECL(0),
+ DEMUX_SOURCE_ATTR_PCR(0);
+ DEMUX_SOURCE_ATTR_DECL(0);
+ DEMUX_FREE_FILTERS_ATTR_DECL(0);
+ DEMUX_FILTER_USERS_ATTR_DECL(0);
+ DVR_MODE_ATTR_DECL(0);
+ DEMUX_TS_HEADER_ATTR_DECL(0);
+ DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(0);
+ DMX_RESET_ATTR_DECL(0);
#endif
#if DMX_DEV_COUNT > 1
- DEMUX_SOURCE_ATTR_PCR(1),
- DEMUX_SOURCE_ATTR_DECL(1),
- DEMUX_FREE_FILTERS_ATTR_DECL(1),
- DEMUX_FILTER_USERS_ATTR_DECL(1),
- DVR_MODE_ATTR_DECL(1),
- DEMUX_TS_HEADER_ATTR_DECL(1),
- DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(1),
- DMX_RESET_ATTR_DECL(1),
+ DEMUX_SOURCE_ATTR_PCR(1);
+ DEMUX_SOURCE_ATTR_DECL(1);
+ DEMUX_FREE_FILTERS_ATTR_DECL(1);
+ DEMUX_FILTER_USERS_ATTR_DECL(1);
+ DVR_MODE_ATTR_DECL(1);
+ DEMUX_TS_HEADER_ATTR_DECL(1);
+ DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(1);
+ DMX_RESET_ATTR_DECL(1);
#endif
#if DMX_DEV_COUNT > 2
- DEMUX_SOURCE_ATTR_PCR(2),
- DEMUX_SOURCE_ATTR_DECL(2),
- DEMUX_FREE_FILTERS_ATTR_DECL(2),
- DEMUX_FILTER_USERS_ATTR_DECL(2),
- DVR_MODE_ATTR_DECL(2),
- DEMUX_TS_HEADER_ATTR_DECL(2),
- DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(2),
- DMX_RESET_ATTR_DECL(2),
+ DEMUX_SOURCE_ATTR_PCR(2);
+ DEMUX_SOURCE_ATTR_DECL(2);
+ DEMUX_FREE_FILTERS_ATTR_DECL(2);
+ DEMUX_FILTER_USERS_ATTR_DECL(2);
+ DVR_MODE_ATTR_DECL(2);
+ DEMUX_TS_HEADER_ATTR_DECL(2);
+ DEMUX_CHANNEL_ACTIVITY_ATTR_DECL(2);
+ DMX_RESET_ATTR_DECL(2);
#endif
#define ASYNCFIFO_SOURCE_ATTR_DECL(i)\
- __ATTR(asyncfifo##i##_source, 0664, \
- asyncfifo##i##_show_source, asyncfifo##i##_store_source)
+ static CLASS_ATTR_RW(asyncfifo##i##_source)
#define ASYNCFIFO_FLUSHSIZE_ATTR_DECL(i)\
- __ATTR(asyncfifo##i##_flush_size, 0664,\
- asyncfifo##i##_show_flush_size, \
- asyncfifo##i##_store_flush_size)
+ static CLASS_ATTR_RW(asyncfifo##i##_flush_size)
#define ASYNCFIFO_SECUREADDR_ATTR_DECL(i)\
- __ATTR(asyncfifo##i##_secure_addr, S_IRUGO | S_IWUSR | S_IWGRP,\
- asyncfifo##i##_show_secure_addr, \
- asyncfifo##i##_store_secure_addr)
+ static CLASS_ATTR_RW(asyncfifo##i##_secure_addr)
#define ASYNCFIFO_SECURENABLE_ATTR_DECL(i)\
- __ATTR(asyncfifo##i##_secure_enable, S_IRUGO | S_IWUSR | S_IWGRP,\
- asyncfifo##i##_show_secure_enable, \
- asyncfifo##i##_store_secure_enable)
+ static CLASS_ATTR_RW(asyncfifo##i##_secure_enable)
#if ASYNCFIFO_COUNT > 0
- ASYNCFIFO_SOURCE_ATTR_DECL(0),
- ASYNCFIFO_FLUSHSIZE_ATTR_DECL(0),
- ASYNCFIFO_SECUREADDR_ATTR_DECL(0),
- ASYNCFIFO_SECURENABLE_ATTR_DECL(0),
+ ASYNCFIFO_SOURCE_ATTR_DECL(0);
+ ASYNCFIFO_FLUSHSIZE_ATTR_DECL(0);
+ ASYNCFIFO_SECUREADDR_ATTR_DECL(0);
+ ASYNCFIFO_SECURENABLE_ATTR_DECL(0);
#endif
#if ASYNCFIFO_COUNT > 1
- ASYNCFIFO_SOURCE_ATTR_DECL(1),
- ASYNCFIFO_FLUSHSIZE_ATTR_DECL(1),
- ASYNCFIFO_SECUREADDR_ATTR_DECL(1),
- ASYNCFIFO_SECURENABLE_ATTR_DECL(1),
+ ASYNCFIFO_SOURCE_ATTR_DECL(1);
+ ASYNCFIFO_FLUSHSIZE_ATTR_DECL(1);
+ ASYNCFIFO_SECUREADDR_ATTR_DECL(1);
+ ASYNCFIFO_SECURENABLE_ATTR_DECL(1);
#endif
#if ASYNCFIFO_COUNT > 2
- ASYNCFIFO_SOURCE_ATTR_DECL(2),
- ASYNCFIFO_FLUSHSIZE_ATTR_DECL(2),
- ASYNCFIFO_SECUREADDR_ATTR_DECL(2),
- ASYNCFIFO_SECURENABLE_ATTR_DECL(2),
+ ASYNCFIFO_SOURCE_ATTR_DECL(2);
+ ASYNCFIFO_FLUSHSIZE_ATTR_DECL(2);
+ ASYNCFIFO_SECUREADDR_ATTR_DECL(2);
+ ASYNCFIFO_SECURENABLE_ATTR_DECL(2);
#endif
- __ATTR(demux_reset, 0644, NULL, demux_do_reset),
- __ATTR(video_pts, 0664, demux_show_video_pts,
- NULL),
- __ATTR(audio_pts, 0664, demux_show_audio_pts,
- NULL),
- __ATTR(video_pts_bit32, 0644, demux_show_video_pts_bit32, NULL),
- __ATTR(audio_pts_bit32, 0644, demux_show_audio_pts_bit32, NULL),
- __ATTR(first_video_pts, 0644, demux_show_first_video_pts,
- NULL),
- __ATTR(first_audio_pts, 0644, demux_show_first_audio_pts,
- NULL),
- __ATTR(clear_av, 0644, NULL, stb_clear_av),
+ static CLASS_ATTR_WO(demux_reset);
+ static CLASS_ATTR_RO(video_pts);
+ static CLASS_ATTR_RO(audio_pts);
+ static CLASS_ATTR_RO(video_pts_bit32);
+ static CLASS_ATTR_RO(audio_pts_bit32);
+ static CLASS_ATTR_RO(first_video_pts);
+ static CLASS_ATTR_RO(first_audio_pts);
+ static CLASS_ATTR_WO(clear_av);
#define DSC_SOURCE_ATTR_DECL(i)\
- __ATTR(dsc##i##_source, 0664,\
- dsc##i##_show_source, dsc##i##_store_source)
+ static CLASS_ATTR_RW(dsc##i##_source)
#define DSC_FREE_ATTR_DECL(i) \
- __ATTR(dsc##i##_free_dscs, 0644, \
- dsc##i##_show_free_dscs, NULL)
+ static CLASS_ATTR_RO(dsc##i##_free_dscs)
#if DSC_DEV_COUNT > 0
- DSC_SOURCE_ATTR_DECL(0),
- DSC_FREE_ATTR_DECL(0),
+ DSC_SOURCE_ATTR_DECL(0);
+ DSC_FREE_ATTR_DECL(0);
#endif
#if DSC_DEV_COUNT > 1
- DSC_SOURCE_ATTR_DECL(1),
- DSC_FREE_ATTR_DECL(1),
+ DSC_SOURCE_ATTR_DECL(1);
+ DSC_FREE_ATTR_DECL(1);
#endif
- __ATTR(tuner_setting, 0664, stb_show_tuner_setting, stb_store_tuner_setting),
+ static CLASS_ATTR_RW(tuner_setting);
+#define STB_ATTR(name) &class_attr_##name.attr
+
+static struct attribute *aml_stb_class_attrs[] = {
+ STB_ATTR(hw_setting),
+ STB_ATTR(source),
+ STB_ATTR(demux_reset_all_flag),
+ STB_ATTR(tso_source),
+ STB_ATTR(demux_reset),
+ STB_ATTR(video_pts),
+ STB_ATTR(audio_pts),
+ STB_ATTR(video_pts_bit32),
+ STB_ATTR(audio_pts_bit32),
+ STB_ATTR(first_video_pts),
+ STB_ATTR(first_audio_pts),
+ STB_ATTR(clear_av),
+ STB_ATTR(tuner_setting),
+#define DEMUX_PCR(i) \
+ STB_ATTR(demux##i##_pcr)
+ DEMUX_PCR(0),
+ DEMUX_PCR(1),
+ DEMUX_PCR(2),
+#define DEMUX_SOURCE(i) \
+ STB_ATTR(demux##i##_source)
+ DEMUX_SOURCE(0),
+ DEMUX_SOURCE(1),
+ DEMUX_SOURCE(2),
+#define DEMUX_FREE_FILTER(i) \
+ STB_ATTR(demux##i##_free_filters)
+ DEMUX_FREE_FILTER(0),
+ DEMUX_FREE_FILTER(1),
+ DEMUX_FREE_FILTER(2),
+#define DEMUX_FILTER_USERS(i) \
+ STB_ATTR(demux##i##_filter_users)
+ DEMUX_FILTER_USERS(0),
+ DEMUX_FILTER_USERS(1),
+ DEMUX_FILTER_USERS(2),
+#define DEMUX_TS_HEADER(i) \
+ STB_ATTR(demux##i##_ts_header)
+ DEMUX_TS_HEADER(0),
+ DEMUX_TS_HEADER(1),
+ DEMUX_TS_HEADER(2),
+#define DEMUX_CHANNEL_ACTIVITY_ATTR(i) \
+ STB_ATTR(demux##i##_channel_activity)
+ DEMUX_CHANNEL_ACTIVITY_ATTR(0),
+ DEMUX_CHANNEL_ACTIVITY_ATTR(1),
+ DEMUX_CHANNEL_ACTIVITY_ATTR(2),
+#define DEMUX_RESET(i) \
+ STB_ATTR(demux##i##_reset)
+ DEMUX_RESET(0),
+ DEMUX_RESET(1),
+ DEMUX_RESET(2),
+#define DVR_MODE(i)\
+ STB_ATTR(dvr##i##_mode)
+ DVR_MODE(0),
+ DVR_MODE(1),
+ DVR_MODE(2),
+#define ASYNCFIFO_SOURCE(i) \
+ STB_ATTR(asyncfifo##i##_source)
+#if ASYNCFIFO_COUNT > 0
+ ASYNCFIFO_SOURCE(0),
+#endif
+#if ASYNCFIFO_COUNT > 1
+ ASYNCFIFO_SOURCE(1),
+#endif
+#if ASYNCFIFO_COUNT > 2
+ ASYNCFIFO_SOURCE(2),
+#endif
+#define ASYNCFIFO_FLUSH_SIZE(i) \
+ STB_ATTR(asyncfifo##i##_flush_size)
+#if ASYNCFIFO_COUNT > 0
+ ASYNCFIFO_FLUSH_SIZE(0),
+#endif
+#if ASYNCFIFO_COUNT > 1
+ ASYNCFIFO_FLUSH_SIZE(1),
+#endif
+#if ASYNCFIFO_COUNT > 2
+ ASYNCFIFO_FLUSH_SIZE(2),
+#endif
+
+#define ASYNCFIFO_SECURE_ADDR(i) \
+ STB_ATTR(asyncfifo##i##_secure_addr)
+#if ASYNCFIFO_COUNT > 0
+ ASYNCFIFO_SECURE_ADDR(0),
+#endif
+#if ASYNCFIFO_COUNT > 1
+ ASYNCFIFO_SECURE_ADDR(1),
+#endif
+#if ASYNCFIFO_COUNT > 2
+ ASYNCFIFO_SECURE_ADDR(2),
+#endif
- __ATTR_NULL
+#define ASYNCFIFO_SECURE_ENABLE(i)\
+ STB_ATTR(asyncfifo##i##_secure_enable)
+#if ASYNCFIFO_COUNT > 0
+ ASYNCFIFO_SECURE_ENABLE(0),
+#endif
+#if ASYNCFIFO_COUNT > 1
+ ASYNCFIFO_SECURE_ENABLE(1),
+#endif
+#if ASYNCFIFO_COUNT > 2
+ ASYNCFIFO_SECURE_ENABLE(2),
+#endif
+#define DSC_SOURCE(i) \
+ STB_ATTR(dsc##i##_source)
+#if DSC_DEV_COUNT > 0
+ DSC_SOURCE(0),
+#endif
+#if DSC_DEV_COUNT > 1
+ DSC_SOURCE(1),
+#endif
+#define DSC_FREE_DSCS(i) \
+ STB_ATTR(dsc##i##_free_dscs)
+#if DSC_DEV_COUNT > 0
+ DSC_FREE_DSCS(0),
+#endif
+#if DSC_DEV_COUNT > 1
+ DSC_FREE_DSCS(1),
+#endif
+ NULL
};
+
+ATTRIBUTE_GROUPS(aml_stb_class);
+
static struct class aml_stb_class = {
.name = "stb",
- .class_attrs = aml_stb_class_attrs,
+ .class_groups = aml_stb_class_groups,
};
+static int s_add_s2p2 = 0;
+static int s_add_ts_in = 0;
+static int s_add_asyncfifo = 0;
+
+static int get_hw_config(struct platform_device *pdev) {
+ char buf[32];
+ u32 value;
+ int ret = 0;
+
+ if (pdev->dev.of_node) {
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "key_endia");
+ ret = of_property_read_u32(pdev->dev.of_node, buf,
+ &value);
+ if (!ret) {
+ pr_inf("%s: 0x%x\n", buf, value);
+ dsc_set_key_endia(value);
+ } else {
+ pr_inf("read error:%s: 0x%x\n", buf, value);
+ }
+
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "add_s2p2");
+ ret = of_property_read_u32(pdev->dev.of_node, buf,
+ &value);
+ if (!ret) {
+ pr_inf("%s: 0x%x\n", buf, value);
+ s_add_s2p2 = value;
+ aml_s2p_add(value);
+ } else {
+ pr_inf("read error:%s: 0x%x\n", buf, value);
+ }
+
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "add_ts_in");
+ ret = of_property_read_u32(pdev->dev.of_node, buf,
+ &value);
+ if (!ret) {
+ pr_inf("%s: 0x%x\n", buf, value);
+ s_add_ts_in = value;
+ } else {
+ pr_inf("read error:%s: 0x%x\n", buf, value);
+ }
+
+ memset(buf, 0, 32);
+ snprintf(buf, sizeof(buf), "add_asyncfifo");
+ ret = of_property_read_u32(pdev->dev.of_node, buf,
+ &value);
+ if (!ret) {
+ pr_inf("%s: 0x%x\n", buf, value);
+ s_add_asyncfifo = value;
+ } else {
+ pr_inf("read error:%s: 0x%x\n", buf, value);
+ }
+ }
+ return 0;
+}
/*
*extern int aml_regist_dmx_class(void);
@@ -1927,30 +2094,6 @@ static int aml_dvb_probe(struct platform_device *pdev)
pr_dbg("probe amlogic dvb driver [%s]\n", DVB_VERSION);
- /*switch_mod_gate_by_name("demux", 1); */
-#if 0
- /*no used reset ctl to set clk*/
- aml_dvb_demux_reset_ctl =
- devm_reset_control_get(&pdev->dev, "demux");
- pr_inf("dmx rst ctl = %p\n", aml_dvb_demux_reset_ctl);
- reset_control_deassert(aml_dvb_demux_reset_ctl);
-
- aml_dvb_afifo_reset_ctl =
- devm_reset_control_get(&pdev->dev, "asyncfifo");
- pr_inf("asyncfifo rst ctl = %p\n", aml_dvb_afifo_reset_ctl);
- reset_control_deassert(aml_dvb_afifo_reset_ctl);
-
- aml_dvb_ahbarb0_reset_ctl =
- devm_reset_control_get(&pdev->dev, "ahbarb0");
- pr_inf("ahbarb0 rst ctl = %p\n", aml_dvb_ahbarb0_reset_ctl);
- reset_control_deassert(aml_dvb_ahbarb0_reset_ctl);
-
- aml_dvb_uparsertop_reset_ctl =
- devm_reset_control_get(&pdev->dev, "uparsertop");
- pr_inf("uparsertop rst ctl = %p\n", aml_dvb_uparsertop_reset_ctl);
- reset_control_deassert(aml_dvb_uparsertop_reset_ctl);
-#else
-
if (get_cpu_type() < MESON_CPU_MAJOR_ID_G12A)
{
aml_dvb_demux_clk =
@@ -1990,18 +2133,15 @@ static int aml_dvb_probe(struct platform_device *pdev)
amports_switch_gate("demux", 1);
amports_switch_gate("ahbarb0", 1);
amports_switch_gate("parser_top", 1);
- if (get_cpu_type() == MESON_CPU_MAJOR_ID_TL1)
- {
- aml_dvb_afifo_clk =
+ aml_dvb_afifo_clk =
devm_clk_get(&pdev->dev, "asyncfifo");
- if (IS_ERR_OR_NULL(aml_dvb_afifo_clk)) {
- dev_err(&pdev->dev, "get asyncfifo clk fail\n");
- return -1;
- }
+ if (IS_ERR_OR_NULL(aml_dvb_afifo_clk)) {
+ dev_err(&pdev->dev, "get asyncfifo clk fail\n");
+ } else {
clk_prepare_enable(aml_dvb_afifo_clk);
}
}
-#endif
+
advb = &aml_dvb_device;
memset(advb, 0, sizeof(aml_dvb_device));
@@ -2012,15 +2152,11 @@ static int aml_dvb_probe(struct platform_device *pdev)
advb->stb_source = -1;
advb->tso_source = -1;
- if (get_cpu_type() < MESON_CPU_MAJOR_ID_TL1) {
- advb->ts_in_total_count = 3;
- advb->s2p_total_count = 2;
- advb->async_fifo_total_count = 2;
- } else {
- advb->ts_in_total_count = 4;
- advb->s2p_total_count = 3;
- advb->async_fifo_total_count = 3;
- }
+ get_hw_config(pdev);
+
+ advb->ts_in_total_count = 3 + s_add_ts_in;
+ advb->s2p_total_count = 2 + s_add_s2p2;
+ advb->async_fifo_total_count = 2 + s_add_asyncfifo;
for (i = 0; i < DMX_DEV_COUNT; i++) {
advb->dmx[i].dmx_irq = -1;
@@ -2166,7 +2302,7 @@ static int aml_dvb_probe(struct platform_device *pdev)
tsdemux_set_ops(NULL);
#endif
- //pengcc add for dvb using linux TV frontend api init
+ //add for dvb using linux TV frontend api init
{
struct demod_config config;
char buf[32];
@@ -2561,7 +2697,7 @@ static int aml_dvb_remove(struct platform_device *pdev)
amports_switch_gate("ahbarb0", 0);
amports_switch_gate("parser_top", 0);
- if (get_cpu_type() == MESON_CPU_MAJOR_ID_TL1) {
+ if (!IS_ERR_OR_NULL(aml_dvb_afifo_clk)) {
clk_disable_unprepare(aml_dvb_afifo_clk);
}
}
diff --git a/drivers/stream_input/parser/hw_demux/aml_dvb.h b/drivers/stream_input/parser/hw_demux/aml_dvb.h
index 5c943c8..340dc5b 100644
--- a/drivers/stream_input/parser/hw_demux/aml_dvb.h
+++ b/drivers/stream_input/parser/hw_demux/aml_dvb.h
@@ -41,7 +41,6 @@
#include <linux/earlysuspend.h>
#endif
-
#include <dvbdev.h>
#include <demux.h>
#include <dvb_demux.h>
@@ -49,6 +48,7 @@
#include <dvb_filter.h>
#include <dvb_net.h>
#include <dvb_ringbuffer.h>
+#include <dvb_frontend.h>
#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
@@ -75,31 +75,6 @@
#define SEC_BUF_BUSY_SIZE 4
#define SEC_BUF_COUNT (SEC_BUF_GRP_COUNT*8)
-enum aml_dmx_id_t {
- AM_DMX_0 = 0,
- AM_DMX_1,
- AM_DMX_2,
- AM_DMX_MAX,
-};
-
-enum aml_ts_source_t {
- AM_TS_SRC_TS0,
- AM_TS_SRC_TS1,
- AM_TS_SRC_TS2,
- AM_TS_SRC_TS3,
-
- AM_TS_SRC_S_TS0,
- AM_TS_SRC_S_TS1,
- AM_TS_SRC_S_TS2,
- AM_TS_SRC_S_TS3,
-
- AM_TS_SRC_HIU,
- AM_TS_SRC_HIU1,
- AM_TS_SRC_DMX0,
- AM_TS_SRC_DMX1,
- AM_TS_SRC_DMX2
-};
-
struct aml_sec_buf {
unsigned long addr;
int len;
@@ -368,7 +343,8 @@ extern int dsc_set_key(struct aml_dsc_channel *ch, int flags,
enum ca_cw_type type, u8 *key);
extern void dsc_release(void);
extern int aml_ciplus_hw_set_source(int src);
-
+extern int dsc_set_key_endia(int key_endia);
+extern int aml_s2p_add(int num);
/*AMLogic ASYNC FIFO interface*/
extern int aml_asyncfifo_hw_init(struct aml_asyncfifo *afifo);
extern int aml_asyncfifo_hw_deinit(struct aml_asyncfifo *afifo);
diff --git a/drivers/stream_input/parser/hw_demux/aml_dvb_reg.h b/drivers/stream_input/parser/hw_demux/aml_dvb_reg.h
index dbfa6ba..07fb423 100644
--- a/drivers/stream_input/parser/hw_demux/aml_dvb_reg.h
+++ b/drivers/stream_input/parser/hw_demux/aml_dvb_reg.h
@@ -18,9 +18,9 @@
#ifndef _DVB_REG_H_
#define _DVB_REG_H_
-#include <linux/amlogic/iomap.h>
-
-#include <linux/amlogic/cpu_version.h>
+//#include <linux/amlogic/iomap.h>
+#include <linux/amlogic/media/registers/register_map.h>
+//#include <linux/amlogic/cpu_version.h>
#define ID_STB_CBUS_BASE 0
#define ID_SMARTCARD_REG_BASE 1
diff --git a/drivers/stream_input/parser/hw_demux/c_stb_regs_define.h b/drivers/stream_input/parser/hw_demux/c_stb_regs_define.h
index b12db68..e351771 100644
--- a/drivers/stream_input/parser/hw_demux/c_stb_regs_define.h
+++ b/drivers/stream_input/parser/hw_demux/c_stb_regs_define.h
@@ -27,7 +27,7 @@
#ifndef __MACH_MESON8_REG_ADDR_H_
#define __MACH_MESON8_REG_ADDR_H_
-#include <linux/amlogic/iomap.h>
+#include <linux/amlogic/media/registers/register_map.h>
#define CBUS_REG_ADDR(_r) aml_read_cbus(_r)