Merge tag 'media/v4.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: - videobuf2 was moved to a media/common dir, as it is now used by the DVB subsystem too - Digital TV core memory mapped support interface - new sensor driver: ov7740 - several improvements at ddbridge driver - new V4L2 driver: IPU3 CIO2 CSI-2 receiver unit, found on some Intel SoCs - new tuner driver: tda18250 - finally got rid of all LIRC staging drivers - as we don't have old lirc drivers anymore, restruct the lirc device code - add support for UVC metadata - add a new staging driver for NVIDIA Tegra Video Decoder Engine - DVB kAPI headers moved to include/media - synchronize the kAPI and uAPI for the DVB subsystem, removing the gap for non-legacy APIs - reduce the kAPI gap for V4L2 - lots of other driver enhancements, cleanups, etc. * tag 'media/v4.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (407 commits) media: v4l2-compat-ioctl32.c: make ctrl_is_pointer work for subdevs media: v4l2-compat-ioctl32.c: refactor compat ioctl32 logic media: v4l2-compat-ioctl32.c: don't copy back the result for certain errors media: v4l2-compat-ioctl32.c: drop pr_info for unknown buffer type media: v4l2-compat-ioctl32.c: copy clip list in put_v4l2_window32 media: v4l2-compat-ioctl32.c: fix ctrl_is_pointer media: v4l2-compat-ioctl32.c: copy m.userptr in put_v4l2_plane32 media: v4l2-compat-ioctl32.c: avoid sizeof(type) media: v4l2-compat-ioctl32.c: move 'helper' functions to __get/put_v4l2_format32 media: v4l2-compat-ioctl32.c: fix the indentation media: v4l2-compat-ioctl32.c: add missing VIDIOC_PREPARE_BUF media: v4l2-ioctl.c: don't copy back the result for -ENOTTY media: v4l2-ioctl.c: use check_fmt for enum/g/s/try_fmt media: vivid: fix module load error when enabling fb and no_error_inj=1 media: dvb_demux: improve debug messages media: dvb_demux: Better handle discontinuity errors media: cxusb, dib0700: ignore XC2028_I2C_FLUSH media: ts2020: avoid integer overflows on 32 bit machines media: i2c: ov7740: use gpio/consumer.h instead of gpio.h media: entity: Add a nop variant of media_entity_cleanup ...
Этот коммит содержится в:
@@ -1309,6 +1309,12 @@ static int s5p_mfc_probe(struct platform_device *pdev)
|
||||
goto err_dma;
|
||||
}
|
||||
|
||||
/*
|
||||
* Load fails if fs isn't mounted. Try loading anyway.
|
||||
* _open() will load it, it it fails now. Ignore failure.
|
||||
*/
|
||||
s5p_mfc_load_firmware(dev);
|
||||
|
||||
mutex_init(&dev->mfc_mutex);
|
||||
init_waitqueue_head(&dev->queue);
|
||||
dev->hw_lock = 0;
|
||||
|
@@ -290,6 +290,8 @@ struct s5p_mfc_priv_buf {
|
||||
* @mfc_cmds: cmd structure holding HW commands function pointers
|
||||
* @mfc_regs: structure holding MFC registers
|
||||
* @fw_ver: loaded firmware sub-version
|
||||
* @fw_get_done flag set when request_firmware() is complete and
|
||||
* copied into fw_buf
|
||||
* risc_on: flag indicates RISC is on or off
|
||||
*
|
||||
*/
|
||||
@@ -336,6 +338,7 @@ struct s5p_mfc_dev {
|
||||
struct s5p_mfc_hw_cmds *mfc_cmds;
|
||||
const struct s5p_mfc_regs *mfc_regs;
|
||||
enum s5p_mfc_fw_ver fw_ver;
|
||||
bool fw_get_done;
|
||||
bool risc_on; /* indicates if RISC is on or off */
|
||||
};
|
||||
|
||||
|
@@ -55,6 +55,9 @@ int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev)
|
||||
* into kernel. */
|
||||
mfc_debug_enter();
|
||||
|
||||
if (dev->fw_get_done)
|
||||
return 0;
|
||||
|
||||
for (i = MFC_FW_MAX_VERSIONS - 1; i >= 0; i--) {
|
||||
if (!dev->variant->fw_name[i])
|
||||
continue;
|
||||
@@ -75,13 +78,9 @@ int s5p_mfc_load_firmware(struct s5p_mfc_dev *dev)
|
||||
release_firmware(fw_blob);
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (!dev->fw_buf.virt) {
|
||||
mfc_err("MFC firmware is not allocated\n");
|
||||
release_firmware(fw_blob);
|
||||
return -EINVAL;
|
||||
}
|
||||
memcpy(dev->fw_buf.virt, fw_blob->data, fw_blob->size);
|
||||
wmb();
|
||||
dev->fw_get_done = true;
|
||||
release_firmware(fw_blob);
|
||||
mfc_debug_leave();
|
||||
return 0;
|
||||
@@ -93,6 +92,7 @@ int s5p_mfc_release_firmware(struct s5p_mfc_dev *dev)
|
||||
/* Before calling this function one has to make sure
|
||||
* that MFC is no longer processing */
|
||||
s5p_mfc_release_priv_buf(dev, &dev->fw_buf);
|
||||
dev->fw_get_done = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -2080,7 +2080,7 @@ int s5p_mfc_enc_ctrls_setup(struct s5p_mfc_ctx *ctx)
|
||||
|
||||
if (cfg.type == V4L2_CTRL_TYPE_MENU) {
|
||||
cfg.step = 0;
|
||||
cfg.menu_skip_mask = cfg.menu_skip_mask;
|
||||
cfg.menu_skip_mask = controls[i].menu_skip_mask;
|
||||
cfg.qmenu = mfc51_get_menu(cfg.id);
|
||||
} else {
|
||||
cfg.step = controls[i].step;
|
||||
|
Ссылка в новой задаче
Block a user