Merge pull request #3824 from codesnake/wetek_update

WeTek update
This commit is contained in:
Stephan Raue 2015-01-23 20:30:38 +01:00
commit 9427dd238d
12 changed files with 158 additions and 2841 deletions

View File

@ -17,7 +17,7 @@
################################################################################
PKG_NAME="opengl-meson6"
PKG_VERSION="r4p0-01-armhf"
PKG_VERSION="r4p1-armhf"
PKG_REV="1"
PKG_ARCH="arm"
PKG_LICENSE="nonfree"

View File

@ -19,7 +19,7 @@
PKG_NAME="linux"
case "$LINUX" in
amlogic)
PKG_VERSION="amlogic-3.10-24e850b-oe"
PKG_VERSION="amlogic-3.10-fa4c242"
PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz"
;;
imx6)

View File

@ -475,7 +475,7 @@ CONFIG_USE_OF=y
CONFIG_ATAGS=y
CONFIG_DEPRECATED_PARAM_STRUCT=y
CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE=y
CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES="meson6_g18"
CONFIG_BUILD_ARM_APPENDED_DTB_IMAGE_NAMES="wetek_play"
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
CONFIG_ARM_APPENDED_DTB=y
@ -1286,6 +1286,7 @@ CONFIG_MALI_DMA_BUF_MAP_ON_ATTACH=y
CONFIG_MALI_SHARED_INTERRUPTS=y
CONFIG_MESON6_GPU_EXTRA=y
# CONFIG_MALI_PMU_PARALLEL_POWER_UP is not set
# CONFIG_MALI_QUIET is not set
#
# ION support

View File

@ -51,7 +51,7 @@
KERNEL_UBOOT_TARGET="uImage-dtb"
# Kernel extra targets to build
KERNEL_UBOOT_EXTRA_TARGET="meson6_g18.dtd"
KERNEL_UBOOT_EXTRA_TARGET="wetek_play.dtd"
# Additional kernel make parameters (for example to specify the u-boot loadaddress)
KERNEL_MAKE_EXTRACMD=""

View File

