Merge pull request #1728 from CvH/mb_le8_4.12

media_build: update to 20.06.2017
This commit is contained in:
Christian Hewitt 2017-07-01 13:00:53 +04:00 committed by GitHub
commit 11ea667968
11 changed files with 875 additions and 721 deletions

View File

@ -2,135 +2,138 @@
# Automatically generated file; DO NOT EDIT.
# V4L/DVB menu
#
CONFIG_MMC=y
# CONFIG_SND_SOC_SI476X is not set
# CONFIG_GENERIC_PHY is not set
CONFIG_HAVE_CLK=y
# CONFIG_SOC_IMX27 is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_BROKEN is not set
CONFIG_SND_SOC=y
CONFIG_ISA_DMA_API=y
CONFIG_REGMAP=y
# CONFIG_STA2X11 is not set
# CONFIG_ARCH_OMAP4 is not set
CONFIG_SERIO=y
# CONFIG_PLAT_S5P is not set
CONFIG_USB_ACM=m
# CONFIG_ALPHA is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_ARCH_MMP is not set
# CONFIG_SRAM is not set
# CONFIG_ARCH_OMAP2 is not set
# CONFIG_FB_VIA is not set
# CONFIG_MTD is not set
# CONFIG_MTK_IOMMU is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_PLAT_S3C24XX is not set
# CONFIG_ARM_DMA_USE_IOMMU is not set
# CONFIG_SPI is not set
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_BITREVERSE=y
CONFIG_CRC32=y
CONFIG_COMMON_CLK=y
CONFIG_FONT_8x16=y
CONFIG_FONT_SUPPORT=y
# CONFIG_TI_ST is not set
# CONFIG_SOC_EXYNOS5250 is not set
# CONFIG_REGULATOR is not set
# CONFIG_SOC_EXYNOS4212 is not set
CONFIG_I2C_MUX=m
# CONFIG_MFD_SI476X_CORE is not set
CONFIG_GPIOLIB=y
CONFIG_PNP=y
CONFIG_PCI_MSI=y
CONFIG_DEBUG_FS=y
# CONFIG_REGMAP_MMIO is not set
CONFIG_SND_PCM=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_SYSFS=y
CONFIG_RATIONAL=y
CONFIG_PINCTRL=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_PWM_OMAP_DMTIMER is not set
# CONFIG_ARCH_OMAP3 is not set
# CONFIG_BROKEN is not set
# CONFIG_ARM_DMA_USE_IOMMU is not set
CONFIG_HDMI=y
CONFIG_LEDS_CLASS_FLASH=y
CONFIG_PCI_MSI=y
# CONFIG_MTK_IOMMU_V1 is not set
# CONFIG_RPMSG is not set
# CONFIG_PLAT_S3C24XX is not set
# CONFIG_FB_VIA is not set
# CONFIG_SND_FM801 is not set
# CONFIG_I2C_GPIO is not set
CONFIG_I2C=y
CONFIG_HAVE_CLK=y
# CONFIG_REGULATOR is not set
CONFIG_PM=y
# CONFIG_ARCH_MEDIATEK is not set
# CONFIG_PPC_MPC512x is not set
# CONFIG_SPARC64 is not set
# CONFIG_ARCH_SHMOBILE is not set
CONFIG_SND_AC97_CODEC=m
CONFIG_SND=y
# CONFIG_ARCH_MULTIPLATFORM is not set
# CONFIG_ISA is not set
CONFIG_DEBUG_FS=y
CONFIG_MODULES=y
CONFIG_LEDS_CLASS=y
# CONFIG_METAG is not set
# CONFIG_OMAP2_VRFB is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_ARCH_S5PV210 is not set
# CONFIG_OF is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_PWM_OMAP_DMTIMER is not set
CONFIG_RFKILL=m
# CONFIG_SONY_LAPTOP is not set
# CONFIG_FB_OMAP2 is not set
CONFIG_INPUT=y
# CONFIG_OMAP_IOMMU is not set
# CONFIG_SPARC32 is not set
# CONFIG_SOC_AM43XX is not set
CONFIG_HAS_DMA=y
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_I2C=y
# CONFIG_M32R is not set
# CONFIG_SND_ISA is not set
CONFIG_INET=y
# CONFIG_ARCH_OMAP3 is not set
# CONFIG_SPI is not set
# CONFIG_MFD_WL1273_CORE is not set
CONFIG_SND_PCM=y
CONFIG_MMU=y
CONFIG_MFD_CORE=y
CONFIG_HAS_IOMEM=y
CONFIG_FB=y
CONFIG_MMC=y
CONFIG_USB=y
CONFIG_SYSFS=y
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_FONT_SUPPORT=y
CONFIG_RATIONAL=y
CONFIG_CRC32=y
CONFIG_SERIO=y
# CONFIG_ARCH_SUNXI is not set
CONFIG_FW_LOADER=y
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_PLAT_S5P is not set
# CONFIG_OMAP_DM_TIMER is not set
# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_SND_ISA is not set
CONFIG_ISA_DMA_API=y
CONFIG_NEW_LEDS=y
CONFIG_PCI=y
# CONFIG_ARCH_STI is not set
# CONFIG_ARCH_RENESAS is not set
CONFIG_TTY=y
# CONFIG_SND_MIRO is not set
# CONFIG_GENERIC_ALLOCATOR is not set
CONFIG_VIRT_TO_BUS=y
# CONFIG_SOC_EXYNOS4412 is not set
CONFIG_FIREWIRE=m
# CONFIG_ARCH_OMAP2PLUS is not set
# CONFIG_VIDEO_V4L1 is not set
CONFIG_FW_LOADER=y
CONFIG_DMA_ENGINE=y
# CONFIG_GENERIC_PHY is not set
CONFIG_HAS_IOMEM=y
CONFIG_NET=y
# CONFIG_ARCH_EXYNOS is not set
CONFIG_USB=y
# CONFIG_ARCH_MESON is not set
CONFIG_MMU=y
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_MFD_WL1273_CORE is not set
# CONFIG_SND_FM801 is not set
# CONFIG_PARPORT is not set
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_SOC_AM43XX is not set
CONFIG_INET=y
# CONFIG_SPARC32 is not set
# CONFIG_TI_ST is not set
# CONFIG_STA2X11 is not set
# CONFIG_MTD is not set
CONFIG_USB_ACM=m
# CONFIG_ARCH_STM32 is not set
CONFIG_SND=y
CONFIG_PINCTRL=y
CONFIG_PNP=y
# CONFIG_SRAM is not set
# CONFIG_SG_SPLIT is not set
# CONFIG_SONY_LAPTOP is not set
# CONFIG_ARCH_S5PV210 is not set
CONFIG_COMMON_CLK=y
# CONFIG_SOC_IMX27 is not set
CONFIG_INPUT=y
# CONFIG_OF is not set
CONFIG_FONT_8x16=y
# CONFIG_SOC_EXYNOS5250 is not set
CONFIG_ACPI=y
# CONFIG_ARCH_MMP is not set
CONFIG_FIREWIRE=m
# CONFIG_PLAT_M32700UT is not set
CONFIG_DMA_SHARED_BUFFER=y
# CONFIG_PPC_MPC512x is not set
CONFIG_X86=y
# CONFIG_SND_MIRO is not set
# CONFIG_OMAP_IOMMU is not set
# CONFIG_ARCH_MULTIPLATFORM is not set
CONFIG_VIRT_TO_BUS=y
# CONFIG_ARCH_S3C64XX is not set
# CONFIG_ARCH_SHMOBILE is not set
# CONFIG_PXA27x is not set
# CONFIG_MFD_SI476X_CORE is not set
# CONFIG_ARM64 is not set
# CONFIG_ARCH_OMAP2PLUS is not set
CONFIG_GPIOLIB=y
# CONFIG_FB_OMAP2 is not set
# CONFIG_GENERIC_ALLOCATOR is not set
# CONFIG_OMAP2_VRFB is not set
CONFIG_BITREVERSE=y
# CONFIG_BLACKFIN is not set
# CONFIG_REGMAP_MMIO is not set
CONFIG_RFKILL=m
CONFIG_FB_CFB_FILLRECT=y
CONFIG_TTY=y
# CONFIG_SPI_MASTER is not set
CONFIG_LEDS_CLASS=y
# CONFIG_MTK_IOMMU is not set
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_METAG is not set
CONFIG_REGMAP=y
# CONFIG_ARCH_MESON is not set
# CONFIG_M32R is not set
CONFIG_SND_SOC=y
# CONFIG_ARCH_OMAP4 is not set
CONFIG_HAS_DMA=y
# CONFIG_MFD_SYSCON is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_ARCH_AT91 is not set
# CONFIG_SPARC64 is not set
# CONFIG_ARCH_RENESAS is not set
# CONFIG_ALPHA is not set
CONFIG_FB_CFB_COPYAREA=y
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_MXC is not set
CONFIG_FB=y
# CONFIG_ARCH_DAVINCI_DM365 is not set
# CONFIG_SOC_EXYNOS4412 is not set
# CONFIG_ARCH_STI is not set
CONFIG_I2C_MUX=m
# CONFIG_SND_SOC_SI476X is not set
CONFIG_REGMAP_I2C=y
CONFIG_I2C_ALGOBIT=y
# CONFIG_ARCH_OMAP2 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_MIPS is not set
CONFIG_X86=y
CONFIG_EFI=y
# CONFIG_SOC_DRA7XX is not set
CONFIG_DMA_ENGINE=y
CONFIG_HDMI=y
# CONFIG_VIDEO_V4L1 is not set
# CONFIG_SG_SPLIT is not set
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_PXA27x is not set
CONFIG_FB_CFB_FILLRECT=y
# CONFIG_ARCH_S3C64XX is not set
# CONFIG_PLAT_M32700UT is not set
# CONFIG_I2C_GPIO is not set
# CONFIG_BLACKFIN is not set
CONFIG_NEW_LEDS=y
# CONFIG_ARCH_DAVINCI_DM365 is not set
# CONFIG_ISA is not set
# CONFIG_VIDEO_KERNEL_VERSION is not set
CONFIG_MEDIA_SUPPORT=m
@ -150,6 +153,7 @@ CONFIG_VIDEO_V4L2=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_TUNER=m
CONFIG_V4L2_FWNODE=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_DMA_SG=m
CONFIG_VIDEOBUF_VMALLOC=m
@ -202,6 +206,7 @@ CONFIG_RC_LOOPBACK=m
CONFIG_IR_GPIO_CIR=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
# CONFIG_IR_SIR is not set
CONFIG_MEDIA_USB_SUPPORT=y
#
@ -226,7 +231,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
# CONFIG_VIDEO_STK1160_AC97 is not set
CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@ -290,6 +294,8 @@ CONFIG_DVB_USB_TBS5220=m
CONFIG_DVB_USB_TBS5881=m
CONFIG_DVB_USB_TBS5520=m
CONFIG_DVB_USB_TBS5927=m
CONFIG_DVB_USB_TBS5520SE=m
CONFIG_DVB_USB_CYCITV=m
CONFIG_DVB_USB_V2=m
CONFIG_DVB_USB_AF9015=m
CONFIG_DVB_USB_AF9035=m
@ -303,6 +309,7 @@ CONFIG_DVB_USB_LME2510=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
CONFIG_DVB_USB_DVBSKY=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DVB_TTUSB_BUDGET=m
CONFIG_DVB_TTUSB_DEC=m
CONFIG_SMS_USB_DRV=m
@ -460,6 +467,7 @@ CONFIG_VIDEO_CX25840=m
#
# Camera sensor devices
#
CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV7640=m
CONFIG_VIDEO_MT9V011=m
@ -565,6 +573,7 @@ CONFIG_DVB_CX24120=m
CONFIG_DVB_SI21XX=m
CONFIG_DVB_TS2020=m
CONFIG_DVB_DS3000=m
CONFIG_DVB_DS3K=m
CONFIG_DVB_MB86A16=m
CONFIG_DVB_TDA10071=m
@ -593,6 +602,7 @@ CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
CONFIG_DVB_SI2168=m
CONFIG_DVB_AS102_FE=m
CONFIG_DVB_ZD1301_DEMOD=m
CONFIG_DVB_GP8PSK_FE=m
#
@ -660,6 +670,7 @@ CONFIG_DVB_TAS2101=m
CONFIG_DVB_AVL6882=m
CONFIG_DVB_STV0910=m
CONFIG_DVB_MXL5XX=m
CONFIG_DVB_SI2183=m
#
# Tools to develop new frontends

