AgeCommit message (Collapse)Author
2019-07-01dts: puma: Re-enable Muellner
This patch re-enables AVB in the DTS. Signed-off-by: Christoph Muellner <>
2019-06-28dts: puma-android: HDMI/vbmeta fixes.Christoph Muellner
* Switch to HDMI to VOPB * Re-enable vbmeta. Signed-off-by: Christoph Muellner <>
2019-06-26dts: puma-android: Cleanup DTS information.Christoph Muellner
This patch removes redundant information in the rk3399-puma-android.dts. Signed-off-by: Christoph Muellner <>
2019-06-25Disable AVB verification.Christoph Muellner
This patch disables the AVB verification by removing the vbmeta node in the firmware_android section in the DTS. This changes has been suggested by Rockchip to temporary circumvent verification errors. Signed-off-by: Christoph Muellner <>
2019-06-24Adding Puma DTS and config for Android.Christoph Muellner
This commit provides DTS and defconfig for Rockchip's Android 9 SDK. Signed-off-by: Christoph Muellner <>
2019-04-30ucan: Add old driver to support legacy (pre v3.0) devices.Christoph Muellner
A previous commit updated the ucan driver to the one from mainline Linux. Unfortunately the updated driver does not support the old v2.0 devices, which breaks environments where such devices are deployed and cannot be updated. Therefore this patch adds the old driver back as ucan_legacy. Besides the USB PID/VID combination it will match for device versions from 0x0000 to 0x02ff (the new ucan driver will test for 0x0300+). Signed-off-by: Christoph Muellner <>
2019-04-30ucan: Add version matching to enumerate only v3.0+ devices.Christoph Muellner
This patch extends the USB device ID table of the ucan driver to match for the device version as well. Only devices with a firmware version of 3.0 or higher will match. Signed-off-by: Christoph Muellner <>
2019-04-30can: dev: __can_get_echo_skb(): fix bogous check for non-existing skb by ↵Manfred Schlaegl
removing it This patch revert commit 7da11ba5c506 ("can: dev: __can_get_echo_skb(): print error message, if trying to echo non existing skb") After introduction of this change we encountered following new error message on various i.MX plattforms (flexcan): | flexcan 53fc8000.can can0: __can_get_echo_skb: BUG! Trying to echo non | existing skb: can_priv::echo_skb[0] The introduction of the message was a mistake because priv->echo_skb[idx] = NULL is a perfectly valid in following case: If CAN_RAW_LOOPBACK is disabled (setsockopt) in applications, the pkt_type of the tx skb's given to can_put_echo_skb is set to PACKET_LOOPBACK. In this case can_put_echo_skb will not set priv->echo_skb[idx]. It is therefore kept NULL. As additional argument for revert: The order of check and usage of idx was changed. idx is used to access an array element before checking it's boundaries. Signed-off-by: Manfred Schlaegl <> Fixes: 7da11ba5c506 ("can: dev: __can_get_echo_skb(): print error message, if trying to echo non existing skb") Cc: linux-stable <> Signed-off-by: Marc Kleine-Budde <>
2019-04-30ucan: Backporting UCAN driver from Linux 5.1-rc1.Christoph Muellner
This patch updates the UCAN driver to the improved version, which has been mainlined. Besides addressing stabilization issues this driver update also adds support for more recent firmware versions of Seal and Mule. Signed-off-by: Christoph Muellner <>
2019-04-30can: ucan: add driver for Theobroma Systems UCAN devicesJakob Unterwurzacher
The UCAN driver supports the microcontroller-based USB/CAN adapters from Theobroma Systems. There are two form-factors that run essentially the same firmware: * Seal: standalone USB stick ( ) * Mule: integrated on the PCB of various System-on-Modules from Theobroma Systems like the A31-µQ7 and the RK3399-Q7 ( ) The USB wire protocol has been designed to be as generic and hardware-indendent as possible in the hope of being useful for implementation on other microcontrollers. Signed-off-by: Martin Elshuber <> Signed-off-by: Jakob Unterwurzacher <> Signed-off-by: Philipp Tomsich <>
2019-04-30rk: clk: Allow clk_i2s0_frac to violate precision restriction.Christoph Muellner
The fraction approximation code for rockchip frac dividers impose the following requirement (as noted in a driver comment): fractional divider must set that denominator is 20 times larger than numerator to generate precise clock frequency. Additionally the frac driver limits the maximum input frequency to 600 MHz. This limitation can be achieved by using the integer divider (limiting to e.g. 400 MHz). Note, that both restrictions are not stated in the RK3399 TRM. The implication of these restrictions are, that the range of possible output frequencies is reduced quite drastically. This results in the problem, that clk_i2s0_frac cannot generate a clock of 24.56 MHz and thus audio on RK3399-Q7 is broken. Therefore this patch whitelists clk_i2s0_frac from the first restriction, similar to the exception for UART (in the same function). Signed-off-by: Christoph Muellner <>
2019-04-30mtd: spi-nor: add GigaDevice gd25lq32Jakob Unterwurzacher
This is the 1.8V version of the gd25q32.
2019-04-30arm64: dts: rockchip: Decrease emmc-phy's drive impedance on rk3399-pumaChristoph Muellner
The RK3399-Q7 (Puma) requires 33 Ohm drive strength to ensure signal integrity at HS-400 (200MHz clock, DDR signalling). A repeated EMC testing run validates that this increase does not negatively impact EMC compliance (emissions have ample distance to the regulatory limits). Signed-off-by: Christoph Muellner <> Signed-off-by: Philipp Tomsich <> Tested-by: Jakob Unterwurzacher <> Tested-by: Klaus Goger <>
2019-04-30dt-bindings: phy: Add a new property drive-impedance-ohm for RK's emmc PHYChristoph Muellner
This patch documents the new proprty drive-impedance-ohm for Rockchip's eMMC PHY node. Signed-off-by: Christoph Muellner <> Signed-off-by: Philipp Tomsich <>
2019-04-30phy: rockchip-emmc: Allow to set drive impedance via DTS.Christoph Muellner
The rockchip-emmc PHY can be configured with different drive impedance values. Currenlty a value of 50 Ohm is hard coded into the driver. This patch introduces the DTS property 'drive-impedance-ohm' for the rockchip-emmc phy node, which uses the value from the DTS to setup the drive impedance accordingly. Signed-off-by: Christoph Muellner <> Signed-off-by: Philipp Tomsich <> Reviewed-by: Heiko Stuebner <>
2019-04-30arm64: DTS: rk3399-puma.dts: Update DMC OPs.Christoph Muellner
Extending the operating point list of the DMC to include frequencies of up to 800 MHz. This increases bandwidth and fixes issues observed with RKISP1 (PIC_SIZE_ERRORs when performing memory intensive tasks in parallel). Signed-off-by: Christoph Muellner <>
2019-04-30arm64: DTS: rk3399-puma.dts: Rename efuse_id to cpu_id.Christoph Muellner
This patch is required because the name of the "efuse_id" node has been changed to "cpu_id" in the rk3399.dtsi by the following commit: commit 1eefebf4c678d63d1051a38f6ffd06eb1bd66fe0 Author: Jianqun Xu <> Date: Tue Jul 24 15:56:18 2018 +0800 Signed-off-by: Christoph Muellner <>
2019-04-30gpu: mali: Fix signature of kbase_get_[static|dynamic]_power functions.Christoph Muellner
This addresses a type warning, which elevates to a broken build because of -Werror: CC drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.o drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c:582:22: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] error, forbidden warning:mali_kbase_ipa.c:582 .get_static_power = &kbase_get_static_power, ^ drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c:582:22: note: (near initialization for ‘kbase_ipa_power_model_ops.get_static_power’) drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c:583:23: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] error, forbidden warning:mali_kbase_ipa.c:583 .get_dynamic_power = &kbase_get_dynamic_power, ^ drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.c:583:23: note: (near initialization for ‘kbase_ipa_power_model_ops.get_dynamic_power’) scripts/ recipe for target 'drivers/gpu/arm/midgard/ipa/mali_kbase_ipa.o' failed Signed-off-by: Christoph Muellner <>
2019-04-30devfreq: rockchip: Fix unprotected call to smp_processor_id().Christoph Muellner
Signed-off-by: Christoph Muellner <>
2019-04-30rk3399-puma.dts: reduce sd card max-frequency to 40MHz.Jakob Unterwurzacher
CRC errors (code -84 EILSEQ) have been observed for some SanDisk Ultra A1 cards when running at 50MHz. Waveform analysis suggest that the level shifters that are used on the RK3399-Q7 module for voltage translation between 3.0 and 3.3V don't handle clock rates at or above 48MHz properly. Back off to 40MHz for some safety margin. Signed-off-by: Jakob Unterwurzacher <>
2019-04-30rk3399_defconfig: enable ISP1 and TC35874X for peafowl hdmi captureJakob Unterwurzacher
2019-04-30[hack for tc358749] media: rockchip/isp1: set default input format to ↵Jakob Unterwurzacher
1920x1080 UYVY8 This is the default output format of the tc358749 HDMI-to-CSI converter. Setting the default correctly makes playback via qv4l2 "just work". Signed-off-by: Jakob Unterwurzacher <> Signed-off-by: Philipp Tomsich <>
2019-04-30arm64: rockchip: add rk3399-puma-peafowl.dtsJakob Unterwurzacher
Theobroma Systems RK3399-Q7 "Puma" with HDMI to CSI adapter "Peafowl". Uses the Toshiba TC358749 chip. Signed-off-by: Jakob Unterwurzacher <> Signed-off-by: Philipp Tomsich <>
2019-04-30arm64: rockchip: rk3399-puma: enable memory frequency scalingJakob Unterwurzacher
DDR memory frequency scaling is called DMC (dynamic memory controller) in the RK3399 SoC. Enable it in the DTS and in the defconfig. To improve the reaction time of the rockchip_dmc governor, CONFIG_HZ_PERIODIC is enabled, at the cost of a 3% idle power increase. I see worst case reaction times of tens of seconds without it, because devfreq_dmc_ondemand_func does not get to run. The upthreshold and downdifferential values in the DTS are more aggressive than what rockchip uses. This improves U-Boot make -j6 compile time by 8%. Signed-off-by: Jakob Unterwurzacher <>
2019-04-30arm64: rockchip: add rk3399-puma-spidev.dtsKlaus Goger
This devicetree adds spidev nodes to the spi5 bus as enhancement to the rk3399-puma.dts. Signed-off-by: Klaus Goger <>
2019-04-30spi: rockchip: configure gpios from cs-gpiosKlaus Goger
SPI core provides the functionality to have GPIO based chip selects but assumes that the pins are already configured by the platform. Configure GPIO style pins in rockchip_spi_setup so they can be used later on. Signed-off-by: Klaus Goger <>
2019-04-30spi: Add Flag to Enable Slave Select with GPIO Chip Select.Thor Thayer
Some SPI masters require slave selection before the transfer can begin [1]. The SPI framework currently selects the chip using either 1) the internal CS mechanism or 2) the GPIO CS, but not both. This patch adds a new master->flags define to indicate both the GPIO CS and the internal chip select mechanism should be used. Tested On: Altera CycloneV development kit Compile tested for build errors on x86_64 (allyesconfigs) [1] DesignWare dw_apb_ssi Databook, Version 3.20a (page 39) Signed-off-by: Thor Thayer <> Signed-off-by: Mark Brown <>
2019-04-30spi: rockchip: Set GPIO_SS flag to enable Slave Select with GPIO CSJeffy Chen
The rockchip spi still requires slave selection when using GPIO CS. Signed-off-by: Jeffy Chen <> Reviewed-by: Douglas Anderson <> Signed-off-by: Mark Brown <>
2019-04-30arm64: dts: rockchip: set powerdomain for spi5 on rk3399Klaus Goger
Access to the spi5 peripheral when powered down halts the system rendering it unresponsive. Define the powerdomain in the rk3399.dtsi to prevent a shutdown when the peripheral is used. Signed-off-by: Klaus Goger <>
2019-04-30Reduce SD IO Voltage to 3.0VKlaus Goger
The SD-Card IO rail on the RK3399 should not be operated higher than 3.15V. We reduce it to 3.0V. Note that the I/Os on the Qseven edge connector will still be 3.3V as expected. Signed-off-by: Klaus Goger <>
2019-04-30rtc: isl1208: set uie_unsupportedJakob Unterwurzacher
The isl1208 emulation on puma / rk3399-q7 does not support interrupts at all, but has no way to announce that fact to the kernel. This causes problems in user-space: # hwclock -r -D [...] select() to /dev/rtc to wait for clock tick timed out...synchronization failed Set the uie_unsupported flag unconditionally in the driver until we get a way to configure it through a device tree property. Fixes the problems with hwclock. Signed-off-by: Jakob Unterwurzacher <>
2019-04-30brcmfmac: sleep workaround for AP6255 "Gopher" Wifi moduleJakob Unterwurzacher
Disable sleep for now as the Gopher module does not seem to wake up again. Signed-off-by: Jakob Unterwurzacher <>
2019-04-30drm/rockchip: increase vop selection message priorityJakob Unterwurzacher
As the VOPs have different capabilities, which vop was selected is usually interesting to the user. Signed-off-by: Jakob Unterwurzacher <>
2019-04-30drm/rockchip: dw-hdmi: downgrade "failed to set" message to infoJakob Unterwurzacher
hdmi works fine, and looking at what properties are actually failing (see below) indicates that they are not essential. Downgrade the message level from "error" to "info". [ 10.545924] [drm:dw_hdmi_rockchip_set_property] failed to set rockchip hdmi connector property hdmi_color_depth_capacity [ 10.557993] [drm:dw_hdmi_rockchip_set_property] failed to set rockchip hdmi connector property hdmi_output_mode_capacity [ 10.570473] [drm:dw_hdmi_rockchip_set_property] failed to set rockchip hdmi connector property brightness [ 10.581221] [drm:dw_hdmi_rockchip_set_property] failed to set rockchip hdmi connector property contrast [ 10.591810] [drm:dw_hdmi_rockchip_set_property] failed to set rockchip hdmi connector property saturation [ 10.602415] [drm:dw_hdmi_rockchip_set_property] failed to set rockchip hdmi connector property hue [ 10.708193] rockchip-dp ff970000.edp: Link Training Clock Recovery success [ 10.717607] rockchip-dp ff970000.edp: Link Training success!
2019-04-30brcmfmac: add support for BCM43455 with modalias sdio:c00v02D0dA9BFJakob Unterwurzacher
BCM43455 is a more recent revision of the BCM4345. Some of the BCM43455 got a dedicated SDIO device ID which is currently not supported by brcmfmac. Adding the new sdio_device_id to brcmfmac is enough to get the BCM43455 supported because the chip itself is already supported (due to BCM4345 support in the driver). Signed-off-by: Martin Blumenstingl <> Acked-by: Arend van Spriel <> Reviewed-by: Andreas Färber <> Tested-by: Andreas Färber <> Signed-off-by: Kalle Valo <> Upstream commit a62a77881b1b6708ffeddd9bf0529494f7b199e3
2019-04-30ASoC: sgtl5000: Use normal VAG ramp to reduce pop noiseKlaus Goger
The slow downed ramp causes a higher voltage level at the turn off time generating an audible pop noise. Signed-off-by: Klaus Goger <>
2019-04-30Input: add driver for Silead touchscreensRobert Dolca
This driver adds support for Silead touchscreens. It has been tested with GSL1680 and GSL3680 touch panels. It supports ACPI and device tree enumeration. Screen resolution, the maximum number of fingers supported and firmware name are configurable. Signed-off-by: Robert Dolca <> Signed-off-by: Daniel Jansen <> Signed-off-by: Hans de Goede <> Signed-off-by: Dmitry Torokhov <> Input: silead - remove some dead code buf[0] is an unsigned char. touch_nr is an int. The test for negative here doesn't make sense so I have removed it. Signed-off-by: Dan Carpenter <> Signed-off-by: Dmitry Torokhov <> Input: silead - use devm_gpiod_get The silead code is using devm_foo for everything (and does not free any resources). Except that it is using gpiod_get instead of devm_gpiod_get (but is not freeing the gpio_desc), change this to use devm_gpiod_get so that the gpio will be properly released. Signed-off-by: Hans de Goede <> Signed-off-by: Dmitry Torokhov <> Input: silead_gsl1680 - document firmware-name, fix implementation The driver has supported touchscreen-fw-name to specify the firmware to load since it has been merged, but this was omitted from the dt-binding documentation. During review of adding touchscreen-fw-name to the binding documentation it was brought up that there is a standard property name called "firmware-name" for this, which should be used. Since there are no users of touchscreen-fw-name yet, this commit adds documentation of "firmware-name" to the dt-binding documentation and switches the driver over to use this. This commit also makes the driver add a "silead/" prefix to the firmware name from dt before calling request_firmware. That the firmware files are stored under /lib/firmware/silead under Linux is an implementation detail and does not belong in devicetree. Signed-off-by: Hans de Goede <> Acked-by: Rob Herring <> Signed-off-by: Dmitry Torokhov <> Input: silead_gsl1680 - use "silead/" prefix for firmware loading The silead touch-controller ICs use a different firmware per digitizer / tablet model. So there are going to be quite a few of then and they really should be under a separate subdir. This commit prefixes the default firmware names with "silead/" just like we are already doing for devicetree specified firmware names. Signed-off-by: Hans de Goede <> Signed-off-by: Dmitry Torokhov <> Input: silead - add OF device ID table The driver doesn't have a struct of_device_id table but supported devices are registered via Device Trees. This is working on the assumption that a I2C device registered via OF will always match a legacy I2C device ID and that the MODALIAS reported will always be of the form i2c:<device>. But this could change in the future so the correct approach is to have an OF device ID table if the devices are registered via OF. As pointed by Hans de Goede, there's no mssl1680 and this is just used in some ACPI systems to identify the gsl1680 chip. So isn't included in the OF device ID table since a DT should use the proper device name instead. Signed-off-by: Javier Martinez Canillas <> Signed-off-by: Dmitry Torokhov <> Input: back-port silead.c: pos[i] handling/assignment Signed-off-by: Philipp Tomsich <> Input: back-port silead.c: invert_x/y & swap_xy Signed-off-by: Philipp Tomsich <> Input: silead: retry firmware load If we get ENOENT when trying to load the firmware, this can just mean that the rootfs is not mounted yet. Return EPROBE_DEFER so the probe is retried later. To prevent an infinite probe loop when the firmware does not exist at all, the retries are capped to 10. Signed-off-by: Jakob Unterwurzacher <>
2019-04-30Remove .scmversion fileKlaus Goger
The empty .scmvesion file breaks the setlocalversion script. As we want to use CONFIG_LOCALVERSION_AUTO we delete the file. Signed-off-by: Klaus Goger <>
2019-04-30arm64: rockchip: add dts + defconfig for RK3399-Q7 (Puma) SoMJakob Unterwurzacher
The RK3399-Q7 (Puma) is a system-on-module featuring the Rockchip RK3399 in a Qseven-compatible form-factor. RK3399-Q7 features: * CPU: ARMv8 64bit Big-Little architecture, * Big: dual-core Cortex-A72 * Little: quad-core Cortex-A53 * IRAM: 200KB * DRAM: 4GB-128MB dual-channel * eMMC: onboard eMMC * SD/MMC * GbE (onboard Micrel KSZ9031) Gigabit ethernet PHY * USB: * USB3.0 dual role port * 2x USB3.0 host, 1x USB2.0 host via onboard USB3.0 hub * Display: HDMI/eDP/MIPI * Camera: 2x CSI (one on the edge connector, one on the Q7 specified CSI ZIF) * NOR Flash: onboard SPI NOR * Companion Controller: onboard additional Cortex-M0 microcontroller * RTC * fan controller * CAN This dts describes includes all required peripherals for booting and basic functionality including eMMC, NOR, USB, Ethernet, HDMI output (with audio), I2C buses (including the RTC and fan controller features provided by the default companion controller firmware) and LED definitions. Signed-off-by: Klaus Goger <> Signed-off-by: Jakob Unterwurzacher <>
2019-04-12Mali: midgard: fix Spectre v1 vulnerabilityZhen Chen
user_atom.atom_number can be indirectly controlled by user-space, hence leading to a potential exploitation of the Spectre variant 1 vulnerability. This issue was detected with the help of Smatch: drivers/gpu/arm/midgard/mali_kbase_jd.c:1397 kbase_jd_submit() warn: potential spectre issue 'jctx->atoms' [r] katom = &jctx->atoms[user_atom.atom_number]; Fix this by sanitizing user_atom.atom_number before 'katom = &jctx->atoms[user_atom.atom_number];'. Notice that given that speculation windows are large, the policy is to kill the speculation on the first load and not worry if it can be completed with a dependent load/store [1]. [1] Fixes: 5cf27d0b6090 ("Mali: midgard: changes to enlarge BASE_JD_ATOM_COUNT to 512, for defect 184210") Change-Id: If52f30d29a80a06c6693ddadd5947ab9fe8fbc25 Signed-off-by: Zhen Chen <>
2019-04-12Mali: midgard: changes to enlarge BASE_JD_ATOM_COUNT to 512, for defect 184210Zhen Chen
The source code of mali_so must be modified correspondingly. Change-Id: I3f4bd03fa2d369d912e6bc05c53d2d3abefb92d3 Signed-off-by: Zhen Chen <>
2019-03-20media: i2c: ov8858 fix otp null pointer crashWang Panzhenzhuan
Change-Id: Ic80e74fa3198a6f877b69d38a225a187dc53769e Signed-off-by: Wang Panzhenzhuan <>
2019-03-20phy: rockchip-inno-combphy: change pre-emphasis valueShawn Lin
New Inno combphy improve its pre-emphasis settings, so we need to use new recommended value instead. Change-Id: I5b4b2e8819c4b44d908156bb8ad99bd8c62c8bdf Signed-off-by: Shawn Lin <>
2019-03-20drivers: rkflash: use physical continuous memory for flash stress testJon Lin
otherwise cache flush will cause test fail Change-Id: I6d4a4be405998bfe68eac0004b5fee407ed62a70 Signed-off-by: Jon Lin <>
2019-03-20media: rk-isp10: update to v0.2.3Hu Kejun
Change-Id: I815d41ce0f0d7e35d7b8bd133a3f203e24e69943 Signed-off-by: Hu Kejun <>
2019-03-20media: rk-isp10: add control exposure of long and short frame for hdrHu Kejun
modify head file to match the change of camera engine Change-Id: Ia139e733f766cf9cbb02e80ceda81a1817b3acbf Signed-off-by: Hu Kejun <>
2019-03-20arm64: dts: rockchip: rk1808: Correct the drive strength for rgmii/rmiiDavid Wu
According to the hardware test, change the tx pin drive strength to 4ma, and mdc/mdio 2ma. Change-Id: Ia5ab1728c9e9ecbfa7207217649588f600070ae4 Signed-off-by: David Wu <>
2019-03-20power: rk817-battery: fix compile error whitout CONFIG_SUSPENDZiyuan Xu
drivers/power/rk817_battery.c:3254:12: warning: 'rk817_bat_pm_resume' defined but not used [-Wunused-function] error, forbidden warning:rk817_battery.c:3254 static int rk817_bat_pm_resume(struct device *dev) ^~~~~~~~~~~~~~~~~~~ drivers/power/rk817_battery.c:3037:13: warning: 'rk817_bat_pm_suspend' defined but not used [-Wunused-function] error, forbidden warning:rk817_battery.c:3037 static int rk817_bat_pm_suspend(struct device *dev) Change-Id: I8cb39c95688e16027257c09a20eaeb100bd1024b Signed-off-by: Ziyuan Xu <>
2019-03-20arm64: dts: rockchip: rk1808-evb-x4: assigned-clock-parents for clk_32k_ioeLin Huang
we replace cru assigned clock node in rk1808-evb-x4 dts, and now clk_32k_ioe is setted in this node, so we need to add this back in rk1808-evb-x4.dts, otherwise the SOC can not boot normally. Change-Id: I06a55bea97e0ef260f2549349b3211a311a913ae Signed-off-by: Lin Huang <>
2019-03-20UPSTREAM: usb: dwc3: debug: fix ep name on trace outputFelipe Balbi
There was a typo when generating endpoint name which would be very confusing when debugging. Fix it. Change-Id: If29433f427499674b7604b399cbc3ac6e6bf7b1f Signed-off-by: Felipe Balbi <> Signed-off-by: William Wu <> (cherry picked from commit 696fe69d7e631f00f23b0ef1694d9b90058dca54)