@ -0,0 +1,75 @@
diff -Naur a/drivers/amlogic/ethernet/am_net8218.c b/drivers/amlogic/ethernet/am_net8218.c
--- a/drivers/amlogic/ethernet/am_net8218.c 2015-01-04 18:07:58.000000000 +0100
+++ b/drivers/amlogic/ethernet/am_net8218.c 2015-01-20 23:44:29.000000000 +0100
@@ -1251,6 +1251,11 @@
goto out_err;
}
+ if (irq_set_affinity(dev->irq, cpumask_of(1))) {
+ printk(KERN_DEBUG "unable to set irq affinity (irq=%d, cpu=%u)\n",
+ dev->irq, 1);
+ }
+
if (g_debug > 0)
printk(KERN_DEBUG "%s: opened (irq %d).\n",
dev->name, dev->irq);
diff -Naur a/drivers/amlogic/mmc/aml_sdio.c b/drivers/amlogic/mmc/aml_sdio.c
--- a/drivers/amlogic/mmc/aml_sdio.c 2015-01-04 18:07:58.000000000 +0100
+++ b/drivers/amlogic/mmc/aml_sdio.c 2015-01-21 00:05:08.000000000 +0100
@@ -1267,6 +1267,11 @@
return NULL;
}
+ if (irq_set_affinity(INT_SDIO, cpumask_of(1))) {
+ printk(KERN_DEBUG "unable to set irq affinity (irq=%d, cpu=%u)\n",
+ INT_SDIO, 1);
+ }
+
host->bn_buf = dma_alloc_coherent(NULL, SDIO_BOUNCE_REQ_SIZE,
&host->bn_dma_buf, GFP_KERNEL);
if(NULL == host->bn_buf){
diff -Naur a/drivers/amlogic/usb/dwc_otg/310/dwc_otg_driver.c b/drivers/amlogic/usb/dwc_otg/310/dwc_otg_driver.c
--- a/drivers/amlogic/usb/dwc_otg/310/dwc_otg_driver.c 2015-01-04 18:07:58.000000000 +0100
+++ b/drivers/amlogic/usb/dwc_otg/310/dwc_otg_driver.c 2015-01-20 18:02:40.000000000 +0100
@@ -1202,7 +1202,10 @@
} else {
dwc_otg_device->common_irq_installed = 1;
}
-
+ if (irq_set_affinity(_dev->irq, cpumask_of(1))) {
+ pr_warning("unable to set irq affinity (irq=%d, cpu=%u)\n",
+ _dev->irq, 1);
+ }
#ifdef LM_INTERFACE
// set_irq_type(_dev->irq, IRQT_LOW);
#endif
diff -Naur a/drivers/amlogic/usb/dwc_otg/310/dwc_otg_hcd_linux.c b/drivers/amlogic/usb/dwc_otg/310/dwc_otg_hcd_linux.c
--- a/drivers/amlogic/usb/dwc_otg/310/dwc_otg_hcd_linux.c 2015-01-04 18:07:58.000000000 +0100
+++ b/drivers/amlogic/usb/dwc_otg/310/dwc_otg_hcd_linux.c 2015-01-20 18:06:35.000000000 +0100
@@ -610,7 +610,11 @@
if (retval < 0) {
goto error2;
}
-
+ if (irq_set_affinity(_dev->irq, cpumask_of(1))) {
+ pr_warning("unable to set irq affinity (irq=%d, cpu=%u)\n",
+ _dev->irq, 1);
+ }
+
dwc_otg_hcd_set_priv_data(dwc_otg_hcd, hcd);
return 0;
diff -Naur a/drivers/amlogic/usb/dwc_otg/310/dwc_otg_pcd_linux.c b/drivers/amlogic/usb/dwc_otg/310/dwc_otg_pcd_linux.c
--- a/drivers/amlogic/usb/dwc_otg/310/dwc_otg_pcd_linux.c 2015-01-04 18:07:58.000000000 +0100
+++ b/drivers/amlogic/usb/dwc_otg/310/dwc_otg_pcd_linux.c 2015-01-20 18:03:14.000000000 +0100
@@ -1290,6 +1290,10 @@
return -EBUSY;
}
+ if (irq_set_affinity(_dev->irq, cpumask_of(1))) {
+ pr_warning("unable to set irq affinity (irq=%d, cpu=%u)\n",
+ _dev->irq, 1);
+ }
dwc_otg_pcd_start(gadget_wrapper->pcd, &fops);
return retval;

View File