View File

@ -2,135 +2,138 @@
# Automatically generated file; DO NOT EDIT.
# V4L/DVB menu
#
CONFIG_MMC=y
# CONFIG_SND_SOC_SI476X is not set
# CONFIG_GENERIC_PHY is not set
CONFIG_HAVE_CLK=y
# CONFIG_SOC_IMX27 is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_BROKEN is not set
CONFIG_SND_SOC=y
CONFIG_ISA_DMA_API=y
CONFIG_REGMAP=y
# CONFIG_STA2X11 is not set
# CONFIG_ARCH_OMAP4 is not set
CONFIG_SERIO=y
# CONFIG_PLAT_S5P is not set
CONFIG_USB_ACM=m
# CONFIG_ALPHA is not set
# CONFIG_SPI_MASTER is not set
# CONFIG_ARCH_MMP is not set
# CONFIG_SRAM is not set
# CONFIG_ARCH_OMAP2 is not set
# CONFIG_FB_VIA is not set
# CONFIG_MTD is not set
# CONFIG_MTK_IOMMU is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_PLAT_S3C24XX is not set
# CONFIG_ARM_DMA_USE_IOMMU is not set
# CONFIG_SPI is not set
# CONFIG_MFD_TIMBERDALE is not set
CONFIG_BITREVERSE=y
CONFIG_CRC32=y
CONFIG_COMMON_CLK=y
CONFIG_FONT_8x16=y
CONFIG_FONT_SUPPORT=y
# CONFIG_TI_ST is not set
# CONFIG_SOC_EXYNOS5250 is not set
# CONFIG_REGULATOR is not set
# CONFIG_SOC_EXYNOS4212 is not set
CONFIG_I2C_MUX=m
# CONFIG_MFD_SI476X_CORE is not set
CONFIG_GPIOLIB=y
CONFIG_PNP=y
CONFIG_PCI_MSI=y
CONFIG_DEBUG_FS=y
# CONFIG_REGMAP_MMIO is not set
CONFIG_SND_PCM=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_SYSFS=y
CONFIG_RATIONAL=y
CONFIG_PINCTRL=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_PWM_OMAP_DMTIMER is not set
# CONFIG_ARCH_OMAP3 is not set
# CONFIG_BROKEN is not set
# CONFIG_ARM_DMA_USE_IOMMU is not set
CONFIG_HDMI=y
CONFIG_LEDS_CLASS_FLASH=y
CONFIG_PCI_MSI=y
# CONFIG_MTK_IOMMU_V1 is not set
# CONFIG_RPMSG is not set
# CONFIG_PLAT_S3C24XX is not set
# CONFIG_FB_VIA is not set
# CONFIG_SND_FM801 is not set
# CONFIG_I2C_GPIO is not set
CONFIG_I2C=y
CONFIG_HAVE_CLK=y
# CONFIG_REGULATOR is not set
CONFIG_PM=y
# CONFIG_ARCH_MEDIATEK is not set
# CONFIG_PPC_MPC512x is not set
# CONFIG_SPARC64 is not set
# CONFIG_ARCH_SHMOBILE is not set
CONFIG_SND_AC97_CODEC=m
CONFIG_SND=y
# CONFIG_ARCH_MULTIPLATFORM is not set
# CONFIG_ISA is not set
CONFIG_DEBUG_FS=y
CONFIG_MODULES=y
CONFIG_LEDS_CLASS=y
# CONFIG_METAG is not set
# CONFIG_OMAP2_VRFB is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_ARCH_S5PV210 is not set
# CONFIG_OF is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_PWM_OMAP_DMTIMER is not set
CONFIG_RFKILL=m
# CONFIG_SONY_LAPTOP is not set
# CONFIG_FB_OMAP2 is not set
CONFIG_INPUT=y
# CONFIG_OMAP_IOMMU is not set
# CONFIG_SPARC32 is not set
# CONFIG_SOC_AM43XX is not set
CONFIG_HAS_DMA=y
# CONFIG_OMAP_DM_TIMER is not set
CONFIG_I2C=y
# CONFIG_M32R is not set
# CONFIG_SND_ISA is not set
CONFIG_INET=y
# CONFIG_ARCH_OMAP3 is not set
# CONFIG_SPI is not set
# CONFIG_MFD_WL1273_CORE is not set
CONFIG_SND_PCM=y
CONFIG_MMU=y
CONFIG_MFD_CORE=y
CONFIG_HAS_IOMEM=y
CONFIG_FB=y
CONFIG_MMC=y
CONFIG_USB=y
CONFIG_SYSFS=y
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
CONFIG_FONT_SUPPORT=y
CONFIG_RATIONAL=y
CONFIG_CRC32=y
CONFIG_SERIO=y
# CONFIG_ARCH_SUNXI is not set
CONFIG_FW_LOADER=y
CONFIG_DMA_SHARED_BUFFER=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_PLAT_S5P is not set
# CONFIG_OMAP_DM_TIMER is not set
# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_SND_ISA is not set
CONFIG_ISA_DMA_API=y
CONFIG_NEW_LEDS=y
CONFIG_PCI=y
# CONFIG_ARCH_STI is not set
# CONFIG_ARCH_RENESAS is not set
CONFIG_TTY=y
# CONFIG_SND_MIRO is not set
# CONFIG_GENERIC_ALLOCATOR is not set
CONFIG_VIRT_TO_BUS=y
# CONFIG_SOC_EXYNOS4412 is not set
CONFIG_FIREWIRE=m
# CONFIG_ARCH_OMAP2PLUS is not set
# CONFIG_VIDEO_V4L1 is not set
CONFIG_FW_LOADER=y
CONFIG_DMA_ENGINE=y
# CONFIG_GENERIC_PHY is not set
CONFIG_HAS_IOMEM=y
CONFIG_NET=y
# CONFIG_ARCH_EXYNOS is not set
CONFIG_USB=y
# CONFIG_ARCH_MESON is not set
CONFIG_MMU=y
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_MFD_WL1273_CORE is not set
# CONFIG_SND_FM801 is not set
# CONFIG_PARPORT is not set
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MFD_SYSCON is not set
# CONFIG_SOC_AM43XX is not set
CONFIG_INET=y
# CONFIG_SPARC32 is not set
# CONFIG_TI_ST is not set
# CONFIG_STA2X11 is not set
# CONFIG_MTD is not set
CONFIG_USB_ACM=m
# CONFIG_ARCH_STM32 is not set
CONFIG_SND=y
CONFIG_PINCTRL=y
CONFIG_PNP=y
# CONFIG_SRAM is not set
# CONFIG_SG_SPLIT is not set
# CONFIG_SONY_LAPTOP is not set
# CONFIG_ARCH_S5PV210 is not set
CONFIG_COMMON_CLK=y
# CONFIG_SOC_IMX27 is not set
CONFIG_INPUT=y
# CONFIG_OF is not set
CONFIG_FONT_8x16=y
# CONFIG_SOC_EXYNOS5250 is not set
CONFIG_ACPI=y
# CONFIG_ARCH_MMP is not set
CONFIG_FIREWIRE=m
# CONFIG_PLAT_M32700UT is not set
CONFIG_DMA_SHARED_BUFFER=y
# CONFIG_PPC_MPC512x is not set
CONFIG_X86=y
# CONFIG_SND_MIRO is not set
# CONFIG_OMAP_IOMMU is not set
# CONFIG_ARCH_MULTIPLATFORM is not set
CONFIG_VIRT_TO_BUS=y
# CONFIG_ARCH_S3C64XX is not set
# CONFIG_ARCH_SHMOBILE is not set
# CONFIG_PXA27x is not set
# CONFIG_MFD_SI476X_CORE is not set
# CONFIG_ARM64 is not set
# CONFIG_ARCH_OMAP2PLUS is not set
CONFIG_GPIOLIB=y
# CONFIG_FB_OMAP2 is not set
# CONFIG_GENERIC_ALLOCATOR is not set
# CONFIG_OMAP2_VRFB is not set
CONFIG_BITREVERSE=y
# CONFIG_BLACKFIN is not set
# CONFIG_REGMAP_MMIO is not set
CONFIG_RFKILL=m
CONFIG_FB_CFB_FILLRECT=y
CONFIG_TTY=y
# CONFIG_SPI_MASTER is not set
CONFIG_LEDS_CLASS=y
# CONFIG_MTK_IOMMU is not set
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_METAG is not set
CONFIG_REGMAP=y
# CONFIG_ARCH_MESON is not set
# CONFIG_M32R is not set
CONFIG_SND_SOC=y
# CONFIG_ARCH_OMAP4 is not set
CONFIG_HAS_DMA=y
# CONFIG_MFD_SYSCON is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_ARCH_AT91 is not set
# CONFIG_SPARC64 is not set
# CONFIG_ARCH_RENESAS is not set
# CONFIG_ALPHA is not set
CONFIG_FB_CFB_COPYAREA=y
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_MXC is not set
CONFIG_FB=y
# CONFIG_ARCH_DAVINCI_DM365 is not set
# CONFIG_SOC_EXYNOS4412 is not set
# CONFIG_ARCH_STI is not set
CONFIG_I2C_MUX=m
# CONFIG_SND_SOC_SI476X is not set
CONFIG_REGMAP_I2C=y
CONFIG_I2C_ALGOBIT=y
# CONFIG_ARCH_OMAP2 is not set
CONFIG_SERIO_SERPORT=y
# CONFIG_MIPS is not set
CONFIG_X86=y
CONFIG_EFI=y
# CONFIG_SOC_DRA7XX is not set
CONFIG_DMA_ENGINE=y
CONFIG_HDMI=y
# CONFIG_VIDEO_V4L1 is not set
# CONFIG_SG_SPLIT is not set
CONFIG_FB_CFB_IMAGEBLIT=y
# CONFIG_PXA27x is not set
CONFIG_FB_CFB_FILLRECT=y
# CONFIG_ARCH_S3C64XX is not set
# CONFIG_PLAT_M32700UT is not set
# CONFIG_I2C_GPIO is not set
# CONFIG_BLACKFIN is not set
CONFIG_NEW_LEDS=y
# CONFIG_ARCH_DAVINCI_DM365 is not set
# CONFIG_ISA is not set
# CONFIG_VIDEO_KERNEL_VERSION is not set
CONFIG_MEDIA_SUPPORT=m
@ -150,6 +153,7 @@ CONFIG_VIDEO_V4L2=m
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
CONFIG_VIDEO_TUNER=m
CONFIG_V4L2_FWNODE=m
CONFIG_VIDEOBUF_GEN=m
CONFIG_VIDEOBUF_VMALLOC=m
CONFIG_VIDEOBUF_DVB=m
@ -199,6 +203,7 @@ CONFIG_RC_LOOPBACK=m
CONFIG_IR_GPIO_CIR=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
# CONFIG_IR_SIR is not set
CONFIG_MEDIA_USB_SUPPORT=y
#
@ -223,7 +228,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_HDPVR=m
CONFIG_VIDEO_USBVISION=m
CONFIG_VIDEO_STK1160_COMMON=m
# CONFIG_VIDEO_STK1160_AC97 is not set
CONFIG_VIDEO_STK1160=m
CONFIG_VIDEO_GO7007=m
CONFIG_VIDEO_GO7007_USB=m
@ -287,6 +291,8 @@ CONFIG_DVB_USB_TBS5220=m
CONFIG_DVB_USB_TBS5881=m
CONFIG_DVB_USB_TBS5520=m
CONFIG_DVB_USB_TBS5927=m
CONFIG_DVB_USB_TBS5520SE=m
CONFIG_DVB_USB_CYCITV=m
CONFIG_DVB_USB_V2=m
CONFIG_DVB_USB_AF9015=m
CONFIG_DVB_USB_AF9035=m
@ -300,6 +306,7 @@ CONFIG_DVB_USB_LME2510=m
CONFIG_DVB_USB_MXL111SF=m
CONFIG_DVB_USB_RTL28XXU=m
CONFIG_DVB_USB_DVBSKY=m
CONFIG_DVB_USB_ZD1301=m
CONFIG_DVB_TTUSB_BUDGET=m
CONFIG_DVB_TTUSB_DEC=m
CONFIG_SMS_USB_DRV=m
@ -383,6 +390,7 @@ CONFIG_VIDEO_CX25840=m
#
# Camera sensor devices
#
CONFIG_VIDEO_OV2640=m
CONFIG_VIDEO_OV7640=m
CONFIG_VIDEO_MT9V011=m
@ -479,6 +487,7 @@ CONFIG_DVB_CX24120=m
CONFIG_DVB_SI21XX=m
CONFIG_DVB_TS2020=m
CONFIG_DVB_DS3000=m
CONFIG_DVB_DS3K=m
CONFIG_DVB_TDA10071=m
#
@ -503,6 +512,7 @@ CONFIG_DVB_RTL2830=m
CONFIG_DVB_RTL2832=m
CONFIG_DVB_SI2168=m
CONFIG_DVB_AS102_FE=m
CONFIG_DVB_ZD1301_DEMOD=m
CONFIG_DVB_GP8PSK_FE=m
#
@ -564,6 +574,7 @@ CONFIG_DVB_AF9033=m
CONFIG_DVB_TAS2101=m
CONFIG_DVB_AVL6882=m
CONFIG_DVB_STV0910=m
CONFIG_DVB_SI2183=m
#
# Tools to develop new frontends
@ -579,6 +590,7 @@ CONFIG_MISC_DEVICES=y
CONFIG_ALTERA_STAPL=m
# CONFIG_STAGING is not set
# RPi DVB Hat
CONFIG_DVB_CXD2820R=m
CONFIG_DVB_CXD2841ER=m
CONFIG_DVB_CXD2880=m

View File

@ -1,6 +1,6 @@
################################################################################
# This file is part of LibreELEC - https://libreelec.tv
# Copyright (C) 2016-2017 Team LibreELEC
# Copyright (C) 2016-present Team LibreELEC
#
# LibreELEC is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -17,7 +17,7 @@
################################################################################
PKG_NAME="media_build"
PKG_VERSION="2017-01-22-rpi"
PKG_VERSION="2017-06-20-rpi"
PKG_ARCH="any"
PKG_LICENSE="GPL"
PKG_SITE="https://github.com/crazycat69/linux_media"

View File

@ -1,20 +1,17 @@
--- a/backports/backports.txt
+++ b/backports/backports.txt
@@ -25,6 +25,17 @@
@@ -25,6 +25,14 @@ add api_version.patch
add pr_fmt.patch
add debug.patch
add drx39xxj.patch
+add linux-202-lnbp22_patch_for_more_power_if_rotor.patch
+add linux-203-stb0899_enable_low_symbol_rate.patch
+add linux-222-stb0899_signal_quality.patch
+add linux-052-XBOX_remote_support.patch
+add linux-054-nuvoton_revert_d7b290a1056c5564eec8a1b169c6e84ff3.6.114c13.patch
+add linux-057-Removed-MCE-customer-code-restriction-in-rc6-decode.patch
+add linux-062-imon_pad_ignore_diagonal.patch
+add linux-063-fix-rc-raw-decoder-loading.patch
+add linux-240-pctv452e_kernel_oops_in_4.9.patch
+add linux-220-cx231xx-suspend-fix.patch
+add linux-202-lnbp22_patch_for_more_power_if_rotor.patch
+add linux-203-stb0899_enable_low_symbol_rate.patch
+add linux-220-hauppauge_dualhd_second_tuner_support.patch
+add cxd2880-support.patch
[4.8.255]
add v4.8_user_pages_flag.patch
[4.10.255]
add v4.10_sched_signal.patch

