diff --git a/packages/linux-drivers/media_build/config/generic.config b/packages/linux-drivers/media_build/config/generic.config index e671524544..36fb96b292 100644 --- a/packages/linux-drivers/media_build/config/generic.config +++ b/packages/linux-drivers/media_build/config/generic.config @@ -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 diff --git a/packages/linux-drivers/media_build/config/usb.config b/packages/linux-drivers/media_build/config/usb.config index e1f731d7da..eba2a84c3b 100644 --- a/packages/linux-drivers/media_build/config/usb.config +++ b/packages/linux-drivers/media_build/config/usb.config @@ -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 diff --git a/packages/linux-drivers/media_build/package.mk b/packages/linux-drivers/media_build/package.mk index 34fd744cea..2079827f34 100644 --- a/packages/linux-drivers/media_build/package.mk +++ b/packages/linux-drivers/media_build/package.mk @@ -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" diff --git a/packages/linux-drivers/media_build/patches/media_build-02-add-to-backports.patch b/packages/linux-drivers/media_build/patches/media_build-02-add-to-backports.patch index a53ae3c5e7..4f81b7a0c2 100644 --- a/packages/linux-drivers/media_build/patches/media_build-02-add-to-backports.patch +++ b/packages/linux-drivers/media_build/patches/media_build-02-add-to-backports.patch @@ -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 diff --git a/packages/linux-drivers/media_build/patches/media_build-03-fix-menuconfig.patch b/packages/linux-drivers/media_build/patches/media_build-03-fix-menuconfig.patch deleted file mode 100644 index 2d7589e252..0000000000 --- a/packages/linux-drivers/media_build/patches/media_build-03-fix-menuconfig.patch +++ /dev/null @@ -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. - diff --git a/packages/linux-drivers/media_build/sources/backports/linux-052-XBOX_remote_support.patch b/packages/linux-drivers/media_build/sources/backports/linux-052-XBOX_remote_support.patch index 399739dde0..3521d9e86f 100644 --- a/packages/linux-drivers/media_build/sources/backports/linux-052-XBOX_remote_support.patch +++ b/packages/linux-drivers/media_build/sources/backports/linux-052-XBOX_remote_support.patch @@ -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 + diff --git a/packages/linux-drivers/media_build/sources/backports/linux-063-fix-rc-raw-decoder-loading.patch b/packages/linux-drivers/media_build/sources/backports/linux-063-fix-rc-raw-decoder-loading.patch deleted file mode 100644 index 69f6eb3e9f..0000000000 --- a/packages/linux-drivers/media_build/sources/backports/linux-063-fix-rc-raw-decoder-loading.patch +++ /dev/null @@ -1,46 +0,0 @@ -From d13ee07f431c94ea72320ea4136e75ebeaee98c1 Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -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 - diff --git a/packages/linux-drivers/media_build/sources/backports/linux-220-cx231xx-suspend-fix.patch b/packages/linux-drivers/media_build/sources/backports/linux-220-cx231xx-suspend-fix.patch deleted file mode 100644 index 7a6f2f305d..0000000000 --- a/packages/linux-drivers/media_build/sources/backports/linux-220-cx231xx-suspend-fix.patch +++ /dev/null @@ -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 -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); - } - diff --git a/packages/linux-drivers/media_build/sources/backports/linux-220-hauppauge_dualhd_second_tuner_support.patch b/packages/linux-drivers/media_build/sources/backports/linux-220-hauppauge_dualhd_second_tuner_support.patch new file mode 100644 index 0000000000..46200b9b6c --- /dev/null +++ b/packages/linux-drivers/media_build/sources/backports/linux-220-hauppauge_dualhd_second_tuner_support.patch @@ -0,0 +1,586 @@ +From: Brad Love +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 + diff --git a/packages/linux-drivers/media_build/sources/backports/linux-222-stb0899_signal_quality.patch b/packages/linux-drivers/media_build/sources/backports/linux-222-stb0899_signal_quality.patch deleted file mode 100644 index 2e2ab8e6f7..0000000000 --- a/packages/linux-drivers/media_build/sources/backports/linux-222-stb0899_signal_quality.patch +++ /dev/null @@ -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); - } diff --git a/packages/linux-drivers/media_build/sources/backports/linux-240-pctv452e_kernel_oops_in_4.9.patch b/packages/linux-drivers/media_build/sources/backports/linux-240-pctv452e_kernel_oops_in_4.9.patch deleted file mode 100644 index 72559d16ff..0000000000 --- a/packages/linux-drivers/media_build/sources/backports/linux-240-pctv452e_kernel_oops_in_4.9.patch +++ /dev/null @@ -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 -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; - } -