@ -1,3 +1,39 @@
diff -Naur a/arch/arm/plat-meson/include/plat/bt_device.h b/arch/arm/plat-meson/include/plat/bt_device.h
--- a/arch/arm/plat-meson/include/plat/bt_device.h 2015-01-15 18:54:51.000000000 +0100
+++ b/arch/arm/plat-meson/include/plat/bt_device.h 2015-01-22 14:31:05.000000000 +0100
@@ -21,6 +21,7 @@
int gpio_en;
int gpio_host_wake;
int gpio_wake;
+ struct pinctrl *pinctrl;
};
#endif
diff -Naur a/drivers/amlogic/bluetooth/bt_device.c b/drivers/amlogic/bluetooth/bt_device.c
--- a/drivers/amlogic/bluetooth/bt_device.c 2015-01-15 18:54:08.000000000 +0100
+++ b/drivers/amlogic/bluetooth/bt_device.c 2015-01-22 14:26:14.000000000 +0100
@@ -170,6 +170,9 @@
} else {
pdata->gpio_wake = amlogic_gpio_name_map_num(str);
}
+
+ pdata->pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
+
}
#else
pdata = (struct bt_dev_data *)(pdev->dev.platform_data);
@@ -242,7 +245,10 @@
pdata = prdata->pdata;
}
- if(pdata) {
+ if(pdata) {
+ if (pdata->pinctrl)
+ devm_pinctrl_put(pdata->pinctrl);
+
bt_device_deinit(pdata);
kfree(pdata);
}
diff -Naur a/drivers/amlogic/Kconfig b/drivers/amlogic/Kconfig
--- a/drivers/amlogic/Kconfig 2015-01-04 18:07:57.000000000 +0100
+++ b/drivers/amlogic/Kconfig 2015-01-01 15:31:17.000000000 +0100
@ -23,8 +59,8 @@ diff -Naur a/drivers/amlogic/Makefile b/drivers/amlogic/Makefile
diff -Naur a/drivers/amlogic/wetek/avl6211.c b/drivers/amlogic/wetek/avl6211.c
--- a/drivers/amlogic/wetek/avl6211.c 1970-01-01 01:00:00.000000000 +0100
+++ b/drivers/amlogic/wetek/avl6211.c 2015-01-14 16:08:49.000000000 +0100
@@ -0,0 +1,1970 @@
+++ b/drivers/amlogic/wetek/avl6211.c 2015-01-22 14:01:34.000000000 +0100
@@ -0,0 +1,1977 @@
+/*
+ * Driver for the Availink AVL6211+AV2011 DVB-S/S2 demod+tuner
+ *
@ -98,6 +134,7 @@ diff -Naur a/drivers/amlogic/wetek/avl6211.c b/drivers/amlogic/wetek/avl6211.c
+ u16 fec_freq; /* FEC clock in 10kHz units */
+ u16 mpeg_freq; /* MPEG clock in 10kHz units */
+
+ bool boot;
+};
+struct avl6211_diseqc_tx_status
+{
@ -1814,6 +1851,9 @@ diff -Naur a/drivers/amlogic/wetek/avl6211.c b/drivers/amlogic/wetek/avl6211.c
+ struct avl6211_state* state = fe->demodulator_priv;
+ int ret;
+
+ if (state->boot)
+ return 0;
+
+ ret = avl6211_setup_pll(state, (const struct avl6211_pllconf * )(pll_conf + state->config->demod_refclk));
+ if (ret)
+ goto err;
@ -1907,7 +1947,10 @@ diff -Naur a/drivers/amlogic/wetek/avl6211.c b/drivers/amlogic/wetek/avl6211.c
+ if (ret)
+ goto err;
+
+ state->boot = true;
+
+ dev_info(&state->i2c->dev, "AVL6211+AV2011 init OK\n");
+
+ return 0;
+
+err:
@ -3997,8 +4040,8 @@ diff -Naur a/drivers/amlogic/wetek/Makefile b/drivers/amlogic/wetek/Makefile
+EXTRA_CFLAGS += -I.
diff -Naur a/drivers/amlogic/wetek/mn88436.c b/drivers/amlogic/wetek/mn88436.c
--- a/drivers/amlogic/wetek/mn88436.c 1970-01-01 01:00:00.000000000 +0100
+++ b/drivers/amlogic/wetek/mn88436.c 2015-01-11 20:30:56.000000000 +0100
@@ -0,0 +1,378 @@
+++ b/drivers/amlogic/wetek/mn88436.c 2015-01-22 13:56:46.000000000 +0100
@@ -0,0 +1,379 @@
+/*
+ * Driver for the Panasonic MN88436 ATSC demodulator
+ *
@ -4199,8 +4242,9 @@ diff -Naur a/drivers/amlogic/wetek/mn88436.c b/drivers/amlogic/wetek/mn88436.c
+ int ret, i;
+ u8 d;
+
+ state->boot = false;
+
+ if (state->boot)
+ return 0;
+
+ dev_info(&state->i2c->dev, "Uploading demod firmware (%s)...\n", MN88436_DEMOD_ATSC);
+
+ ret = request_firmware(&fw, MN88436_DEMOD_ATSC, &state->i2c->dev);
@ -5613,8 +5657,8 @@ diff -Naur a/drivers/amlogic/wetek/mxl603.h b/drivers/amlogic/wetek/mxl603.h
+#endif /* __MXL603_H__ */
diff -Naur a/drivers/amlogic/wetek/nimdetect.c b/drivers/amlogic/wetek/nimdetect.c
--- a/drivers/amlogic/wetek/nimdetect.c 1970-01-01 01:00:00.000000000 +0100
+++ b/drivers/amlogic/wetek/nimdetect.c 2015-01-11 20:28:06.000000000 +0100
@@ -0,0 +1,411 @@
+++ b/drivers/amlogic/wetek/nimdetect.c 2015-01-20 19:31:24.000000000 +0100
@@ -0,0 +1,422 @@
+/*
+ * Wetek NIMs/DVB detection
+ *
@ -5740,15 +5784,27 @@ diff -Naur a/drivers/amlogic/wetek/nimdetect.c b/drivers/amlogic/wetek/nimdetect
+extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
+ __u8 requesttype, __u16 value, __u16 index, void *data,
+ __u16 size, int timeout);
+extern const unsigned long cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)];
+extern int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force);
+
+EXPORT_SYMBOL(usb_bus_list);
+EXPORT_SYMBOL(usb_bus_list_lock);
+EXPORT_SYMBOL(usb_hub_find_child);
+EXPORT_SYMBOL(usb_get_dev);
+EXPORT_SYMBOL(usb_control_msg);
+EXPORT_SYMBOL(get_nims_infos);
+EXPORT_SYMBOL(__irq_set_affinity);
+
+
+
+const struct cpumask *aml_get_cpu_mask(unsigned int cpu)
+{
+ const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG];
+ p -= cpu / BITS_PER_LONG;
+ return to_cpumask(p);
+}
+EXPORT_SYMBOL(aml_get_cpu_mask);
+
+void get_nims_infos(struct wetek_nims *p)
+{
+ memcpy(p, &weteknims, sizeof(struct wetek_nims));
@ -5861,7 +5917,6 @@ diff -Naur a/drivers/amlogic/wetek/nimdetect.c b/drivers/amlogic/wetek/nimdetect
+ amlogic_gpio_direction_output(GPIOD_8, 0, "nimdetect");
+ msleep(600);
+ amlogic_gpio_direction_output(GPIOD_8, 1, "nimdetect");
+
+ msleep(200);
+
+

View File

@ -0,0 +1,14 @@
diff --git a/arch/arm/boot/dts/amlogic/wetek_play.dtd b/arch/arm/boot/dts/amlogic/wetek_play.dtd
index 3fc5e4e..3d3601f 100755
--- a/arch/arm/boot/dts/amlogic/wetek_play.dtd
+++ b/arch/arm/boot/dts/amlogic/wetek_play.dtd
@@ -20,6 +20,9 @@ void root_func(){
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <1>;
+ chosen {
+ bootargs = "root=/dev/ram0 rdinit=/init boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 BOOT_IMAGE=kernel.img console=tty0 consoleblank=0 scaling_governor=hotplug scaling_min_freq=200000 scaling_max_freq=1500000 systemd.show_status=auto";
+ };
/// ***************************************************************************************
/// - CPU

File diff suppressed because it is too large Load Diff

View File

@ -1,53 +0,0 @@
--- a/include/linux/amlogic/ge2d/ge2d_wq.h 2015-01-14 00:46:24.916408987 +0100
+++ b/include/linux/amlogic/ge2d/ge2d_wq.h 2015-01-14 00:45:24.233715480 +0100
@@ -81,6 +81,7 @@
ge2d_event_t event ;
int irq_num;
int ge2d_state;
+ spinlock_t state_lock; //for sync access to ge2d_state
int process_queue_state;
}ge2d_manager_t ;
--- a/drivers/amlogic/display/ge2d/ge2d_wq.c 2015-01-14 00:59:18.775744127 +0100
+++ b/drivers/amlogic/display/ge2d/ge2d_wq.c 2015-01-14 00:58:59.440160948 +0100
@@ -144,9 +144,11 @@
}while(pos!=head);
ge2d_manager.last_wq=wq;
exit:
+ spin_lock(&ge2d_manager.state_lock);
if(ge2d_manager.ge2d_state==GE2D_STATE_REMOVING_WQ)
- complete(&ge2d_manager.event.process_complete);
+ complete(&ge2d_manager.event.process_complete);
ge2d_manager.ge2d_state=GE2D_STATE_IDLE;
+ spin_unlock(&ge2d_manager.state_lock);
return ret;
}
@@ -854,8 +856,17 @@
spin_unlock(&ge2d_manager.event.sem_lock);
if((ge2d_manager.current_wq==ge2d_work_queue)&&(ge2d_manager.ge2d_state== GE2D_STATE_RUNNING))
{
- ge2d_manager.ge2d_state=GE2D_STATE_REMOVING_WQ;
- wait_for_completion(&ge2d_manager.event.process_complete);
+ // check again with lock
+ int wasRunning = 0;
+ spin_lock(&ge2d_manager.state_lock);
+ if (ge2d_manager.ge2d_state== GE2D_STATE_RUNNING)
+ {
+ ge2d_manager.ge2d_state=GE2D_STATE_REMOVING_WQ;
+ wasRunning = 1;
+ }
+ spin_unlock(&ge2d_manager.state_lock);
+ if (wasRunning)
+ wait_for_completion(&ge2d_manager.event.process_complete);
ge2d_manager.last_wq=NULL; //condition so complex ,simplify it .
}//else we can delete it safely.
@@ -902,6 +913,7 @@
//prepare bottom half
spin_lock_init(&ge2d_manager.event.sem_lock);
+ spin_lock_init(&ge2d_manager.state_lock);
sema_init (&ge2d_manager.event.cmd_in_sem,1);
init_waitqueue_head (&ge2d_manager.event.cmd_complete);
init_completion(&ge2d_manager.event.process_complete);

View File

@ -1,11 +0,0 @@
--- a/arch/arm/mach-meson6/clock.c.orig 2015-01-14 18:04:05.216364113 +0100
+++ b/arch/arm/mach-meson6/clock.c 2015-01-14 18:04:22.807966326 +0100
@@ -1419,7 +1419,7 @@
#endif /* CONFIG_SMP */
int error = 0;
- int cpu_freq_limit = 1200000000;
+ int cpu_freq_limit = 1512000000;
if (rate < 1000)
rate *= 1000000;

View File

@ -1,36 +0,0 @@
--- a/arch/arm/mach-meson6/hdmi_tx_hw/hdmi_tx_hw.c.orig 2015-01-15 22:15:55.446965413 +0100
+++ b/arch/arm/mach-meson6/hdmi_tx_hw/hdmi_tx_hw.c 2015-01-15 22:16:13.378517737 +0100
@@ -1999,6 +1999,7 @@
{
unsigned int audio_N_para = 6272;
unsigned int audio_N_tolerance = 3;
+ unsigned int multiplier = 1;
// unsigned int audio_CTS = 30000;
hdmi_print(INF, AUD "audio channel num is %d\n", hdmitx_device->cur_audio_param.channel_num);
@@ -2122,15 +2123,22 @@
hdmi_print(INF, AUD "reset audio N para\n");
switch(audio_param->sample_rate){
case FS_44K1:
- audio_N_para = 6272 * 2;
- break;
case FS_48K:
- audio_N_para = 6144 * 2;
+ multiplier = 2;
break;
default:
break;
}
+ //1080p24hz mode is a special case - at least for yamaha amps
+ //it needs 3 times the normal npara to get a stable audio lock
+ if((hdmitx_device->cur_VIC == HDMI_1080p24))
+ {
+ multiplier = 3;
+ }
+
+ audio_N_para *= multiplier;
+
//TODO. Different audio type, maybe have different settings
switch(audio_param->type){
case CT_PCM: