OSDN Git Service
Max Kellermann [Tue, 9 Aug 2016 21:32:46 +0000 (18:32 -0300)]
[media] stb0899: move code to "detach" callback
Ensure that STB0899_POSTPROC_GPIO_POWER is set synchronously.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:41 +0000 (18:32 -0300)]
[media] dvb_frontend: add "detach" callback
Prepare for making "release" asynchronous (via kref). Some operations
may need to be run synchronously in dvb_frontend_detach(), and that's
why we need a "detach" callback.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:36 +0000 (18:32 -0300)]
[media] dvb_frontend: merge the two dvb_frontend_detach() versions
This code duplication is confusing and error prone. Let's merge them
by moving the release/dvb_detach call into one function with one
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:31 +0000 (18:32 -0300)]
[media] dvb_frontend: tuner_ops.release returns void
It is not clear what this return value means. All implemenations
return 0, and the one caller ignores the value. Let's remove this
useless return value completely.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:26 +0000 (18:32 -0300)]
[media] dvb_frontend: merge duplicate dvb_tuner_ops.release implementations
Most release callback functions are identical: free the "tuner_priv"
and clear it. Let's eliminate some bloat by providing this simple
implementation in the dvb_frontend library.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:16 +0000 (18:32 -0300)]
[media] dvb-core/en50221: use dvb_remove_device()
Commit
da677fe14364 ("[media] dvb-core/en50221: use kref to manage
struct dvb_ca_private") moved the dvb_unregister_device() call to the
kref callback, but that left lots of stale device state visible to
userspace (e.g. in sysfs). By using dvb_remove_device() and
dvb_free_device() instead of dvb_unregister_device(), we can avoid
that.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:11 +0000 (18:32 -0300)]
[media] dvbdev: split dvb_unregister_device()
dvb_unregister_device() has a major problem: it combines unregistering
with memory disposal. Sometimes, it is necessary to unregister a
device, but no memory can be freed yet, because a process still has a
(stale) file handle. Therefore, we need to split
dvb_unregister_device(). This will allow sanitizing a few callers.
With my new design, dvb_unregister_device() appears misnamed, but to
reduce patch noise, I'm not renaming it just yet.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:21 +0000 (18:32 -0300)]
[media] dvb: make DVB frontend *_ops instances "const"
These are immutable. Making them "const" allows the compiler to move
them to the "rodata" section.
Note that cxd2841er_t_c_ops cannot be made "const", because
cxd2841er_attach() modifies it. Ouch!
[mchehab@s-opensource.com: fix merge conflicts]
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Max Kellermann [Tue, 9 Aug 2016 21:32:06 +0000 (18:32 -0300)]
[media] rc-main: clear rc_map.name in ir_free_table()
rc_unregister_device() will first call ir_free_table(), and later
device_del(); however, the latter causes a call to rc_dev_uevent(),
which prints rc_map.name, which at this point has already bee freed.
This fixes a use-after-free bug found with KASAN.
As reported by Shuah:
"I am seeing the following when I do rmmod on au0828
BUG: KASAN: use-after-free in string+0x170/0x1f0 at addr
ffff8801bd513000
Read of size 1 by task rmmod/1831
CPU: 1 PID: 1831 Comm: rmmod Tainted: G W 4.9.0-rc5 #5
Hardware name: Hewlett-Packard HP ProBook 6475b/180F, BIOS 68TTU Ver. F.04 08/03/2012
ffff8801aea2f680 ffffffff81b37ad3 ffff8801fa403b80 ffff8801bd513000
ffff8801aea2f6a8 ffffffff8156c301 ffff8801aea2f738 ffff8801bd513000
ffff8801fa403b80 ffff8801aea2f728 ffffffff8156c59a ffff8801aea2f770
Call Trace:
dump_stack+0x67/0x94
[<
ffffffff8156c301>] kasan_object_err+0x21/0x70
[<
ffffffff8156c59a>] kasan_report_error+0x1fa/0x4d0
[<
ffffffffa116f05f>] ? au0828_exit+0x10/0x21 [au0828]
[<
ffffffff8156c8b3>] __asan_report_load1_noabort+0x43/0x50
[<
ffffffff81b58b20>] ? string+0x170/0x1f0
[<
ffffffff81b58b20>] string+0x170/0x1f0
[<
ffffffff81b621c4>] vsnprintf+0x374/0x1c50
[<
ffffffff81b61e50>] ? pointer+0xa80/0xa80
[<
ffffffff8156b676>] ? save_stack+0x46/0xd0
[<
ffffffff81566faa>] ? __kmalloc+0x14a/0x2a0
[<
ffffffff81b3d70a>] ? kobject_get_path+0x9a/0x200
[<
ffffffff81b408c2>] ? kobject_uevent_env+0x282/0xca0
[<
ffffffff81b412eb>] ? kobject_uevent+0xb/0x10
[<
ffffffff81f10104>] ? device_del+0x434/0x6d0
[<
ffffffffa0fea717>] ? rc_unregister_device+0x177/0x240 [rc_core]
[<
ffffffffa116eeb0>] ? au0828_rc_unregister+0x60/0xb0 [au0828]
The problem is fixed with this patch on Linux 4.9-rc4"
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Tested-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Peter Chen [Fri, 15 Jul 2016 09:33:06 +0000 (06:33 -0300)]
[media] media: platform: ti-vpe: call of_node_put on non-null pointer
It should call of_node_put on non-null poiner.
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Acked-by: Benoit Parrot <bparrot@ti.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Dan Carpenter [Thu, 14 Jul 2016 10:18:14 +0000 (07:18 -0300)]
[media] blackfin: check devm_pinctrl_get() for errors
devm_pinctrl_get() can fail so we should check for that.
Fixes:
0a6824bc10de ('[media] v4l2: blackfin: select proper pinctrl state in ppi_set_params if CONFIG_PINCTRL is enabled')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Andi Shyti [Wed, 6 Jul 2016 09:01:22 +0000 (06:01 -0300)]
[media] lirc_dev: remove compat_ioctl assignment
There is no need to check for CONFIG_COMPAT and consequently
assign the compat_ioctl.
Signed-off-by: Andi Shyti <andi.shyti@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Maciej S. Szmigiero [Sat, 2 Jul 2016 23:27:46 +0000 (20:27 -0300)]
[media] saa7134: fix warm Medion 7134 EEPROM read
When saa7134 module driving a Medion 7134 card is reloaded reads of this
card EEPROM (required for automatic detection of tuner model) will be
corrupted due to I2C gate in DVB-T demod being left closed.
This sometimes also happens on first saa7134 module load after a warm
reboot.
Fix this by opening this I2C gate before doing EEPROM read during i2c
initialization.
Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
CrazyCat [Fri, 21 Oct 2016 19:35:40 +0000 (17:35 -0200)]
[media] dvb-usb-cxusb: Geniatech T230 - resync TS FIFO after lock
This patch fix streaming issue for Geniatech T230/PT360.
Signed-off-by: CrazyCat <crazycat69@narod.ru>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Peter Griffin [Fri, 21 Oct 2016 08:55:32 +0000 (06:55 -0200)]
[media] c8sectpfe: Remove clk_disable_unprepare hacks
Now that CLK_PROC_STFE is defined as a critical clock in
DT, we can remove the commented clk_disable_unprepare from
the c8sectpfe driver. This means we now have balanced
clk*enable/disable calls in the driver, but on STiH407
family the clock in reality will never actually be disabled.
This is due to a HW bug where once the IP has been configured
and the SLIM core is running, disabling the clock causes a
unrecoverable bus lockup.
Signed-off-by: Peter Griffin <peter.griffin@linaro.org>
Acked-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Jean-Baptiste Abbadie [Wed, 19 Oct 2016 20:47:14 +0000 (18:47 -0200)]
[media] Staging: media: radio-bcm2048: Remove FSF address from GPL notice
Removes the superfluous statement about writing to the FSF in the GPL
notice
Signed-off-by: Jean-Baptiste Abbadie <jb@abbadie.fr>
Acked-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Jean-Baptiste Abbadie [Wed, 19 Oct 2016 20:47:13 +0000 (18:47 -0200)]
[media] Staging: media: radio-bcm2048: Fix indentation
Align multiple lines statement with parentheses
Signed-off-by: Jean-Baptiste Abbadie <jb@abbadie.fr>
Acked-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Jean-Baptiste Abbadie [Wed, 19 Oct 2016 20:47:12 +0000 (18:47 -0200)]
[media] Staging: media: radio-bcm2048: Fix symbolic permissions
This replaces the S_* style permissions by numbers for the __ATTR macros
Signed-off-by: Jean-Baptiste Abbadie <jb@abbadie.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Sakari Ailus [Wed, 19 Oct 2016 14:28:45 +0000 (12:28 -0200)]
[media] doc-rst: v4l: Add documentation on CSI-2 bus configuration
Document the interface between the CSI-2 transmitter and receiver drivers.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Fri, 14 Oct 2016 05:19:00 +0000 (02:19 -0300)]
[media] winbond-cir: Use kmalloc_array() in wbcir_tx()
A multiplication for the size determination of a memory allocation
indicated that an array data structure should be processed.
Thus use the corresponding function "kmalloc_array".
This issue was detected by using the Coccinelle software.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: David Härdeman <david@hardeman.nu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 12:54:46 +0000 (09:54 -0300)]
[media] RedRat3: Return directly after a failed rc_allocate_device() in redrat3_init_rc_dev()
Return directly after a call of the function "rc_allocate_device" failed
at the beginning.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 12:17:43 +0000 (09:17 -0300)]
[media] RedRat3: Delete an unnecessary variable initialisation in redrat3_init_rc_dev()
The local variable "ret" will be set to an appropriate value a bit later.
Thus omit the explicit initialisation at the beginning.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 11:21:55 +0000 (08:21 -0300)]
[media] RedRat3: Delete an unnecessary variable initialisation in redrat3_get_firmware_rev()
The local variable "rc" will be set to an appropriate value a bit later.
Thus omit the explicit initialisation at the beginning.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 08:34:29 +0000 (05:34 -0300)]
[media] RedRat3: Return directly after a failed kcalloc() in redrat3_transmit_ir()
* Return directly after a call of the function "kcalloc" failed
at the beginning.
* Reorder two calls for the function "kfree" at the end.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 11:23:22 +0000 (08:23 -0300)]
[media] RedRat3: Improve another size determination in redrat3_reset()
Replace the specification of a data type by a pointer dereference
as the parameter for the operator "sizeof" to make the corresponding size
determination a bit safer.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 11:20:19 +0000 (08:20 -0300)]
[media] RedRat3: Delete six messages for a failed memory allocation
The script "checkpatch.pl" pointed information out like the following.
WARNING: Possible unnecessary 'out of memory' message
Thus remove such a logging statement in five functions.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Markus Elfring [Thu, 13 Oct 2016 06:35:57 +0000 (03:35 -0300)]
[media] RedRat3: Use kcalloc() in two functions
* Multiplications for the size determination of memory allocations
indicated that array data structures should be processed.
Thus use the corresponding function "kcalloc".
This issue was detected by using the Coccinelle software.
* Replace the specification of data types by pointer dereferences
to make the corresponding size determination a bit safer according to
the Linux coding style convention.
Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 16 Nov 2016 16:21:48 +0000 (14:21 -0200)]
[media] tveeprom: print log messages using pr_foo()
Unfortunately, the callers of tveeprom don't do the right
thing to initialize the device. So, it produces log messages
like:
[ 267.533010] (null): Hauppauge model 42012, rev C186, serial#
2819348
[ 267.533012] (null): tuner model is Philips FQ1236 MK3 (idx 86, type 43)
[ 267.533013] (null): TV standards NTSC(M) (eeprom 0x08)
[ 267.533014] (null): audio processor is MSP3445 (idx 12)
[ 267.533015] (null): has radio
So, replace it to pr_foo(), as it should work fine.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 20 Oct 2016 17:04:39 +0000 (15:04 -0200)]
[media] rc-main: use pr_foo() macros
Instead of calling printk() directly, use pr_foo() macro.
That should make the rc_core messages be formatted with the
right prefix.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 20 Oct 2016 13:36:42 +0000 (11:36 -0200)]
[media] tvp5150: get rid of KERN_CONT
Unfortunately, KERN_CONT doesn't work with dev_foo(),
producing weird messages like:
tvp5150 6-005c: tvp5150: read 0xf6 = 0xff
ff
So, we need to get rid of it.
As we're always printing read/write in hexa when dumping
multiple register values, also remove the "0x" from the
read/write debug messages too.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Sun, 13 Nov 2016 07:34:12 +0000 (05:34 -0200)]
[media] tvp5150: Get rid of direct calls to printk()
When returning results via v4l2_subdev_core_ops.log_status,
use dev_foo() call, instead of just calling printk()
directly, without even specifying the log message level.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 16 Nov 2016 10:58:05 +0000 (08:58 -0200)]
[media] tvp5150: convert it to use dev_foo() macros
Instead of using v4l_foo(), use the dev_foo() macros, as
most modern media drivers.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 20 Oct 2016 10:42:03 +0000 (08:42 -0200)]
[media] em28xx: convert it from pr_foo() to dev_foo()
Instead of using pr_foo(), use dev_foo(), with provides a
better output. As this device is a multi-interface one,
we'll set the device name to show the chipset and the driver
used.
While here, get rid of printk continuation messages.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 16 Nov 2016 11:10:14 +0000 (09:10 -0200)]
[media] msp3400: convert it to use dev_foo() macros
Instead of using the v4l_foo() macros, just use the
kernel-wide dev_foo() macros, as there's no good reason
to use something else.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 20 Oct 2016 10:03:00 +0000 (08:03 -0200)]
[media] msp3400-driver: don't use KERN_CONT
Drivers using dev_foo() macro should not use KERN_CONT, as, internally,
those macros work as if all strings were terminated by a \n. So, doing:
dev_info(&client->dev, "%s ", client->name);
printk(KERN_CONT "supports radio, mode is autodetect and autoselect");
Would produce the following output:
msp3400 6-0044: msp3400
supports radio, mode is autodetect and autoselect
As there's no good reason to use KERN_CONT, let's rewrite the code
to avoid that, allowing this driver to be converted to dev_foo().
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 16 Nov 2016 10:35:08 +0000 (08:35 -0200)]
[media] v4l2-common: add a debug macro to be used with dev_foo()
Currently, there's a mess at the V4L2 printk macros: some drivers
use their own macros, others use pr_foo() or v4l_foo() macros,
while more modern drivers use dev_foo() macros.
The best is to get rid of v4l_foo() macros, as they can be
replaced by either dev_foo() or pr_foo(). Yet, such change can
be disruptive, as dev_foo() cannot use KERN_CONT. So, the best
is to do such change driver by driver.
There are replacements for most v4l_foo() macros, but it lacks
a way to enable debug messages per level. So, add such macro,
in order to make the conversion easier.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 19 Oct 2016 20:12:03 +0000 (18:12 -0200)]
[media] tuner-core: use pr_foo, instead of internal printk macros
Tuner core uses its own printk internal macros, instead of the
standard debug ones, for no good reason.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 13:44:04 +0000 (10:44 -0300)]
[media] af9005: remove a printk that would require a KERN_CONT
The dvb-usb system has its own macro to print hexa dumps
(debug_dump). Such macro doesn't support messages with
KERN_CONT after commit
563873318d32 ("Merge branch 'printk-cleanups'").
So, let's get rid of a printk() that would be assuming that
this would work.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 13:28:42 +0000 (10:28 -0300)]
[media] dibx000_common: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 13:08:40 +0000 (10:08 -0300)]
[media] dib9000: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a\n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 13:05:46 +0000 (10:05 -0300)]
[media] dib8000: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a\n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 12:35:33 +0000 (09:35 -0300)]
[media] dib7000p: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 11:57:27 +0000 (08:57 -0300)]
[media] dib7000m: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 11:55:41 +0000 (08:55 -0300)]
[media] dib3000mc: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 11:44:10 +0000 (08:44 -0300)]
[media] dib3000mb: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups'").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
The frontend settings also rely on continuation lines. Change
it to avoid the need of adding pr_cont() calls.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 11:16:43 +0000 (08:16 -0300)]
[media] dib0090: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 11:10:15 +0000 (08:10 -0300)]
[media] dib0070: use pr_foo() instead of printk()
The dprintk() macro relies on continuation lines. This is not
a good practice and will break after commit
563873318d32
("Merge branch 'printk-cleanups").
So, instead of directly calling printk(), use pr_foo() macros,
adding a \n leading char on each macro call.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 10:58:43 +0000 (07:58 -0300)]
[media] ttpci: cleanup debug macros and remove dead code
Continuation lines without KERN_CONT won't work anymore.
However, the way dprintk() was defined leads to the usage
of continuation lines, with should be avoided when possible.
So, redefine those macros.
While hre, remove some dead code at av7110.c with also
relies on continuation lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 10:44:05 +0000 (07:44 -0300)]
[media] ttusb_dec: use KERNEL_CONT where needed
Some continuation messages are not using KERNEL_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 10:39:46 +0000 (07:39 -0300)]
[media] pvrusb2: use KERNEL_CONT where needed
Some continuation messages are not using KERNEL_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 10:33:00 +0000 (07:33 -0300)]
[media] wl128x: use KERNEL_CONT where needed
Some continuation messages are not using KERNEL_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 10:27:36 +0000 (07:27 -0300)]
[media] zoran: use KERN_CONT where needed
Some continuation messages are not using KERN_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 10:14:37 +0000 (07:14 -0300)]
[media] pluto2: use KERN_CONT where needed
Some continuation messages are not using KERN_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 16 Nov 2016 08:59:49 +0000 (06:59 -0200)]
[media] cx88: make checkpatch happier
This driver is old, and have lots of checkpatch violations.
As we're touching a lot on this driver due to the printk
conversions, let's run checkpatch --fix on it, in order to
solve some of those issues.
Also, do a few manual adjustments:
- remove the FSF address and use the usual coding style
for the initial comments;
- use WARN_ON() instead of BUG_ON();
- remove an unused typedef;
- break a few long lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Sun, 13 Nov 2016 12:07:38 +0000 (10:07 -0200)]
[media] cx88: convert it to use pr_foo() macros
Instead of calling printk() directly, use pr_foo()
macros, as suggested at the Kernel's coding style.
Please notice that a conversion to dev_foo() is not trivial,
as several parts on this driver uses pr_cont().
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 09:58:14 +0000 (06:58 -0300)]
[media] cx88: use KERN_CONT where needed
Some continuation messages are not using KERN_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups'"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
While here, add missing log level annotations.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Sun, 13 Nov 2016 11:46:11 +0000 (09:46 -0200)]
[media] cx23885: convert it to use pr_foo() macros
Instead of calling printk() directly, use pr_foo()
macros, as suggested at the Kernel's coding style.
Please notice that a conversion to dev_foo() is not trivial,
as several parts on this driver uses pr_cont().
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Mon, 14 Nov 2016 13:14:37 +0000 (11:14 -0200)]
gp8psk-fe: add missing MODULE_foo() macros
This file was converted to a separate module at commit
7a0786c19d65
("gp8psk: Fix DVB frontend attach"), because the DVB attach routines
require it to work. However, I forgot to copy the MODULE_foo() macros
from the original module, causing this warning:
WARNING: modpost: missing MODULE_LICENSE() in drivers/media/dvb-frontends/gp8psk-fe.o
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Fixes:
7a0786c19d65 ("gp8psk: Fix DVB frontend attach")
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 09:50:56 +0000 (06:50 -0300)]
[media] cx23885: use KERN_CONT where needed
Some continuation messages are not using KERN_CONT.
Since commit
563873318d32 ("Merge branch 'printk-cleanups'"),
this won't work as expected anymore. So, let's add KERN_CONT
to those lines.
While here, add missing log level annotations.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Fri, 14 Oct 2016 09:33:25 +0000 (06:33 -0300)]
[media] bt8xx: use pr_foo() macros instead of printk()
Replace printk() macros by their pr_foo() counterparts, using
pr_cont() for continuation lines.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 13 Oct 2016 18:57:58 +0000 (15:57 -0300)]
[media] bt8xx/dst: use a more standard way to print messages
This driver uses a weird, non-standard macro to print errors.
It allows hiding all messages, including error ones, with doesn't
seem a good idea.
Instead, replace it to pr_foo(), and, for error messages,
use pr_err().
The remaining messages were previouly classified as notice,
info or debug, but they all looked like debug messages.
So, add a dprintk() macro using the "verbose" modprobe
argument to select what will be displayed.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 13 Oct 2016 18:42:47 +0000 (15:42 -0300)]
[media] stv090x: get rid of continuation lines
This driver has printk continuation lines for debugging purposes.
Since commit
563873318d32 ("Merge branch 'printk-cleanups'")',
this won't work as expected anymore.
So, use %*ph and get rid of it.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 13 Oct 2016 18:39:45 +0000 (15:39 -0300)]
[media] stb0899_drv: get rid of continuation lines
This driver has printk continuation lines for debugging purposes.
Since commit
563873318d32 ("Merge branch 'printk-cleanups'")',
this won't work as expected anymore.
So, use %*ph and get rid of it.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Mon, 14 Nov 2016 15:50:42 +0000 (13:50 -0200)]
[media] docs-rst: cleanup SVG files
The SVG files are larger than the draw dimentions, have long
lines and aren't cleaned. Use inkscape to automatically fix
those issues.
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Thu, 27 Oct 2016 08:23:09 +0000 (06:23 -0200)]
[media] dtv-core: get rid of duplicated kernel-doc include
Somehow, two DVB headers were included twice. Remove the
duplication
Reported-by: Markus Heiser <markus.heiser@darmarit.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Mauro Carvalho Chehab [Wed, 16 Nov 2016 18:42:27 +0000 (16:42 -0200)]
Merge tag 'v4.9-rc5' into patchwork
Linux 4.9-rc5
* tag 'v4.9-rc5': (1102 commits)
Linux 4.9-rc5
gp8psk: Fix DVB frontend attach
gp8psk: fix gp8psk_usb_in_op() logic
dvb-usb: move data_mutex to struct dvb_usb_device
iio: maxim_thermocouple: detect invalid storage size in read()
aoe: fix crash in page count manipulation
lightnvm: invalid offset calculation for lba_shift
Kbuild: enable -Wmaybe-uninitialized warnings by default
pcmcia: fix return value of soc_pcmcia_regulator_set
infiniband: shut up a maybe-uninitialized warning
crypto: aesni: shut up -Wmaybe-uninitialized warning
rc: print correct variable for z8f0811
dib0700: fix nec repeat handling
s390: pci: don't print uninitialized data for debugging
nios2: fix timer initcall return value
x86: apm: avoid uninitialized data
NFSv4.1: work around -Wmaybe-uninitialized warning
Kbuild: enable -Wmaybe-uninitialized warning for "make W=1"
lib/stackdepot: export save/fetch stack for drivers
mm: kmemleak: scan .data.ro_after_init
...
Marek Szyprowski [Mon, 14 Nov 2016 14:09:26 +0000 (12:09 -0200)]
[media] s5p-mfc: Fix clock management in s5p_mfc_release() function
Clock control indirectly requires access to MFC device, so call it only
if we are sure that the device exists in s5p_mfc_release function.
s5p_mfc_remove() calls s5p_mfc_final_pm(), which releases all PM related
resources, including clocks, so any call to clocks related functions
is not valid after s5p_mfc_final_pm().
Fixes:
d695c12 ("[media] media: s5p-mfc fix invalid memory access from
s5p_mfc_release()")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Thu, 10 Nov 2016 10:31:23 +0000 (08:31 -0200)]
[media] s5p-mfc: Use clock gating only on MFC v5 hardware
Newer MFC hardware have internal clock gating feature, so additional
software-triggered clock gating sometimes causes misbehavior of the MFC
firmware and results in freeze or crash. This patch changes the driver
to use software-triggered clock gating only when working with v5 MFC
hardware, where it has been proven to work properly.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Donghwa Lee [Thu, 10 Nov 2016 10:31:22 +0000 (08:31 -0200)]
[media] s5p-mfc: Skip incomplete frame
Currently, when incomplete frame is received in the middle of
decoding, driver treats it as an error, so src/dst queue and
clock are cleaned. Although it is obviously error case, it is
needed to maintain video decoding in case of necessity. This
patch supports skip incomplete frame to next.
Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ingi Kim [Thu, 10 Nov 2016 10:31:21 +0000 (08:31 -0200)]
[media] s5p-mfc: Fix MFC context buffer size
When video file was decoded by H/W MFCv8. It occurred IOMMU page fault
because of accessing abnormal memory of mfc ctx buf.
So this patch supports buffer size of mfc context more.
Relevant page fault error is below.
[ 3524.617147] PAGE FAULT occurred at 0x10108000 by
11200000.sysmmu(Page table base: 0x6d86c000)
[ 3524.624192] Lv1 entry: 0x6c27d001
[ 3524.627567] Lv2 entry: 0x0
[ 3524.630482] ------------[ cut here ]------------
[ 3524.635020] kernel BUG at drivers/iommu/exynos-iommu.c:358!
[ 3524.640567] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
[ 3524.646373] Modules linked in:
[ 3524.649410] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
4.0.0-00001-g0ff9b87-dirty #18
[ 3524.657117] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[ 3524.663184] task:
c0e4aff0 ti:
c0e3c000 task.ti:
c0e3c000
[ 3524.668566] PC is at exynos_sysmmu_irq+0x1b8/0x2c4
[ 3524.673330] LR is at vprintk_emit+0x2b8/0x58c
[ 3524.677657] pc : [<
c037cc78>] lr : [<
c00704a4>] psr:
600d0193
[ 3524.677657] sp :
c0e3dd90 ip :
00000000 fp :
c0e3ddcc
[ 3524.689092] r10:
ee29a110 r9 :
00000000 r8 :
ee29a128
[ 3524.694292] r7 :
ed812810 r6 :
10108000 r5 :
ed86c000 r4 :
00000000
[ 3524.700791] r3 :
c0ec9bd8 r2 :
00000000 r1 :
00000000 r0 :
ed82ff00
[ 3524.707292] Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
[ 3524.714656] Control:
10c5387d Table:
6b08c06a DAC:
00000015
[ 3524.720375] Process swapper/0 (pid: 0, stack limit = 0xc0e3c210)
[ 3524.726354] Stack: (0xc0e3dd90 to 0xc0e3e000)
[ 3524.730689] dd80:
c0e3dd9c c0069d68 ee58c338 6d86c000
[ 3524.738836] dda0:
ee58c338 ee298c40 ee2915a0 0000003b c0e64ef4 c0e3c000 00000000 00000000
[ 3524.746981] ddc0:
c0e3de14 c0e3ddd0 c0071ef4 c037cacc ffffffff a00d0193 c0e3ddf4 ee291540
[ 3524.755126] dde0:
c0ec793c c0ec7928 7fffffff ee291540 ee2915a0 ee298c40 c0e64ef4 ee004660
[ 3524.763272] de00:
ee010800 c0e3df00 c0e3de34 c0e3de18 c0072138 c0071e9c 00020000 ee291540
[ 3524.771418] de20:
ee2915a0 00000016 c0e3de4c c0e3de38 c0075130 c00720f8 0000003b ee028300
[ 3524.779563] de40:
c0e3de64 c0e3de50 c0071450 c0075068 00000100 00000012 c0e3de8c c0e3de68
[ 3524.787708] de60:
c030d240 c0071420 c030d19c 00000016 00000000 00000016 00000000 00000001
[ 3524.795854] de80:
c0e3dea4 c0e3de90 c0071450 c030d1a8 00000092 c0e37a1c c0e3ded4 c0e3dea8
[ 3524.804000] dea0:
c0071790 c0071420 c0e3df00 f000200c 00000016 c0e440a8 c0e3df00 f0002000
[ 3524.812145] dec0:
c095bc8c 00000001 c0e3defc c0e3ded8 c0008730 c0071710 c0010d88 c0010d8c
[ 3524.820290] dee0:
600d0013 ffffffff c0e3df34 c0ec7eb4 c0e3df54 c0e3df00 c0014780 c00086fc
[ 3524.828436] df00:
00000001 00000000 00000000 c0020780 c0e3c000 c0e43530 00000000 00000000
[ 3524.836581] df20:
c0ec7eb4 c095bc8c 00000001 c0e3df54 c0e3df58 c0e3df48 c0010d88 c0010d8c
[ 3524.844727] df40:
600d0013 ffffffff c0e3df94 c0e3df58 c0062690 c0010d50 c0ec75f0 00000001
[ 3524.852872] df60:
c0e3df84 c0e4353c c0e39580 c0e43e84 c0e3c000 00000002 c0e3df58 c0e38b88
[ 3524.861018] df80:
c0952b9c ffffffff c0e3dfac c0e3df98 c094d1b8 c00622d4 c0e3c000 c0e43e10
[ 3524.869163] dfa0:
c0e3dff4 c0e3dfb0 c0d86d30 c094d130 ffffffff ffffffff c0d866f0 00000000
[ 3524.877309] dfc0:
00000000 c0df06d8 00000000 c0ee3f14 c0e434c0 c0df06d4 c0e4c20c 4000406a
[ 3524.885454] dfe0:
410fc073 00000000 00000000 c0e3dff8 40008074 c0d86970 00000000 00000000
[ 3524.893610] [<
c037cc78>] (exynos_sysmmu_irq) from [<
c0071ef4>] (handle_irq_event_percpu+0x64/0x25c)
[ 3524.902615] [<
c0071ef4>] (handle_irq_event_percpu) from [<
c0072138>] (handle_irq_event+0x4c/0x6c)
[ 3524.911454] [<
c0072138>] (handle_irq_event) from [<
c0075130>] (handle_level_irq+0xd4/0x14c)
[ 3524.919773] [<
c0075130>] (handle_level_irq) from [<
c0071450>] (generic_handle_irq+0x3c/0x4c)
[ 3524.928180] [<
c0071450>] (generic_handle_irq) from [<
c030d240>] (combiner_handle_cascade_irq+0xa4/0x110)
[ 3524.937624] [<
c030d240>] (combiner_handle_cascade_irq) from [<
c0071450>] (generic_handle_irq+0x3c/0x4c)
[ 3524.946981] [<
c0071450>] (generic_handle_irq) from [<
c0071790>] (__handle_domain_irq+0x8c/0xfc)
[ 3524.955646] [<
c0071790>] (__handle_domain_irq) from [<
c0008730>] (gic_handle_irq+0x40/0x78)
[ 3524.963966] [<
c0008730>] (gic_handle_irq) from [<
c0014780>] (__irq_svc+0x40/0x74)
[ 3524.971412] Exception stack(0xc0e3df00 to 0xc0e3df48)
[ 3524.976441] df00:
00000001 00000000 00000000 c0020780 c0e3c000 c0e43530 00000000 00000000
[ 3524.984586] df20:
c0ec7eb4 c095bc8c 00000001 c0e3df54 c0e3df58 c0e3df48 c0010d88 c0010d8c
[ 3524.992729] df40:
600d0013 ffffffff
[ 3524.996205] [<
c0014780>] (__irq_svc) from [<
c0010d8c>] (arch_cpu_idle+0x48/0x4c)
[ 3525.003567] [<
c0010d8c>] (arch_cpu_idle) from [<
c0062690>] (cpu_startup_entry+0x3c8/0x4a4)
[ 3525.011805] [<
c0062690>] (cpu_startup_entry) from [<
c094d1b8>] (rest_init+0x94/0x98)
[ 3525.019516] [<
c094d1b8>] (rest_init) from [<
c0d86d30>] (start_kernel+0x3cc/0x3d8)
[ 3525.026963] Code:
e34c30ec e5932004 e3520000 ca000018 (
e7f001f2)
[ 3525.033028] ---[ end trace
71ed544f653b4d46 ]---
Signed-off-by: Ingi Kim <ingi2.kim@samsung.com>
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Andrzej Hajda [Thu, 10 Nov 2016 10:31:20 +0000 (08:31 -0200)]
[media] s5p-mfc: Correct scratch buffer size of H.263 decoder
Driver complains about too small scratch buffer size. After adjusting
it according to vendor code, decoding works.
[mszyprow: moved the change to the header file]
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Wed, 9 Nov 2016 14:29:38 +0000 (12:29 -0200)]
[media] exynos-gsc: Add support for Exynos5433 specific version
This patch adds support for Exynos5433 specific version of the GScaler
module. The main difference between Exynos 5433 and earlier is addition
of new clocks that have to be controlled.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Wed, 9 Nov 2016 14:29:37 +0000 (12:29 -0200)]
[media] exynos-gsc: Enable driver on ARCH_EXYNOS
This driver can be also used on Exynos5433, which is ARM64-based
platform, which selects only ARCH_EXYNOS symbol.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Wed, 9 Nov 2016 14:24:01 +0000 (12:24 -0200)]
[media] exynos-gsc: Use of_device_get_match_data() helper
Replace open-coded driver data extraction code with generic helper.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Wed, 9 Nov 2016 14:24:00 +0000 (12:24 -0200)]
[media] exynos-gsc: Add missing newline char in debug messages
Fix missing newline char in debug messages.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Wed, 9 Nov 2016 14:23:59 +0000 (12:23 -0200)]
[media] exynos-gsc: Remove unused lclk_freqency entry
Remove dead, unused code.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Marek Szyprowski [Wed, 9 Nov 2016 14:23:58 +0000 (12:23 -0200)]
[media] exynos-gsc: Simplify system PM even more
System PM callbacks only ensure that device is runtime suspended/resumed,
so remove them and use generic pm_runtime_force_suspend/resume helper.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Wed, 9 Nov 2016 14:23:57 +0000 (12:23 -0200)]
[media] exynos-gsc: Simplify system PM
It's not needed to keep a local flag about the current system PM state.
Let's just remove that code and the corresponding debug print.
[mszyprow: rebased onto v4.9-rc4]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Wed, 9 Nov 2016 14:23:55 +0000 (12:23 -0200)]
[media] exynos-gsc: Do full clock gating at runtime PM suspend
To potentially save more power in runtime PM suspend state, let's
also prepare/unprepare the clock from the runtime PM callbacks.
[mszyprow: rebased onto v4.9-rc4]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Wed, 9 Nov 2016 14:23:54 +0000 (12:23 -0200)]
[media] exynos-gsc: Fixup clock management at ->remove()
To make sure the clock is fully gated in ->remove(), we first need to
to bring the device into full power by invoking pm_runtime_get_sync().
Then, let's both unprepare and disable the clock.
[mszyprow: rebased onto v4.9-rc4]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Mon, 14 Nov 2016 10:27:32 +0000 (08:27 -0200)]
[media] exynos-gsc: Make PM callbacks available conditionally
There are no need to set up the PM callbacks (runtime and system) unless
they are being used. It also causes compiler warnings about unused
functions.
Silence the warnings by making them available for CONFIG_PM (runtime
callbacks) and CONFIG_PM_SLEEP (system sleep callbacks).
[mszyprow: squashed two patches into one to avoid potential build
break, changed patch subject and updated commit message]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Wed, 9 Nov 2016 14:23:52 +0000 (12:23 -0200)]
[media] exynos-gsc: Make driver functional when CONFIG_PM is unset
The driver depended on CONFIG_PM to be functional. Let's remove that
dependency, by enable the runtime PM resourses during ->probe() and
update the device's runtime PM status to reflect this.
[mszyprow: rebased onto v4.9-rc4]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Wed, 9 Nov 2016 14:23:51 +0000 (12:23 -0200)]
[media] exynos-gsc: Convert gsc_m2m_resume() from int to void
Since gsc_m2m_resume() always returns 0, convert it to a void instead.
[mszyprow: rebased onto v4.9-rc4]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Ulf Hansson [Wed, 9 Nov 2016 14:23:50 +0000 (12:23 -0200)]
[media] exynos-gsc: Simplify clock management
Instead of having separate functions that fetches, prepares and
unprepares the clock, let's encapsulate this code into ->probe().
This makes error handling easier and decreases the lines of code.
[mszyprow: rebased onto v4.9-rc4]
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Tested-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Shuah Khan [Mon, 7 Nov 2016 23:39:25 +0000 (21:39 -0200)]
[media] s5p-mfc: include buffer size in error message
Include buffer size in s5p_mfc_alloc_priv_buf() the error message
when it fails to allocate the buffer.
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 7 Oct 2016 20:39:19 +0000 (17:39 -0300)]
[media] exynos-gsc: cleanup m2m src and dst vb2 queues on STREAMOFF
Media drivers that use the videobuf2 framework have to give back to vb2
all the buffers that received from vb2 using its .buf_queue callback.
But the exynos-gsc driver isn't doing a proper cleanup so vb2 complains
that the number of buffers enqueued and received are not balanced:
WARNING: CPU: 2 PID: 660 at drivers/media/v4l2-core/videobuf2-core.c:1654 __vb2_queue_cancel+0xec/0x150 [videobuf2_core]
Modules linked in: mwifiex_sdio mwifiex uvcvideo exynos_gsc videobuf2_vmalloc s5p_mfc s5p_jpeg
CPU: 2 PID: 660 Comm: lt-gst-validate Not tainted 4.8.0
Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[<
c010e24c>] (unwind_backtrace) from [<
c010af30>] (show_stack+0x10/0x14)
[<
c010af30>] (show_stack) from [<
c03291a4>] (dump_stack+0x88/0x9c)
[<
c03291a4>] (dump_stack) from [<
c011a858>] (__warn+0xe8/0x100)
[<
c011a858>] (__warn) from [<
c011a920>] (warn_slowpath_null+0x20/0x28)
[<
c011a920>] (warn_slowpath_null) from [<
bf0b6ed0>] (__vb2_queue_cancel+0xec/0x150 [videobuf2_core])
[<
bf0b6ed0>] (__vb2_queue_cancel [videobuf2_core]) from [<
bf0b7464>] (vb2_core_streamoff+0x34/0x9c [videobuf2_core])
[<
bf0b7464>] (vb2_core_streamoff [videobuf2_core]) from [<
bf11b9e8>] (v4l2_m2m_streamoff+0x2c/0xe4 [v4l2_mem2mem])
[<
bf11b9e8>] (v4l2_m2m_streamoff [v4l2_mem2mem]) from [<
bf01b84c>] (__video_do_ioctl+0x298/0x30c [videodev])
[<
bf01b84c>] (__video_do_ioctl [videodev]) from [<
bf01b234>] (video_usercopy+0x174/0x4e8 [videodev])
[<
bf01b234>] (video_usercopy [videodev]) from [<
bf0165c8>] (v4l2_ioctl+0xc4/0xd8 [videodev])
[<
bf0165c8>] (v4l2_ioctl [videodev]) from [<
c01f291c>] (do_vfs_ioctl+0x9c/0x8f4)
[<
c01f291c>] (do_vfs_ioctl) from [<
c01f31a8>] (SyS_ioctl+0x34/0x5c)
[<
c01f31a8>] (SyS_ioctl) from [<
c01078c0>] (ret_fast_syscall+0x0/0x3c)
Fix this by passing back to vb2 all the received buffers that were not
processed.
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 7 Oct 2016 20:39:18 +0000 (17:39 -0300)]
[media] exynos-gsc: unregister video device node on driver removal
The driver doesn't unregister the video device node when the driver is
removed, this keeps video device nodes that makes the machine to crash
with a NULL pointer dereference when nodes are attempted to be opened:
[ 36.530006] Unable to handle kernel paging request at virtual address
bf1f8200
[ 36.535985] pgd =
edbbc000
[ 36.538486] [
bf1f8200] *pgd=
6d99a811, *pte=
00000000, *ppte=
00000000
[ 36.544727] Internal error: Oops: 7 [#1] PREEMPT SMP ARM
[ 36.550016] Modules linked in: s5p_jpeg s5p_mfc v4l2_mem2mem videobuf2_dma_contig
[ 36.566303] CPU: 6 PID: 533 Comm: v4l2-ctl Not tainted 4.8.0
[ 36.574466] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[ 36.580526] task:
ee3cc600 task.stack:
ed626000
[ 36.585046] PC is at try_module_get+0x1c/0xac
[ 36.589364] LR is at try_module_get+0x1c/0xac
[ 36.593698] pc : [<
c0187a60>] lr : [<
c0187a60>] psr:
80070013
[ 36.593698] sp :
ed627de0 ip :
a0070013 fp :
00000000
[ 36.605156] r10:
00000002 r9 :
ed627ed0 r8 :
00000000
[ 36.610331] r7 :
c01e5f14 r6 :
ed57be00 r5 :
bf1f8200 r4 :
bf1f8200
[ 36.616834] r3 :
00000002 r2 :
00000002 r1 :
01930192 r0 :
00000001
..
[ 36.785004] [<
c0187a60>] (try_module_get) from [<
c01e5c10>] (cdev_get+0x1c/0x4c)
[ 36.792362] [<
c01e5c10>] (cdev_get) from [<
c01e5f40>] (chrdev_open+0x2c/0x178)
[ 36.799555] [<
c01e5f40>] (chrdev_open) from [<
c01df5d4>] (do_dentry_open+0x1e0/0x300)
[ 36.807360] [<
c01df5d4>] (do_dentry_open) from [<
c01eecdc>] (path_openat+0x35c/0xf58)
[ 36.815154] [<
c01eecdc>] (path_openat) from [<
c01f0668>] (do_filp_open+0x5c/0xc0)
[ 36.822606] [<
c01f0668>] (do_filp_open) from [<
c01e09ac>] (do_sys_open+0x10c/0x1bc)
[ 36.830235] [<
c01e09ac>] (do_sys_open) from [<
c01078c0>] (ret_fast_syscall+0x0/0x3c)
[ 36.837942] Code:
0a00001c e1a04000 e3a00001 ebfec92d (
e5943000)
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 7 Oct 2016 20:39:17 +0000 (17:39 -0300)]
[media] exynos-gsc: don't release a non-dynamically allocated video_device
The struct v4l2_device instance for the G-Scaler is not dyanmically
allocated but a member of the struct gsc_dev. In fact, the assigned
.release callback is video_device_release_empty().
But gsc_register_m2m_device() attempts to release the v4l2_device by
calling video_device_release() in its error path. This is wrong since
the v4l2_device wasn't allocated directly and will be freed once its
parent struct gsc_dev is freed.
While being there, rename the remaining goto label in the error path
to something that better explains the error path cleanup.
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 30 Sep 2016 21:16:44 +0000 (18:16 -0300)]
[media] exynos-gsc: do proper bytesperline and sizeimage calculation
The driver don't take into account the differences between packed, semi
planar and multi planar formats when calculating the pixel format bytes
per lines and image size values. This makes GStreamer to fail when the
following formats are used NV12, NV21, NV16, NV61, YV12, I420 and Y42B:
"gst_video_frame_map_id: failed to map video frame plane 1"
Nicolas suggested to use the logic found in the Exynos FIMC v4l2 driver
since does this correctly. So this patch changes the bytes per line and
image size calculation according to what's done in this media driver.
After this patch most supported formats work correctly. There are still
issues with the NV21 and NV61 formats, but that seems to be a separate
problem since NV12 and NV16 work and these formats use the same values.
So this can be fixed as a follow-up and shouldn't be a blocker for this
change that improves the driver's support.
Suggested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 30 Sep 2016 21:16:43 +0000 (18:16 -0300)]
[media] exynos-gsc: fix supported RGB pixel format
The driver exposes 32-bit A/XRGB 8-8-8-8 as supported format but testing
shows that using this format produces frames with wrong colors. The test
was done with the following GStreamer pipeline:
$ gst-launch-1.0 videotestsrc num-buffers=20 ! video/x-raw,format=UYVY \
! v4l2video3convert ! video/x-raw,format=xRGB ! videoconvert ! kmssink
The manual seems to state that the Pixel Format are in Little Endianness
so instead use the 32-bit BGRA/X 8-8-8-8 pixel format. This format works
correctly when using the following pipeline:
$ gst-launch-1.0 videotestsrc num-buffers=20 ! video/x-raw,format=UYVY \
! v4l2video3convert ! video/x-raw,format=BGRx ! kmssink
This change is similar to commit
7f2816e51ea1 ("[media] s5p-fimc: Changed
RGB32 to BGR32") that fixed the same issue on a different Samsung driver.
Suggested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 30 Sep 2016 21:16:42 +0000 (18:16 -0300)]
[media] exynos-gsc: don't clear format when freeing buffers with REQBUFS(0)
User-space applications can use the VIDIOC_REQBUFS ioctl to determine if a
memory mapped, user pointer or DMABUF based I/O is supported by a driver.
For example, GStreamer attempts to determine the I/O methods supported by
the driver by doing many VIDIOC_REQBUFS ioctl calls with different memory
types and count 0. And then the real VIDIOC_REQBUFS call with count == n
is be made to allocate the buffers. But for count 0, the driver not only
frees the buffers but also clears the format set before with VIDIOC_S_FMT.
This is a problem since STREAMON fails if a format isn't set but GStreamer
first sets a format and then tries to determine the supported I/O methods,
so the format will be cleared on REQBUFS(0), before the call to STREAMON.
To avoid this issue, only free the buffers on VIDIOC_REQBUFS(0) but don't
clear the format. Since is completely valid to set the format and then do
different calls to REQBUFS before a call to STREAMON.
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Javier Martinez Canillas [Fri, 30 Sep 2016 21:16:41 +0000 (18:16 -0300)]
[media] exynos-gsc: change spamming try_fmt log message to debug
The driver try_fmt handler prints a message each time that the image
size has been changed due the maximum and minimum width and height.
Since user-space can try different format and sizes, this logs a lot
of unnecessary messages. Change the message log level to debug and
while being there, also add a new line to the message.
Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Shuah Khan [Tue, 18 Oct 2016 23:28:22 +0000 (21:28 -0200)]
[media] s5p-mfc: Collapse two error message into one
s5p_mfc_alloc_priv_buf() prints two message to report invalid memory
configuration error. Collapse them into a single message.
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Nicolas Dufresne [Wed, 26 Mar 2014 22:48:39 +0000 (19:48 -0300)]
[media] exynos4-is: fimc: Roundup imagesize to row size for tiled formats
For tiled format, we need to allocated a multiple of the row size. A
good example is for 1280x720, wich get adjusted to 1280x736. In tiles,
this mean Y plane is 20x23 and UV plane 20x12. Because of the rounding,
the previous code would only have enough space to fit half of the last
row.
[mchehab@s-opensource.com: fix coding style]
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Kieran Bingham [Thu, 30 Jun 2016 13:41:23 +0000 (10:41 -0300)]
[media] v4l: Add Renesas R-Car FDP1 Driver
The FDP1 driver performs advanced de-interlacing on a memory 2 memory
based video stream, and supports conversion from YCbCr/YUV
to RGB pixel formats
Signed-off-by: Kieran Bingham <kieran+renesas@bingham.xyz>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Kieran Bingham [Thu, 30 Jun 2016 16:50:30 +0000 (13:50 -0300)]
[media] dt-bindings: Add Renesas R-Car FDP1 bindings
The FDP1 is a de-interlacing module which converts interlaced video to
progressive video. It is also capable of performing pixel format conversion
between YCbCr/YUV formats and RGB formats.
Signed-off-by: Kieran Bingham <kieran+renesas@bingham.xyz>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Laurent Pinchart [Thu, 4 Aug 2016 16:14:02 +0000 (13:14 -0300)]
[media] v4l: ctrls: Add deinterlacing mode control
The menu control selects the operation mode of a video deinterlacer. The
menu entries are driver specific.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran@bingham.xyz>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Peter Ujfalusi [Fri, 4 Nov 2016 07:58:02 +0000 (05:58 -0200)]
[media] v4l: omap3isp: Use dma_request_chan_by_mask() to request the DMA channel
When requesting the DMA channel it was mandatory that we do not have DMA
resource nor valid DMA channel via DT. In this case the
dma_request_slave_channel_compat() would fall back and request any channel
with SW trigger.
The same can be achieved with the dma_request_chan_by_mask() without the
misleading use of the DMAengine API - implying that the omap3isp does
need to have DMA resource or valid dma binding in DT.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Laurent Pinchart [Thu, 29 Sep 2016 08:41:24 +0000 (05:41 -0300)]
[media] v4l: omap3isp: Fix OF node double put when parsing OF graph
When parsing the graph the driver loops over all endpoints using
of_graph_get_next_endpoint(). The function handles reference counting of
the passed and returned nodes, so the returned node's reference count
must not be decreased manually in the normal path.
Move the offending of_node_put() call to the error path that requires
manual reference count handling.
Reported-by: H. Nikolaus Schaller <hns@goldelico.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Philipp Zabel [Mon, 7 Nov 2016 20:15:47 +0000 (18:15 -0200)]
[media] uvcvideo: add support for Oculus Rift Sensor
The Rift CV1 Sensor has bInterfaceClass set to vendor specific, so we
need an entry in uvc_ids to probe it. Just as the Rift DK2 IR tracker,
it misreports the pixel format as YUYV instead of Y8.
The sensor is configured with a low exposure time and high black level
by default, so that only bright IR sources can be seen.
Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>