View File

@ -1,13 +0,0 @@
make config and make menuconfig work now
--- a/v4l/Kconfig.staging
+++ b/v4l/Kconfig.staging
@@ -27,7 +27,7 @@ menu "Media devices in staging"
config STAGING_BROKEN
bool "Enable drivers that are known to not compile"
default n
- --- help ---
+ ---help---
Say N here, except if you will be fixing the drivers
compilation.

View File

@ -1,10 +1,13 @@
diff -Naur linux-3.9.4/drivers/staging/media/lirc/Kconfig linux-3.9.4.patch/drivers/staging/media/lirc/Kconfig
--- linux-3.9.4/drivers/staging/media/lirc/Kconfig 2013-05-24 20:45:59.000000000 +0200
+++ linux-3.9.4.patch/drivers/staging/media/lirc/Kconfig 2013-05-30 18:18:57.238957100 +0200
@@ -63,10 +63,17 @@
Subject: linux-052-XBOX_remote_support updated for kernel 4.11
diff --git a/drivers/staging/media/lirc/Kconfig b/drivers/staging/media/lirc/Kconfig
index bc67da2..87d894e 100644
--- a/drivers/staging/media/lirc/Kconfig
+++ b/drivers/staging/media/lirc/Kconfig
@@ -24,10 +24,17 @@ config LIRC_SIR
help
Driver for the SIR IrDA port
+config LIRC_XBOX
+ tristate "XBOX USB IR Remote"
+ depends on LIRC && USB
@ -19,9 +22,22 @@ diff -Naur linux-3.9.4/drivers/staging/media/lirc/Kconfig linux-3.9.4.patch/driv
PVR-150/500, HVR-1200/1250/1700/1800, HD-PVR and other cards
+
endif
diff -Naur linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c linux-3.9.4.patch/drivers/staging/media/lirc/lirc_xbox.c
--- linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-3.9.4.patch/drivers/staging/media/lirc/lirc_xbox.c 2013-05-30 18:40:22.523775446 +0200
diff --git a/drivers/staging/media/lirc/Makefile b/drivers/staging/media/lirc/Makefile
index 28740c9..b3e331e4 100644
--- a/drivers/staging/media/lirc/Makefile
+++ b/drivers/staging/media/lirc/Makefile
@@ -3,4 +3,5 @@
# Each configuration option enables a list of files.
+obj-$(CONFIG_LIRC_XBOX) += lirc_xbox.o
obj-$(CONFIG_LIRC_ZILOG) += lirc_zilog.o
diff --git a/drivers/staging/media/lirc/lirc_xbox.c b/drivers/staging/media/lirc/lirc_xbox.c
new file mode 100644
index 0000000..c269d5d
--- /dev/null
+++ b/drivers/staging/media/lirc/lirc_xbox.c
@@ -0,0 +1,995 @@
+/*
+ * lirc_xbox - USB remote support for LIRC
@ -1018,12 +1034,6 @@ diff -Naur linux-3.9.4/drivers/staging/media/lirc/lirc_xbox.c linux-3.9.4.patch/
+
+module_param(repeat, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(repeat, "Repeat timeout (1/100 sec) (default: 10)");
diff -Naur linux-3.9.4/drivers/staging/media/lirc/Makefile linux-3.9.4.patch/drivers/staging/media/lirc/Makefile
--- linux-3.9.4/drivers/staging/media/lirc/Makefile 2013-05-24 20:45:59.000000000 +0200
+++ linux-3.9.4.patch/drivers/staging/media/lirc/Makefile 2013-05-30 18:17:39.163634834 +0200
@@ -10,4 +10,5 @@
obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o
obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o
obj-$(CONFIG_LIRC_SIR) += lirc_sir.o
+obj-$(CONFIG_LIRC_XBOX) += lirc_xbox.o
obj-$(CONFIG_LIRC_ZILOG) += lirc_zilog.o
--
2.7.4

View File

@ -1,46 +0,0 @@
From d13ee07f431c94ea72320ea4136e75ebeaee98c1 Mon Sep 17 00:00:00 2001
From: Matthias Reichl <hias@horus.com>
Date: Fri, 3 Mar 2017 10:27:44 +0100
Subject: [PATCH] backport: rc: raw decoder for keymap protocol is not loaded
on register
see http://www.spinics.net/lists/linux-media/msg111651.html
---
drivers/media/rc/rc-main.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
index dedaf38..9a397da 100644
--- a/drivers/media/rc/rc-main.c
+++ b/drivers/media/rc/rc-main.c
@@ -1441,6 +1441,7 @@ int rc_register_device(struct rc_dev *dev)
int attr = 0;
int minor;
int rc;
+ u64 rc_type;
if (!dev || !dev->map_name)
return -EINVAL;
@@ -1526,14 +1527,18 @@ int rc_register_device(struct rc_dev *dev)
goto out_input;
}
+ rc_type = BIT_ULL(rc_map->rc_type);
+
if (dev->change_protocol) {
- u64 rc_type = (1ll << rc_map->rc_type);
rc = dev->change_protocol(dev, &rc_type);
if (rc < 0)
goto out_raw;
dev->enabled_protocols = rc_type;
}
+ if (dev->driver_type == RC_DRIVER_IR_RAW)
+ ir_raw_load_modules(&rc_type);
+
/* Allow the RC sysfs nodes to be accessible */
atomic_set(&dev->initialized, 1);
--
2.1.4

View File

@ -1,31 +0,0 @@
drop at next major media_build bump
fixes https://github.com/tbsdtv/linux_media/issues/40
From f10b80837b205be12e3b511a14c184f1873ce1d6 Mon Sep 17 00:00:00 2001
From: CrazyCat <crazycat69@narod.ru>
Date: Fri, 31 Mar 2017 01:04:42 +0300
Subject: [PATCH] cx231xx-dvb: Fixed merge issue in unregister_dvb().
---
drivers/media/usb/cx231xx/cx231xx-dvb.c | 8 --------
1 file changed, 8 deletions(-)
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 593be48..fb477e9 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -755,14 +755,6 @@ static void unregister_dvb(struct cx231xx_dvb *dvb)
}
dvb_unregister_frontend(dvb->frontend);
dvb_frontend_detach(dvb->frontend);
-
- client = dvb->i2c_client_demod;
- /* remove I2C demod */
- if (client) {
- module_put(client->dev.driver->owner);
- i2c_unregister_device(client);
- }
-
dvb_unregister_adapter(&dvb->adapter);
}

View File

@ -0,0 +1,586 @@
From: Brad Love <hidden@email.co>
Date: Sun, 16 Apr 2017 00:13:39 -0500
Subject: Hauppauge DualHD DVB/ATSC second tuner support
diff --git a/drivers/media/dvb-frontends/lgdt3306a.c b/drivers/media/dvb-frontends/lgdt3306a.c
index c9b1eb3..c50769f 100644
--- a/drivers/media/dvb-frontends/lgdt3306a.c
+++ b/drivers/media/dvb-frontends/lgdt3306a.c
@@ -624,6 +624,9 @@ static int lgdt3306a_set_modulation(struct lgdt3306a_state *state,
case QAM_256:
ret = lgdt3306a_set_qam(state, QAM_256);
break;
+ case QAM_AUTO:
+ ret = lgdt3306a_set_qam(state, QAM_64);
+ break;
default:
return -EINVAL;
}
@@ -649,6 +652,7 @@ static int lgdt3306a_agc_setup(struct lgdt3306a_state *state,
break;
case QAM_64:
case QAM_256:
+ case QAM_AUTO:
break;
default:
return -EINVAL;
@@ -703,6 +707,7 @@ static int lgdt3306a_spectral_inversion(struct lgdt3306a_state *state,
break;
case QAM_64:
case QAM_256:
+ case QAM_AUTO:
/* Auto ok for QAM */
ret = lgdt3306a_set_inversion_auto(state, 1);
break;
@@ -726,6 +731,7 @@ static int lgdt3306a_set_if(struct lgdt3306a_state *state,
break;
case QAM_64:
case QAM_256:
+ case QAM_AUTO:
if_freq_khz = state->cfg->qam_if_khz;
break;
default:
@@ -1644,6 +1650,9 @@ static int lgdt3306a_read_signal_strength(struct dvb_frontend *fe,
case QAM_256:
ref_snr = 2800; /* 28dB */
break;
+ case QAM_AUTO:
+ ref_snr = 2200; /* 22dB */
+ break;
default:
return -EINVAL;
}
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
index 146341a..d2e5b8d 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -508,8 +508,10 @@ static struct em28xx_reg_seq plex_px_bcud[] = {
};
/*
- * 2040:0265 Hauppauge WinTV-dualHD DVB
- * 2040:026d Hauppauge WinTV-dualHD ATSC/QAM
+ * 2040:0265 Hauppauge WinTV-dualHD DVB ISOC
+ * 2040:8265 Hauppauge WinTV-dualHD DVB Bulk
+ * 2040:026d Hauppauge WinTV-dualHD ATSC/QAM ISOC
+ * 2040:826d Hauppauge WinTV-dualHD ATSC/QAM Bulk
* reg 0x80/0x84:
* GPIO_0: Yellow LED tuner 1, 0=on, 1=off
* GPIO_1: Green LED tuner 1, 0=on, 1=off
@@ -2376,7 +2378,8 @@ struct em28xx_board em28xx_boards[] = {
.has_dvb = 1,
},
/*
- * 2040:0265 Hauppauge WinTV-dualHD (DVB version).
+ * 2040:0265 Hauppauge WinTV-dualHD (DVB version) ISOC.
+ * 2040:8265 Hauppauge WinTV-dualHD (DVB version) BULK.
* Empia EM28274, 2x Silicon Labs Si2168, 2x Silicon Labs Si2157
*/
[EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB] = {
@@ -2387,11 +2390,13 @@ struct em28xx_board em28xx_boards[] = {
.tuner_type = TUNER_ABSENT,
.tuner_gpio = hauppauge_dualhd_dvb,
.has_dvb = 1,
+ .has_dual_ts = 1,
.ir_codes = RC_MAP_HAUPPAUGE,
.leds = hauppauge_dualhd_leds,
},
/*
- * 2040:026d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM).
+ * 2040:026d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM) ISOC.
+ * 2040:826d Hauppauge WinTV-dualHD (model 01595 - ATSC/QAM) BULK.
* Empia EM28274, 2x LG LGDT3306A, 2x Silicon Labs Si2157
*/
[EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595] = {
@@ -2402,6 +2407,7 @@ struct em28xx_board em28xx_boards[] = {
.tuner_type = TUNER_ABSENT,
.tuner_gpio = hauppauge_dualhd_dvb,
.has_dvb = 1,
+ .has_dual_ts = 1,
.ir_codes = RC_MAP_HAUPPAUGE,
.leds = hauppauge_dualhd_leds,
},
@@ -2530,8 +2536,12 @@ struct usb_device_id em28xx_id_table[] = {
.driver_info = EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850 },
{ USB_DEVICE(0x2040, 0x0265),
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
+ { USB_DEVICE(0x2040, 0x8265),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB },
{ USB_DEVICE(0x2040, 0x026d),
.driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
+ { USB_DEVICE(0x2040, 0x826d),
+ .driver_info = EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595 },
{ USB_DEVICE(0x0438, 0xb002),
.driver_info = EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600 },
{ USB_DEVICE(0x2001, 0xf112),
@@ -3222,7 +3232,8 @@ static void em28xx_release_resources(struct em28xx *dev)
em28xx_i2c_unregister(dev, 1);
em28xx_i2c_unregister(dev, 0);
- usb_put_dev(udev);
+ if(dev->ts == PRIMARY_TS)
+ usb_put_dev(udev);
/* Mark device as unused */
clear_bit(dev->devno, em28xx_devused);
@@ -3415,6 +3426,34 @@ static int em28xx_init_dev(struct em28xx *dev, struct usb_device *udev,
return 0;
}
+int em28xx_duplicate_dev(struct em28xx *dev)
+{
+ int nr;
+ struct em28xx *sec_dev = kzalloc(sizeof(*sec_dev), GFP_KERNEL);
+ if (sec_dev == NULL) {
+ dev->dev_next = NULL;
+ return -ENOMEM;
+ }
+ memcpy(sec_dev, dev, sizeof(sizeof(*sec_dev)));
+ /* Check to see next free device and mark as used */
+ do {
+ nr = find_first_zero_bit(em28xx_devused, EM28XX_MAXBOARDS);
+ if (nr >= EM28XX_MAXBOARDS) {
+ /* No free device slots */
+ printk(DRIVER_NAME ": Supports only %i em28xx boards.\n",
+ EM28XX_MAXBOARDS);
+ kfree(sec_dev);
+ dev->dev_next = NULL;
+ return -ENOMEM;
+ }
+ } while (test_and_set_bit(nr, em28xx_devused));
+ sec_dev->devno = nr;
+ snprintf(sec_dev->name, 28, "em28xx #%d", nr);
+ sec_dev->dev_next = NULL;
+ dev->dev_next = sec_dev;
+ return 0;
+}
+
/* high bandwidth multiplier, as encoded in highspeed endpoint descriptors */
#define hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
@@ -3428,7 +3467,8 @@ static int em28xx_usb_probe(struct usb_interface *interface,
struct usb_device *udev;
struct em28xx *dev = NULL;
int retval;
- bool has_vendor_audio = false, has_video = false, has_dvb = false;
+ bool has_vendor_audio = false, has_video = false;
+ bool has_dvb = false, has_dvb_ts2 = false;
int i, nr, try_bulk;
const int ifnum = interface->altsetting[0].desc.bInterfaceNumber;
char *speed;
@@ -3534,6 +3574,19 @@ static int em28xx_usb_probe(struct usb_interface *interface,
}
}
break;
+ case 0x85:
+ if (usb_endpoint_xfer_isoc(e)) {
+ if (size > dev->dvb_max_pkt_size_isoc_ts2) {
+ has_dvb_ts2 = true; /* see NOTE (~) */
+ dev->dvb_ep_isoc_ts2 = e->bEndpointAddress;
+ dev->dvb_max_pkt_size_isoc_ts2 = size;
+ dev->dvb_alt_isoc = i;
+ }
+ } else {
+ has_dvb_ts2 = true;
+ dev->dvb_ep_bulk_ts2 = e->bEndpointAddress;
+ }
+ break;
}
}
/* NOTE:
@@ -3615,6 +3668,10 @@ static int em28xx_usb_probe(struct usb_interface *interface,
dev->has_video = has_video;
dev->ifnum = ifnum;
+ dev->ts = PRIMARY_TS;
+ snprintf(dev->name, 28, "em28xx");
+ dev->dev_next = NULL;
+
if (has_vendor_audio) {
dev_err(&interface->dev,
"Audio interface %i found (Vendor Class)\n", ifnum);
@@ -3694,6 +3751,61 @@ static int em28xx_usb_probe(struct usb_interface *interface,
dev->dvb_xfer_bulk ? "bulk" : "isoc");
}
+ if(dev->board.has_dual_ts && em28xx_duplicate_dev(dev) == 0)
+ {
+ dev->dev_next->ts = SECONDARY_TS;
+ dev->dev_next->alt = -1;
+ dev->dev_next->is_audio_only = has_vendor_audio && !(has_video || has_dvb);
+ dev->dev_next->has_video = false;
+ dev->dev_next->ifnum = ifnum;
+ dev->dev_next->model = id->driver_info;
+
+ mutex_init(&dev->dev_next->lock);
+ retval = em28xx_init_dev(dev->dev_next, udev, interface, dev->dev_next->devno);
+ if (retval) {
+ goto err_free;
+ }
+
+ if (usb_xfer_mode < 0) {
+ if (dev->dev_next->board.is_webcam)
+ try_bulk = 1;
+ else
+ try_bulk = 0;
+ } else {
+ try_bulk = usb_xfer_mode > 0;
+ }
+
+ /* Select USB transfer types to use */
+ if (has_dvb) {
+ if (!dev->dvb_ep_isoc_ts2 || (try_bulk && dev->dvb_ep_bulk_ts2))
+ dev->dev_next->dvb_xfer_bulk = 1;
+ dev_info(&dev->intf->dev, "dvb ts2 set to %s mode.\n",
+ dev->dev_next->dvb_xfer_bulk ? "bulk" : "isoc");
+ }
+
+ dev->dev_next->dvb_ep_isoc = dev->dvb_ep_isoc_ts2;
+ dev->dev_next->dvb_ep_bulk = dev->dvb_ep_bulk_ts2;
+ dev->dev_next->dvb_max_pkt_size_isoc = dev->dvb_max_pkt_size_isoc_ts2;
+ dev->dev_next->dvb_alt_isoc = dev->dvb_alt_isoc;
+
+ /* Configuare hardware to support TS2*/
+ if(dev->dvb_xfer_bulk) {
+ /* The ep4 and ep5 are configuared for BULK */
+ em28xx_write_reg(dev, 0x0b, 0x96);
+ mdelay(100);
+ em28xx_write_reg(dev, 0x0b, 0x80);
+ mdelay(100);
+ } else {
+ /* The ep4 and ep5 are configuared for ISO */
+ em28xx_write_reg(dev, 0x0b, 0x96);
+ mdelay(100);
+ em28xx_write_reg(dev, 0x0b, 0x82);
+ mdelay(100);
+ }
+
+ kref_init(&dev->dev_next->ref);
+ }
+
kref_init(&dev->ref);
request_modules(dev);
@@ -3736,15 +3848,28 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
if (!dev)
return;
+ if(dev->dev_next!=NULL) {
+ dev->dev_next->disconnected = 1;
+ dev_info(&dev->intf->dev, "Disconnecting %s\n", dev->dev_next->name);
+ flush_request_modules(dev->dev_next);
+ }
+
dev->disconnected = 1;
- dev_err(&dev->intf->dev, "Disconnecting\n");
+ dev_err(&dev->intf->dev, "Disconnecting %s\n", dev->name);
flush_request_modules(dev);
em28xx_close_extension(dev);
+ if(dev->dev_next!=NULL)
+ em28xx_release_resources(dev->dev_next);
em28xx_release_resources(dev);
+
+ if(dev->dev_next!=NULL) {
+ kref_put(&dev->dev_next->ref, em28xx_free_device);
+ dev->dev_next = NULL;
+ }
kref_put(&dev->ref, em28xx_free_device);
}
diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
index 1d0d8cc..ca0ddd5 100644
--- a/drivers/media/usb/em28xx/em28xx-core.c
+++ b/drivers/media/usb/em28xx/em28xx-core.c
@@ -638,10 +638,39 @@ int em28xx_capture_start(struct em28xx *dev, int start)
dev->chip_id == CHIP_ID_EM28174 ||
dev->chip_id == CHIP_ID_EM28178) {
/* The Transport Stream Enable Register moved in em2874 */
- rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
- start ?
- EM2874_TS1_CAPTURE_ENABLE : 0x00,
- EM2874_TS1_CAPTURE_ENABLE);
+ if(dev->dvb_xfer_bulk) {
+ /* TS1 Maximum Transfer Size = 188 * EM28XX_DVB_BULK_PACKET_MULTIPLIER */
+ em28xx_write_reg(dev, EM2874_R5D_TS1_PKT_SIZE, 0xef);
+ } else {
+ /* TS1 Maximum Transfer Size = 188 * 5 */
+ em28xx_write_reg(dev, EM2874_R5D_TS1_PKT_SIZE, 0x05);
+ }
+
+ if(dev->board.has_dual_ts) {
+ if(start) {
+ if(dev->dvb_xfer_bulk) {
+ /* TS2 Maximum Transfer Size = 188 * EM28XX_DVB_BULK_PACKET_MULTIPLIER */
+ em28xx_write_reg(dev, EM2874_R5E_TS2_PKT_SIZE, 0xef);
+ } else {
+ /* TS2 Maximum Transfer Size = 188 * 5 */
+ em28xx_write_reg(dev, EM2874_R5E_TS2_PKT_SIZE, 0x05);
+ }
+ rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
+ (EM2874_TS1_CAPTURE_ENABLE | EM2874_TS2_CAPTURE_ENABLE),
+ (EM2874_TS1_CAPTURE_ENABLE | EM2874_TS2_CAPTURE_ENABLE));
+ } else {
+ if(dev->ts == PRIMARY_TS) {
+ rc = em28xx_toggle_reg_bits(dev, EM2874_R5F_TS_ENABLE, EM2874_TS1_CAPTURE_ENABLE);
+ } else {
+ rc = em28xx_toggle_reg_bits(dev, EM2874_R5F_TS_ENABLE, EM2874_TS2_CAPTURE_ENABLE);
+ }
+ }
+ } else {
+ rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
+ start ?
+ EM2874_TS1_CAPTURE_ENABLE : 0x00,
+ EM2874_TS1_CAPTURE_ENABLE);
+ }
} else {
/* FIXME: which is the best order? */
/* video registers are sampled by VREF */
@@ -1077,7 +1106,11 @@ int em28xx_register_extension(struct em28xx_ops *ops)
mutex_lock(&em28xx_devlist_mutex);
list_add_tail(&ops->next, &em28xx_extension_devlist);
list_for_each_entry(dev, &em28xx_devlist, devlist) {
- ops->init(dev);
+ if (ops->init) {
+ ops->init(dev);
+ if(dev->dev_next!=NULL)
+ ops->init(dev->dev_next);
+ }
}
mutex_unlock(&em28xx_devlist_mutex);
pr_info("em28xx: Registered (%s) extension\n", ops->name);
@@ -1091,7 +1124,11 @@ void em28xx_unregister_extension(struct em28xx_ops *ops)
mutex_lock(&em28xx_devlist_mutex);
list_for_each_entry(dev, &em28xx_devlist, devlist) {
- ops->fini(dev);
+ if (ops->fini) {
+ if(dev->dev_next!=NULL)
+ ops->fini(dev->dev_next);
+ ops->fini(dev);
+ }
}
list_del(&ops->next);
mutex_unlock(&em28xx_devlist_mutex);
@@ -1106,8 +1143,11 @@ void em28xx_init_extension(struct em28xx *dev)
mutex_lock(&em28xx_devlist_mutex);
list_add_tail(&dev->devlist, &em28xx_devlist);
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
- if (ops->init)
+ if (ops->init) {
ops->init(dev);
+ if(dev->dev_next!=NULL)
+ ops->init(dev->dev_next);
+ }
}
mutex_unlock(&em28xx_devlist_mutex);
}
@@ -1118,8 +1158,11 @@ void em28xx_close_extension(struct em28xx *dev)
mutex_lock(&em28xx_devlist_mutex);
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
- if (ops->fini)
+ if (ops->fini) {
+ if(dev->dev_next!=NULL)
+ ops->fini(dev->dev_next);
ops->fini(dev);
+ }
}
list_del(&dev->devlist);
mutex_unlock(&em28xx_devlist_mutex);
@@ -1134,6 +1177,8 @@ int em28xx_suspend_extension(struct em28xx *dev)
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
if (ops->suspend)
ops->suspend(dev);
+ if(dev->dev_next!=NULL)
+ ops->suspend(dev->dev_next);
}
mutex_unlock(&em28xx_devlist_mutex);
return 0;
@@ -1148,6 +1193,8 @@ int em28xx_resume_extension(struct em28xx *dev)
list_for_each_entry(ops, &em28xx_extension_devlist, next) {
if (ops->resume)
ops->resume(dev);
+ if(dev->dev_next!=NULL)
+ ops->resume(dev->dev_next);
}
mutex_unlock(&em28xx_devlist_mutex);
return 0;
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index 82edd37..e10b1ac 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -199,13 +199,13 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
int rc;
struct em28xx_i2c_bus *i2c_bus = dvb->adapter.priv;
struct em28xx *dev = i2c_bus->dev;
- struct usb_device *udev = interface_to_usbdev(dev->intf);
+// struct usb_device *udev = interface_to_usbdev(dev->intf);
int dvb_max_packet_size, packet_multiplier, dvb_alt;
if (dev->dvb_xfer_bulk) {
if (!dev->dvb_ep_bulk)
return -ENODEV;
- dvb_max_packet_size = 512; /* USB 2.0 spec */
+ dvb_max_packet_size = 188;
packet_multiplier = EM28XX_DVB_BULK_PACKET_MULTIPLIER;
dvb_alt = 0;
} else { /* isoc */
@@ -218,7 +218,8 @@ static int em28xx_start_streaming(struct em28xx_dvb *dvb)
dvb_alt = dev->dvb_alt_isoc;
}
- usb_set_interface(udev, dev->ifnum, dvb_alt);
+ /* moved to em28xx_dvb_init*/
+ //usb_set_interface(udev, dev->ifnum, dvb_alt);
rc = em28xx_set_mode(dev, EM28XX_DIGITAL_MODE);
if (rc < 0)
return rc;
@@ -1128,8 +1129,9 @@ static void em28xx_unregister_dvb(struct em28xx_dvb *dvb)
static int em28xx_dvb_init(struct em28xx *dev)
{
- int result = 0;
+ int result = 0, dvb_alt = 0;
struct em28xx_dvb *dvb;
+ struct usb_device *udev;
if (dev->is_audio_only) {
/* Shouldn't initialize IR for this interface */
@@ -1155,7 +1157,7 @@ static int em28xx_dvb_init(struct em28xx *dev)
result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
dev->dvb_xfer_bulk,
EM28XX_DVB_NUM_BUFS,
- 512,
+ 188,
EM28XX_DVB_BULK_PACKET_MULTIPLIER);
} else {
result = em28xx_alloc_urbs(dev, EM28XX_DIGITAL_MODE,
@@ -1913,7 +1915,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
si2168_config.ts_mode = SI2168_TS_SERIAL;
memset(&info, 0, sizeof(struct i2c_board_info));
strlcpy(info.type, "si2168", I2C_NAME_SIZE);
- info.addr = 0x64;
+ if(dev->ts == PRIMARY_TS) info.addr = 0x64;
+ else info.addr = 0x67;
info.platform_data = &si2168_config;
request_module(info.type);
client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus], &info);
@@ -1939,7 +1942,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
#endif
memset(&info, 0, sizeof(struct i2c_board_info));
strlcpy(info.type, "si2157", I2C_NAME_SIZE);
- info.addr = 0x60;
+ if(dev->ts == PRIMARY_TS) info.addr = 0x60;
+ else info.addr = 0x63;
info.platform_data = &si2157_config;
request_module(info.type);
client = i2c_new_device(adapter, &info);
@@ -1975,7 +1979,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
lgdt3306a_config.fe = &dvb->fe[0];
lgdt3306a_config.i2c_adapter = &adapter;
strlcpy(info.type, "lgdt3306a", sizeof(info.type));
- info.addr = 0x59;
+ if(dev->ts == PRIMARY_TS) info.addr = 0x59;
+ else info.addr = 0x0e;
info.platform_data = &lgdt3306a_config;
request_module(info.type);
client = i2c_new_device(&dev->i2c_adap[dev->def_i2c_bus],
@@ -2002,7 +2007,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
#endif
memset(&info, 0, sizeof(struct i2c_board_info));
strlcpy(info.type, "si2157", sizeof(info.type));
- info.addr = 0x60;
+ if(dev->ts == PRIMARY_TS) info.addr = 0x60;
+ else info.addr = 0x62;
info.platform_data = &si2157_config;
request_module(info.type);
@@ -2045,6 +2051,14 @@ static int em28xx_dvb_init(struct em28xx *dev)
if (result < 0)
goto out_free;
+ if (dev->dvb_xfer_bulk) {
+ dvb_alt = 0;
+ } else { /* isoc */
+ dvb_alt = dev->dvb_alt_isoc;
+ }
+
+ udev = interface_to_usbdev(dev->intf);
+ usb_set_interface(udev, dev->ifnum, dvb_alt);
dev_info(&dev->intf->dev, "DVB extension successfully initialized\n");
kref_get(&dev->ref);
diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h
index e8d97d5..132638e 100644
--- a/drivers/media/usb/em28xx/em28xx.h
+++ b/drivers/media/usb/em28xx/em28xx.h
@@ -190,7 +190,7 @@
USB 2.0 spec says bulk packet size is always 512 bytes
*/
#define EM28XX_BULK_PACKET_MULTIPLIER 384
-#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 384
+#define EM28XX_DVB_BULK_PACKET_MULTIPLIER 240
#define EM28XX_INTERLACED_DEFAULT 1
@@ -216,6 +216,9 @@
/* max. number of button state polling addresses */
#define EM28XX_NUM_BUTTON_ADDRESSES_MAX 5
+#define PRIMARY_TS 0
+#define SECONDARY_TS 1
+
enum em28xx_mode {
EM28XX_SUSPEND,
EM28XX_ANALOG_MODE,
@@ -456,6 +459,7 @@ struct em28xx_board {
unsigned int mts_firmware:1;
unsigned int max_range_640_480:1;
unsigned int has_dvb:1;
+ unsigned int has_dual_ts:1;
unsigned int is_webcam:1;
unsigned int valid:1;
unsigned int has_ir_i2c:1;
@@ -620,6 +624,7 @@ struct em28xx {
unsigned int is_audio_only:1;
enum em28xx_int_audio_type int_audio_type;
enum em28xx_usb_audio_type usb_audio_type;
+ unsigned char name[32];
struct em28xx_board board;
@@ -681,6 +686,8 @@ struct em28xx {
u8 ifnum; /* number of the assigned usb interface */
u8 analog_ep_isoc; /* address of isoc endpoint for analog */
u8 analog_ep_bulk; /* address of bulk endpoint for analog */
+ u8 dvb_ep_isoc_ts2; /* address of isoc endpoint for DVB TS2*/
+ u8 dvb_ep_bulk_ts2; /* address of bulk endpoint for DVB TS2*/
u8 dvb_ep_isoc; /* address of isoc endpoint for DVB */
u8 dvb_ep_bulk; /* address of bulk endpoint for DVB */
int alt; /* alternate setting */
@@ -694,6 +701,8 @@ struct em28xx {
int dvb_alt_isoc; /* alternate setting for DVB isoc transfers */
unsigned int dvb_max_pkt_size_isoc; /* isoc max packet size of the
selected DVB ep at dvb_alt */
+ unsigned int dvb_max_pkt_size_isoc_ts2; /* isoc max packet size of the
+ selected DVB ep at dvb_alt */
unsigned int dvb_xfer_bulk:1; /* use bulk instead of isoc
transfers for DVB */
char urb_buf[URB_MAX_CTRL_SIZE]; /* urb control msg buffer */
@@ -725,6 +734,9 @@ struct em28xx {
struct media_entity input_ent[MAX_EM28XX_INPUT];
struct media_pad input_pad[MAX_EM28XX_INPUT];
#endif
+
+ struct em28xx *dev_next;
+ int ts;
};
#define kref_to_dev(d) container_of(d, struct em28xx, ref)
--
2.7.4

View File

@ -1,61 +0,0 @@
--- a/drivers/media/dvb-frontends/stb0899_drv.c
+++ b/drivers/media/dvb-frontends/stb0899_drv.c
@@ -976,6 +976,16 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
*strength = stb0899_table_lookup(stb0899_dvbsrf_tab, ARRAY_SIZE(stb0899_dvbsrf_tab) - 1, val);
*strength += 750;
+
+ const int MIN_STRENGTH_DVBS = 0;
+ const int MAX_STRENGTH_DVBS = 680;
+ if (*strength < MIN_STRENGTH_DVBS)
+ *strength = 0;
+ else if(*strength > MAX_STRENGTH_DVBS)
+ *strength = 0xFFFF;
+ else
+ *strength = (*strength - MIN_STRENGTH_DVBS) * 0xFFFF / (MAX_STRENGTH_DVBS - MIN_STRENGTH_DVBS);
+
dprintk(state->verbose, FE_DEBUG, 1, "AGCIQVALUE = 0x%02x, C = %d * 0.1 dBm",
val & 0xff, *strength);
}
@@ -988,6 +998,7 @@ static int stb0899_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
*strength = stb0899_table_lookup(stb0899_dvbs2rf_tab, ARRAY_SIZE(stb0899_dvbs2rf_tab) - 1, val);
*strength += 950;
+ *strength = *strength << 4;
dprintk(state->verbose, FE_DEBUG, 1, "IF_AGC_GAIN = 0x%04x, C = %d * 0.1 dBm",
val & 0x3fff, *strength);
}
@@ -1021,6 +1032,16 @@ static int stb0899_read_snr(struct dvb_frontend *fe, u16 *snr)
val = MAKEWORD16(buf[0], buf[1]);
*snr = stb0899_table_lookup(stb0899_cn_tab, ARRAY_SIZE(stb0899_cn_tab) - 1, val);
+
+ const int MIN_SNR_DVBS = 0;
+ const int MAX_SNR_DVBS = 200;
+ if (*snr < MIN_SNR_DVBS)
+ *snr = 0;
+ else if(*snr > MAX_SNR_DVBS)
+ *snr = 0xFFFF;
+ else
+ *snr = (*snr - MIN_SNR_DVBS) * 0xFFFF / (MAX_SNR_DVBS - MIN_SNR_DVBS);
+
dprintk(state->verbose, FE_DEBUG, 1, "NIR = 0x%02x%02x = %u, C/N = %d * 0.1 dBm\n",
buf[0], buf[1], val, *snr);
}
@@ -1045,6 +1066,16 @@ static int stb0899_read_snr(struct dvb_frontend *fe, u16 *snr)
val = (quantn - estn) / 10;
}
*snr = val;
+
+ const int MIN_SNR_DVBS2 = 10;
+ const int MAX_SNR_DVBS2 = 70;
+ if (*snr < MIN_SNR_DVBS2)
+ *snr = 0;
+ else if(*snr > MAX_SNR_DVBS2)
+ *snr = 0xFFFF;
+ else
+ *snr = (*snr - MIN_SNR_DVBS2) * 0xFFFF / (MAX_SNR_DVBS2 - MIN_SNR_DVBS2);
+
dprintk(state->verbose, FE_DEBUG, 1, "Es/N0 quant = %d (%d) estimate = %u (%d), C/N = %d * 0.1 dBm",
quant, quantn, est, estn, val);
}

View File

@ -1,311 +0,0 @@
fixes:
dvb-usb: found a 'Technotrend TT Connect S2-3600' in warm state.
pctv452e: pctv452e_power_ctrl: 1
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = adb60000
[00000000] *pgd=00000000
Internal error: Oops: 805 [#1] SMP ARM
fixed in kernel 4.10
---
From 48775cb73c2e26b7ca9d679875a6e570c8b8e124 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Thu, 15 Dec 2016 19:51:07 -0200
Subject: [PATCH] [media] pctv452e: move buffer to heap, no mutex
commit 73d5c5c864f4 ("[media] pctv452e: don't do DMA on stack") caused
a NULL pointer dereference which occurs when dvb_usb_init()
calls dvb_usb_device_power_ctrl() for the first time, before the
frontend has been attached. It also caused a recursive deadlock because
tt3650_ci_msg_locked() has already locked the mutex.
So, partially revert it, but move the buffer to the heap
(DMA capable), not to the stack (may not be DMA capable).
Instead of sharing one buffer which needs mutex protection,
do a new heap allocation for each call.
Fixes: commit 73d5c5c864f4 ("[media] pctv452e: don't do DMA on stack")
---
drivers/media/usb/dvb-usb/pctv452e.c | 133 +++++++++++++++++++----------------
1 file changed, 72 insertions(+), 61 deletions(-)
diff --git a/drivers/media/usb/dvb-usb/pctv452e.c b/drivers/media/usb/dvb-usb/pctv452e.c
index 07fa08b..d54ebe7 100644
--- a/drivers/media/usb/dvb-usb/pctv452e.c
+++ b/drivers/media/usb/dvb-usb/pctv452e.c
@@ -97,14 +97,13 @@ struct pctv452e_state {
u8 c; /* transaction counter, wraps around... */
u8 initialized; /* set to 1 if 0x15 has been sent */
u16 last_rc_key;
-
- unsigned char data[80];
};
static int tt3650_ci_msg(struct dvb_usb_device *d, u8 cmd, u8 *data,
unsigned int write_len, unsigned int read_len)
{
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
+ u8 *buf;
u8 id;
unsigned int rlen;
int ret;
@@ -114,36 +113,39 @@ static int tt3650_ci_msg(struct dvb_usb_device *d, u8 cmd, u8 *data,
return -EIO;
}
- mutex_lock(&state->ca_mutex);
+ buf = kmalloc(64, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
id = state->c++;
- state->data[0] = SYNC_BYTE_OUT;
- state->data[1] = id;
- state->data[2] = cmd;
- state->data[3] = write_len;
+ buf[0] = SYNC_BYTE_OUT;
+ buf[1] = id;
+ buf[2] = cmd;
+ buf[3] = write_len;
- memcpy(state->data + 4, data, write_len);
+ memcpy(buf + 4, data, write_len);
rlen = (read_len > 0) ? 64 : 0;
- ret = dvb_usb_generic_rw(d, state->data, 4 + write_len,
- state->data, rlen, /* delay_ms */ 0);
+ ret = dvb_usb_generic_rw(d, buf, 4 + write_len,
+ buf, rlen, /* delay_ms */ 0);
if (0 != ret)
goto failed;
ret = -EIO;
- if (SYNC_BYTE_IN != state->data[0] || id != state->data[1])
+ if (SYNC_BYTE_IN != buf[0] || id != buf[1])
goto failed;
- memcpy(data, state->data + 4, read_len);
+ memcpy(data, buf + 4, read_len);
- mutex_unlock(&state->ca_mutex);
+ kfree(buf);
return 0;
failed:
err("CI error %d; %02X %02X %02X -> %*ph.",
- ret, SYNC_BYTE_OUT, id, cmd, 3, state->data);
+ ret, SYNC_BYTE_OUT, id, cmd, 3, buf);
- mutex_unlock(&state->ca_mutex);
+ kfree(buf);
return ret;
}
@@ -410,53 +412,57 @@ static int pctv452e_i2c_msg(struct dvb_usb_device *d, u8 addr,
u8 *rcv_buf, u8 rcv_len)
{
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
+ u8 *buf;
u8 id;
int ret;
- mutex_lock(&state->ca_mutex);
+ buf = kmalloc(64, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
id = state->c++;
ret = -EINVAL;
if (snd_len > 64 - 7 || rcv_len > 64 - 7)
goto failed;
- state->data[0] = SYNC_BYTE_OUT;
- state->data[1] = id;
- state->data[2] = PCTV_CMD_I2C;
- state->data[3] = snd_len + 3;
- state->data[4] = addr << 1;
- state->data[5] = snd_len;
- state->data[6] = rcv_len;
+ buf[0] = SYNC_BYTE_OUT;
+ buf[1] = id;
+ buf[2] = PCTV_CMD_I2C;
+ buf[3] = snd_len + 3;
+ buf[4] = addr << 1;
+ buf[5] = snd_len;
+ buf[6] = rcv_len;
- memcpy(state->data + 7, snd_buf, snd_len);
+ memcpy(buf + 7, snd_buf, snd_len);
- ret = dvb_usb_generic_rw(d, state->data, 7 + snd_len,
- state->data, /* rcv_len */ 64,
+ ret = dvb_usb_generic_rw(d, buf, 7 + snd_len,
+ buf, /* rcv_len */ 64,
/* delay_ms */ 0);
if (ret < 0)
goto failed;
/* TT USB protocol error. */
ret = -EIO;
- if (SYNC_BYTE_IN != state->data[0] || id != state->data[1])
+ if (SYNC_BYTE_IN != buf[0] || id != buf[1])
goto failed;
/* I2C device didn't respond as expected. */
ret = -EREMOTEIO;
- if (state->data[5] < snd_len || state->data[6] < rcv_len)
+ if (buf[5] < snd_len || buf[6] < rcv_len)
goto failed;
- memcpy(rcv_buf, state->data + 7, rcv_len);
- mutex_unlock(&state->ca_mutex);
+ memcpy(rcv_buf, buf + 7, rcv_len);
+ kfree(buf);
return rcv_len;
failed:
err("I2C error %d; %02X %02X %02X %02X %02X -> %*ph",
ret, SYNC_BYTE_OUT, id, addr << 1, snd_len, rcv_len,
- 7, state->data);
+ 7, buf);
- mutex_unlock(&state->ca_mutex);
+ kfree(buf);
return ret;
}
@@ -505,7 +511,7 @@ static u32 pctv452e_i2c_func(struct i2c_adapter *adapter)
static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
{
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
- u8 *rx;
+ u8 *b0, *rx;
int ret;
info("%s: %d\n", __func__, i);
@@ -516,11 +522,12 @@ static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
if (state->initialized)
return 0;
- rx = kmalloc(PCTV_ANSWER_LEN, GFP_KERNEL);
- if (!rx)
+ b0 = kmalloc(5 + PCTV_ANSWER_LEN, GFP_KERNEL);
+ if (!b0)
return -ENOMEM;
- mutex_lock(&state->ca_mutex);
+ rx = b0 + 5;
+
/* hmm where shoud this should go? */
ret = usb_set_interface(d->udev, 0, ISOC_INTERFACE_ALTERNATIVE);
if (ret != 0)
@@ -528,66 +535,70 @@ static int pctv452e_power_ctrl(struct dvb_usb_device *d, int i)
__func__, ret);
/* this is a one-time initialization, dont know where to put */
- state->data[0] = 0xaa;
- state->data[1] = state->c++;
- state->data[2] = PCTV_CMD_RESET;
- state->data[3] = 1;
- state->data[4] = 0;
+ b0[0] = 0xaa;
+ b0[1] = state->c++;
+ b0[2] = PCTV_CMD_RESET;
+ b0[3] = 1;
+ b0[4] = 0;
/* reset board */
- ret = dvb_usb_generic_rw(d, state->data, 5, rx, PCTV_ANSWER_LEN, 0);
+ ret = dvb_usb_generic_rw(d, b0, 5, rx, PCTV_ANSWER_LEN, 0);
if (ret)
goto ret;
- state->data[1] = state->c++;
- state->data[4] = 1;
+ b0[1] = state->c++;
+ b0[4] = 1;
/* reset board (again?) */
- ret = dvb_usb_generic_rw(d, state->data, 5, rx, PCTV_ANSWER_LEN, 0);
+ ret = dvb_usb_generic_rw(d, b0, 5, rx, PCTV_ANSWER_LEN, 0);
if (ret)
goto ret;
state->initialized = 1;
ret:
- mutex_unlock(&state->ca_mutex);
- kfree(rx);
+ kfree(b0);
return ret;
}
static int pctv452e_rc_query(struct dvb_usb_device *d)
{
struct pctv452e_state *state = (struct pctv452e_state *)d->priv;
+ u8 *b, *rx;
int ret, i;
u8 id;
- mutex_lock(&state->ca_mutex);
+ b = kmalloc(CMD_BUFFER_SIZE + PCTV_ANSWER_LEN, GFP_KERNEL);
+ if (!b)
+ return -ENOMEM;
+
+ rx = b + CMD_BUFFER_SIZE;
+
id = state->c++;
/* prepare command header */
- state->data[0] = SYNC_BYTE_OUT;
- state->data[1] = id;
- state->data[2] = PCTV_CMD_IR;
- state->data[3] = 0;
+ b[0] = SYNC_BYTE_OUT;
+ b[1] = id;
+ b[2] = PCTV_CMD_IR;
+ b[3] = 0;
/* send ir request */
- ret = dvb_usb_generic_rw(d, state->data, 4,
- state->data, PCTV_ANSWER_LEN, 0);
+ ret = dvb_usb_generic_rw(d, b, 4, rx, PCTV_ANSWER_LEN, 0);
if (ret != 0)
goto ret;
if (debug > 3) {
- info("%s: read: %2d: %*ph: ", __func__, ret, 3, state->data);
- for (i = 0; (i < state->data[3]) && ((i + 3) < PCTV_ANSWER_LEN); i++)
- info(" %02x", state->data[i + 3]);
+ info("%s: read: %2d: %*ph: ", __func__, ret, 3, rx);
+ for (i = 0; (i < rx[3]) && ((i+3) < PCTV_ANSWER_LEN); i++)
+ info(" %02x", rx[i+3]);
info("\n");
}
- if ((state->data[3] == 9) && (state->data[12] & 0x01)) {
+ if ((rx[3] == 9) && (rx[12] & 0x01)) {
/* got a "press" event */
- state->last_rc_key = RC_SCANCODE_RC5(state->data[7], state->data[6]);
+ state->last_rc_key = RC_SCANCODE_RC5(rx[7], rx[6]);
if (debug > 2)
info("%s: cmd=0x%02x sys=0x%02x\n",
- __func__, state->data[6], state->data[7]);
+ __func__, rx[6], rx[7]);
rc_keydown(d->rc_dev, RC_TYPE_RC5, state->last_rc_key, 0);
} else if (state->last_rc_key) {
@@ -595,7 +606,7 @@ static int pctv452e_rc_query(struct dvb_usb_device *d)
state->last_rc_key = 0;
}
ret:
- mutex_unlock(&state->ca_mutex);
+ kfree(b);
return ret;
}