* [PATCH v4 0/2] media: i2c: Add Samsung S5KJN5 image sensor
@ 2026-09-14 11:10 Wenmeng Liu
2026-09-14 11:10 ` [PATCH v4 1/2] dt-bindings: " Wenmeng Liu
2026-09-14 11:10 ` [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver Wenmeng Liu
0 siblings, 2 replies; 6+ messages in thread
From: Wenmeng Liu @ 2026-09-14 11:10 UTC (permalink / raw)
To: Wenmeng Liu, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Sakari Ailus
Cc: linux-media, devicetree, linux-kernel, vladimir.zapolskiy,
Krzysztof Kozlowski
This series adds support for the Samsung S5KJN5, a 50 MP 10-bit RAW MIPI
CSI-2 image sensor.
This is implemented as a separate driver rather than extending the existing
s5kjn1 driver. Although both sensors belong to the same family, they are
different parts with different register maps and power supplies.
Combining support for both devices in a single driver would result in very
little shared code while introducing separate initialization and control
paths, so keeping them as independent drivers is cleaner.
Power Supplies:
| Power Rail | S5KJN5 | S5KJN1 |
|------------|--------|--------|
| VDDD | 1.0 V | 1.0 V |
| VDDA | 2.2 V | 2.8 V |
| VDDIO | 1.8 V | 1.8 V |
| VDDIO1p2 | 1.2 V | - |
| VDDM | 1.0 V | - |
Tested on the Qualcomm Hawi qrd board.
---
Changes in v4:
- Removed AGAIN/DGAIN _DEFAULT and _STEP macros, inlined min/step=1.
- Removed S5KJN5_NUM_SUPPLIES, use ARRAY_SIZE(s5kjn5_supply_names).
- Reordered struct s5kjn5_init_op to save padding.
- power_on(): removed goto, single error path handled inline.
- s_ctrl(): checked __v4l2_ctrl_modify_range() return; removed the two
obvious comments.
- init_controls(): moved v4l2_fwnode_device_parse() before the handler
init; return hdlr->error directly.
- Removed the redundant single-subdev .link_validate media entity op.
- dev_info() -> dev_dbg() for the detection message.
- Added blank lines before the probe() error labels.
- Added get_selection (CROP / CROP_DEFAULT / CROP_BOUNDS / NATIVE_SIZE)
reporting the full 8192x6144 pixel array, per the libcamera sensor
driver requirements.
- Link to v3: https://lore.kernel.org/r/20260806-sk5jn5-v3-0-0b3ac1eadf8a@oss.qualcomm.com
Changes in v3:
- Add vddm-supply to the regulator list.
- Drop GBRG from Kconfig, file header and MODULE_DESCRIPTION. -- Vladimir
- Compute pixel_rate at runtime from the link frequency instead of
storing it in the mode. -- Vladimir
- Split the init sequence into two tables around the 5 ms delay and
drop the .delay_us field/handling. -- Vladimir
- Remove unused v4l2_ctrl pointers and the unused <media/v4l2-device.h>.
-- Vladimir
- Move all control flag setting to the end of s5kjn5_init_controls(). -- Vladimir
- Fix s_ctrl() to apply controls when CONFIG_PM is disabled
(pm_runtime_get_if_active() returns -EINVAL).
- Use S5KJN5_CHIP_ID in the init sequence; reword the clock-rate error;
minor style fixes (reverse x-mas tree, ret init).
- Link to v2: https://lore.kernel.org/r/20260724-sk5jn5-v2-0-871d3b9a2e47@oss.qualcomm.com
Changes in v2:
- dt-bindings: drop the "T:" MAINTAINERS entry -- Krzysztof
- Rename vdda2 -> vddio1p2; fix supply descriptions (vddio = 1.8 V VDD18,
vddio1p2 = 1.2 V VDDIO12) -- Wenmeng
- Link to v1: https://lore.kernel.org/r/20260717-sk5jn5-v1-0-da610d7fd494@oss.qualcomm.com
---
Wenmeng Liu (2):
dt-bindings: media: i2c: Add Samsung S5KJN5 image sensor
media: i2c: Add Samsung S5KJN5 image sensor driver
.../bindings/media/i2c/samsung,s5kjn5.yaml | 117 +
MAINTAINERS | 7 +
drivers/media/i2c/Kconfig | 11 +
drivers/media/i2c/Makefile | 1 +
drivers/media/i2c/s5kjn5.c | 2861 ++++++++++++++++++++
5 files changed, 2997 insertions(+)
---
base-commit: 68142f986ff04b2b70b31db00f719bf690f64a9a
change-id: 20260716-sk5jn5-be432bc99a98
Best regards,
--
Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 1/2] dt-bindings: media: i2c: Add Samsung S5KJN5 image sensor
2026-09-14 11:10 [PATCH v4 0/2] media: i2c: Add Samsung S5KJN5 image sensor Wenmeng Liu
@ 2026-09-14 11:10 ` Wenmeng Liu
2026-09-14 11:10 ` [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver Wenmeng Liu
1 sibling, 0 replies; 6+ messages in thread
From: Wenmeng Liu @ 2026-09-14 11:10 UTC (permalink / raw)
To: Wenmeng Liu, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Sakari Ailus
Cc: linux-media, devicetree, linux-kernel, vladimir.zapolskiy,
Krzysztof Kozlowski
Add device tree bindings for the Samsung S5KJN5, a 50 MP 10-bit RAW
MIPI CSI-2 image sensor controlled over CCI.
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
---
.../bindings/media/i2c/samsung,s5kjn5.yaml | 117 +++++++++++++++++++++
MAINTAINERS | 6 ++
2 files changed, 123 insertions(+)
diff --git a/Documentation/devicetree/bindings/media/i2c/samsung,s5kjn5.yaml b/Documentation/devicetree/bindings/media/i2c/samsung,s5kjn5.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..fedb274679cd125483961fee7ac922f2c5efa755
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/i2c/samsung,s5kjn5.yaml
@@ -0,0 +1,117 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/media/i2c/samsung,s5kjn5.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Samsung S5KJN5 Image Sensor
+
+description:
+ Samsung S5KJN5 is a 50MP 10-bit RAW MIPI CSI-2 image sensor.
+ The sensor is controlled over I2C. The full resolution pixel array is
+ 8192x6144, data output format is RAW10 transferred over 4-lane MIPI
+ D-PHY interface.
+
+maintainers:
+ - Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
+
+allOf:
+ - $ref: /schemas/media/video-interface-devices.yaml#
+
+properties:
+ compatible:
+ const: samsung,s5kjn5
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ description: MCLK/XVCLK input clock.
+ maxItems: 1
+
+ reset-gpios:
+ description: Active low GPIO connected to RESET pad of the sensor.
+ maxItems: 1
+
+ vddio-supply:
+ description:
+ 1.8 volt I/O voltage supply (VDD18). Required for both 1.8 and 1.2 volt
+ I/O operation.
+
+ vddd-supply:
+ description: Digital core voltage supply, 1.0 volts.
+
+ vddm-supply:
+ description: MIPI voltage supply, 1.0 volts.
+
+ vdda-supply:
+ description: Analogue voltage supply, 2.2 volts.
+
+ vddio1p2-supply:
+ description:
+ 1.2 volt I/O voltage supply (VDDIO12). Required only for 1.2 volt I/O
+ operation.
+
+ afvdd-supply:
+ description: Autofocus actuator voltage supply, 2.8-3.0 volts.
+
+ port:
+ $ref: /schemas/graph.yaml#/$defs/port-base
+ additionalProperties: false
+
+ properties:
+ endpoint:
+ $ref: /schemas/media/video-interfaces.yaml#
+ unevaluatedProperties: false
+
+ properties:
+ data-lanes:
+ items:
+ - const: 1
+ - const: 2
+ - const: 3
+ - const: 4
+
+ required:
+ - link-frequencies
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - port
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/gpio/gpio.h>
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ camera@10 {
+ compatible = "samsung,s5kjn5";
+ reg = <0x10>;
+ clocks = <&camera_mclk 0>;
+ assigned-clocks = <&camera_mclk 0>;
+ assigned-clock-rates = <19200000>;
+ reset-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
+ vddio-supply = <&vreg_1p8>;
+ vddd-supply = <&vreg_1p0>;
+ vddm-supply = <&vreg_1p0>;
+ vdda-supply = <&vreg_2p2>;
+ vddio1p2-supply = <&vreg_1p2>;
+ afvdd-supply = <&vreg_2p8>;
+
+ port {
+ endpoint {
+ link-frequencies = /bits/ 64 <1248000000>;
+ data-lanes = <1 2 3 4>;
+ remote-endpoint = <&mipi_csi2_ep>;
+ };
+ };
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 207a6e2db70c8e90a23f56e93af7b90459ba895c..12591e0f1ec2464a34cb6faa91b055f2a47c69d9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -24582,6 +24582,12 @@ T: git git://linuxtv.org/media_tree.git
F: Documentation/devicetree/bindings/media/i2c/samsung,s5kjn1.yaml
F: drivers/media/i2c/s5kjn1.c
+SAMSUNG S5KJN5 CAMERA DRIVER
+M: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
+L: linux-media@vger.kernel.org
+S: Supported
+F: Documentation/devicetree/bindings/media/i2c/samsung,s5kjn5.yaml
+
SAMSUNG S5P Security SubSystem (SSS) DRIVER
M: Krzysztof Kozlowski <krzk@kernel.org>
M: Vladimir Zapolskiy <vz@mleia.com>
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver
2026-09-14 11:10 [PATCH v4 0/2] media: i2c: Add Samsung S5KJN5 image sensor Wenmeng Liu
2026-09-14 11:10 ` [PATCH v4 1/2] dt-bindings: " Wenmeng Liu
@ 2026-09-14 11:10 ` Wenmeng Liu
2026-09-14 11:24 ` sashiko-bot
2026-09-23 11:11 ` Nihal Kumar Gupta
1 sibling, 2 replies; 6+ messages in thread
From: Wenmeng Liu @ 2026-09-14 11:10 UTC (permalink / raw)
To: Wenmeng Liu, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Sakari Ailus
Cc: linux-media, devicetree, linux-kernel, vladimir.zapolskiy
Add a V4L2 sub-device driver for the Samsung S5KJN5, a 50 MP 10-bit
RAW MIPI CSI-2 image sensor. The driver supports the 4096x3072 mode and
exposes the standard controls (exposure, gain, vblank/hblank, test
pattern).
Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
---
MAINTAINERS | 1 +
drivers/media/i2c/Kconfig | 11 +
drivers/media/i2c/Makefile | 1 +
drivers/media/i2c/s5kjn5.c | 2861 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 2874 insertions(+)
diff --git a/MAINTAINERS b/MAINTAINERS
index 12591e0f1ec2464a34cb6faa91b055f2a47c69d9..9ea5aca5e866151123b54ade657d78093eeede2a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -24587,6 +24587,7 @@ M: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
L: linux-media@vger.kernel.org
S: Supported
F: Documentation/devicetree/bindings/media/i2c/samsung,s5kjn5.yaml
+F: drivers/media/i2c/s5kjn5.c
SAMSUNG S5P Security SubSystem (SSS) DRIVER
M: Krzysztof Kozlowski <krzk@kernel.org>
diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 3370b66ab4ee639517313fcb7bf08b01d085d789..f2a3e987958f337f0713888e2e89b2019427528d 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -847,6 +847,17 @@ config VIDEO_S5KJN1
To compile this driver as a module, choose M here: the
module will be called s5kjn1.
+config VIDEO_S5KJN5
+ tristate "Samsung S5KJN5 sensor support"
+ depends on GPIOLIB
+ select V4L2_CCI_I2C
+ help
+ This is a V4L2 sensor driver for Samsung S5KJN5 50MP
+ 10-bit RAW MIPI CSI-2 camera sensor.
+
+ To compile this driver as a module, choose M here: the
+ module will be called s5kjn5.
+
config VIDEO_T4KA3
tristate "Toshiba T4KA3 sensor support"
depends on ACPI || COMPILE_TEST
diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile
index fd1cb25718c045829d6404bb6e3e07a3284ecfe7..fb1d63b343717dd9157ca826c9fdaa3d17d309ce 100644
--- a/drivers/media/i2c/Makefile
+++ b/drivers/media/i2c/Makefile
@@ -136,6 +136,7 @@ obj-$(CONFIG_VIDEO_S5K3M5) += s5k3m5.o
obj-$(CONFIG_VIDEO_S5K5BAF) += s5k5baf.o
obj-$(CONFIG_VIDEO_S5K6A3) += s5k6a3.o
obj-$(CONFIG_VIDEO_S5KJN1) += s5kjn1.o
+obj-$(CONFIG_VIDEO_S5KJN5) += s5kjn5.o
obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o
obj-$(CONFIG_VIDEO_SAA6752HS) += saa6752hs.o
obj-$(CONFIG_VIDEO_SAA7110) += saa7110.o
diff --git a/drivers/media/i2c/s5kjn5.c b/drivers/media/i2c/s5kjn5.c
new file mode 100644
index 0000000000000000000000000000000000000000..edf824228bb6f5881dfd3fd63a03f19cc34bcd95
--- /dev/null
+++ b/drivers/media/i2c/s5kjn5.c
@@ -0,0 +1,2861 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Samsung S5KJN5 50 MP 10-bit RAW MIPI CSI-2 sensor driver
+ *
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries
+ */
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/gpio/consumer.h>
+#include <linux/i2c.h>
+#include <linux/math64.h>
+#include <linux/module.h>
+#include <linux/pm_runtime.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <media/v4l2-cci.h>
+#include <media/v4l2-ctrls.h>
+#include <media/v4l2-fwnode.h>
+#include <media/v4l2-subdev.h>
+
+#define S5KJN5_REG_CHIP_ID CCI_REG16(0x0000)
+#define S5KJN5_CHIP_ID 0x38e5
+
+#define S5KJN5_REG_STREAMING CCI_REG8(0x0100)
+#define S5KJN5_STREAMING_ON 0x01
+#define S5KJN5_STREAMING_OFF 0x00
+
+#define S5KJN5_REG_FRAME_COUNT CCI_REG8(0x0005)
+#define S5KJN5_FRAME_COUNT_STANDBY 0xff
+#define S5KJN5_STANDBY_POLL_ITERS 20
+
+#define S5KJN5_REG_VTS CCI_REG16(0x0340)
+#define S5KJN5_VTS_MAX 65535
+
+#define S5KJN5_REG_EXPOSURE CCI_REG16(0x0202)
+
+/* Analogue gain: linear, reg = real * 32 */
+#define S5KJN5_REG_AGAIN CCI_REG16(0x0204)
+#define S5KJN5_AGAIN_MIN 0x0020 /* 1x */
+#define S5KJN5_AGAIN_MAX 0x0a00 /* 80x */
+
+/* Digital gain: reg = real * 256 */
+#define S5KJN5_REG_DGAIN CCI_REG16(0x020e)
+#define S5KJN5_DGAIN_MIN 0x0100 /* 1x */
+#define S5KJN5_DGAIN_MAX 0x1000 /* 16x */
+
+#define S5KJN5_REG_TEST_PATTERN CCI_REG16(0x0600)
+
+#define S5KJN5_EXPOSURE_MIN 4
+#define S5KJN5_EXPOSURE_DEFAULT 0x0100
+
+#define S5KJN5_XVCLK_RATE 19200000
+
+#define S5KJN5_DATA_LANES 4
+#define S5KJN5_RGB_DEPTH 10
+
+/* Full 50.3 Mpx active pixel array */
+#define S5KJN5_NATIVE_WIDTH 8192
+#define S5KJN5_NATIVE_HEIGHT 6144
+
+static const s64 s5kjn5_link_freqs[] = {
+ 1248000000LL,
+};
+
+static u64 s5kjn5_to_pixel_rate(u32 f_index)
+{
+ u64 pixel_rate = s5kjn5_link_freqs[f_index] * 2 * S5KJN5_DATA_LANES;
+
+ return div_u64(pixel_rate, S5KJN5_RGB_DEPTH);
+}
+
+static const char * const s5kjn5_supply_names[] = {
+ "vddio",
+ "vddd",
+ "vddm",
+ "vdda",
+ "vddio1p2",
+ "afvdd",
+};
+
+struct s5kjn5_mode {
+ u32 width;
+ u32 height;
+ u32 hts;
+ u32 vts_min;
+ u32 exposure_margin;
+ const struct cci_reg_sequence *regs;
+ u32 num_regs;
+};
+
+/*
+ * Large blocks of contiguous registers, written as I2C bursts as
+ * directed by the vendor initialisation sequence.
+ */
+static const u8 s5kjn5_data_a614[] = {
+ 0x82, 0x80, 0x01, 0x00, 0x17, 0x53, 0x02, 0xfc, 0xe7, 0x02, 0x83, 0xea,
+ 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87, 0x83, 0xa4, 0x87, 0x0d,
+ 0x03, 0xa4, 0xc7, 0x0d, 0x01, 0x46, 0xa6, 0x85, 0x22, 0x85, 0x97, 0x40,
+ 0x01, 0xfc, 0xe7, 0x80, 0xe0, 0x40, 0x97, 0xb0, 0xfe, 0xfb, 0xe7, 0x80,
+ 0x60, 0xdc, 0x05, 0x46, 0xa6, 0x85, 0x22, 0x85, 0x97, 0x40, 0x01, 0xfc,
+ 0xe7, 0x80, 0x80, 0x3f, 0x37, 0xa7, 0x02, 0x24, 0x93, 0x07, 0x87, 0x54,
+ 0x03, 0xc6, 0xc7, 0x02, 0x85, 0x46, 0x63, 0x01, 0xd6, 0x02, 0x83, 0xc6,
+ 0x07, 0x00, 0x09, 0x47, 0x63, 0x84, 0xe6, 0x08, 0xb7, 0xc7, 0x02, 0x24,
+ 0x83, 0xa7, 0x07, 0xb7, 0x05, 0x45, 0x82, 0x97, 0x17, 0x53, 0x02, 0xfc,
+ 0x67, 0x00, 0x83, 0xe6, 0x03, 0xd5, 0x47, 0x05, 0x05, 0xc9, 0x83, 0xd8,
+ 0x27, 0x05, 0xb7, 0xe6, 0x01, 0x24, 0x83, 0xd5, 0x66, 0x5f, 0x13, 0x07,
+ 0x87, 0x54, 0x81, 0x46, 0x25, 0x48, 0x03, 0x56, 0xe7, 0x02, 0x09, 0x07,
+ 0x63, 0xe0, 0xc5, 0x0e, 0x85, 0x06, 0xe3, 0x9a, 0x06, 0xff, 0x37, 0x07,
+ 0x00, 0x40, 0x3a, 0x95, 0x23, 0x10, 0x15, 0x01, 0x03, 0xd5, 0x67, 0x05,
+ 0x4d, 0xd5, 0x83, 0xd8, 0x27, 0x05, 0x37, 0xe7, 0x01, 0x24, 0x83, 0x55,
+ 0x67, 0x5f, 0xbe, 0x86, 0x01, 0x47, 0x25, 0x48, 0x03, 0xd6, 0xe6, 0x02,
+ 0x89, 0x06, 0x63, 0xee, 0xc5, 0x0a, 0x05, 0x07, 0xe3, 0x1a, 0x07, 0xff,
+ 0x37, 0x07, 0x00, 0x40, 0x3a, 0x95, 0x23, 0x10, 0x15, 0x01, 0x83, 0xc6,
+ 0x07, 0x00, 0x09, 0x47, 0xe3, 0x90, 0xe6, 0xf8, 0x03, 0xd5, 0x87, 0x02,
+ 0x1d, 0xc5, 0x83, 0xd8, 0x67, 0x02, 0x37, 0xf7, 0x01, 0x24, 0x83, 0x55,
+ 0xa7, 0x81, 0xbe, 0x86, 0x01, 0x47, 0x25, 0x48, 0x03, 0xd6, 0x26, 0x00,
+ 0x89, 0x06, 0x63, 0xe3, 0xc5, 0x06, 0x05, 0x07, 0xe3, 0x1a, 0x07, 0xff,
+ 0x37, 0x07, 0x00, 0x40, 0x3a, 0x95, 0x23, 0x10, 0x15, 0x01, 0x03, 0xd5,
+ 0xa7, 0x02, 0x39, 0xd1, 0x83, 0xd8, 0x67, 0x02, 0x37, 0xf7, 0x01, 0x24,
+ 0x83, 0x55, 0xa7, 0x81, 0xbe, 0x86, 0x01, 0x47, 0x25, 0x48, 0x03, 0xd6,
+ 0x26, 0x00, 0x89, 0x06, 0x63, 0xe4, 0xc5, 0x02, 0x05, 0x07, 0xe3, 0x1a,
+ 0x07, 0xff, 0xb7, 0x07, 0x00, 0x40, 0x3e, 0x95, 0xb7, 0xc7, 0x02, 0x24,
+ 0x83, 0xa7, 0x07, 0xb7, 0x23, 0x10, 0x15, 0x01, 0x05, 0x45, 0x82, 0x97,
+ 0x17, 0x53, 0x02, 0xfc, 0x67, 0x00, 0x03, 0xd8, 0x21, 0x07, 0x06, 0x07,
+ 0xba, 0x97, 0x83, 0xd8, 0x47, 0x00, 0xe1, 0xbf, 0x21, 0x07, 0x06, 0x07,
+ 0x3e, 0x97, 0x83, 0x58, 0x47, 0x00, 0x69, 0xbf, 0x13, 0x87, 0x06, 0x02,
+ 0x06, 0x07, 0x3e, 0x97, 0x83, 0x58, 0x07, 0x00, 0x39, 0xbf, 0x13, 0x07,
+ 0x07, 0x02, 0x06, 0x07, 0x3e, 0x97, 0x83, 0x58, 0x07, 0x00, 0x89, 0xb7,
+ 0x17, 0x53, 0x02, 0xfc, 0xe7, 0x02, 0x83, 0xcf, 0x32, 0x84, 0xb7, 0xe7,
+ 0x01, 0x24, 0x03, 0x2b, 0x46, 0x00, 0x83, 0x2a, 0x46, 0x09, 0x03, 0x2a,
+ 0xc6, 0x04, 0x03, 0x48, 0x86, 0x00, 0x93, 0x87, 0x07, 0x87, 0x03, 0x46,
+ 0x86, 0x09, 0x03, 0x47, 0x04, 0x05, 0x83, 0xab, 0x07, 0x0e, 0x03, 0xac,
+ 0x47, 0x0e, 0x33, 0x18, 0x0b, 0x01, 0x33, 0x17, 0xea, 0x00, 0x33, 0x96,
+ 0xca, 0x00, 0x23, 0x22, 0x04, 0x01, 0x78, 0xc4, 0xaa, 0x84, 0x2e, 0x89,
+ 0x23, 0x2a, 0xc4, 0x08, 0xde, 0x85, 0x62, 0x85, 0x01, 0x46, 0xb6, 0x89,
+ 0x97, 0x40, 0x01, 0xfc, 0xe7, 0x80, 0x00, 0x25, 0xce, 0x86, 0x22, 0x86,
+ 0xca, 0x85, 0x26, 0x85, 0x97, 0xb0, 0xfd, 0xfb, 0xe7, 0x80, 0x00, 0xb0,
+ 0x62, 0x85, 0x05, 0x46, 0xde, 0x85, 0x97, 0x40, 0x01, 0xfc, 0xe7, 0x80,
+ 0x20, 0x23, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x07, 0xb7, 0x23, 0x22,
+ 0x64, 0x01, 0x23, 0x2a, 0x54, 0x09, 0x23, 0x26, 0x44, 0x05, 0x01, 0x45,
+ 0x82, 0x97, 0x17, 0x53, 0x02, 0xfc, 0x67, 0x00, 0xe3, 0xc9, 0x01, 0x00,
+ 0x17, 0x53, 0x02, 0xfc, 0xe7, 0x02, 0x43, 0xc8, 0x2a, 0x84, 0xef, 0xe0,
+ 0xef, 0xa9, 0xa1, 0x47, 0x63, 0x06, 0xf4, 0x00, 0x17, 0x53, 0x02, 0xfc,
+ 0x67, 0x00, 0x43, 0xc9, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x00, 0x0c,
+ 0x39, 0xc5, 0xb7, 0x37, 0x01, 0x24, 0x83, 0xc7, 0x27, 0x1a, 0xfd, 0xd3,
+ 0x37, 0x84, 0x00, 0x40, 0x83, 0x55, 0xe4, 0xf3, 0x0d, 0x45, 0x93, 0xe5,
+ 0x05, 0x24, 0x97, 0xd0, 0xff, 0xfb, 0xe7, 0x80, 0xa0, 0x0a, 0x83, 0x55,
+ 0x24, 0xf7, 0xb7, 0xa7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x53, 0x03, 0xd7,
+ 0x47, 0xb6, 0xc2, 0x05, 0xc1, 0x81, 0x13, 0x77, 0xf7, 0xdb, 0x93, 0xf5,
+ 0xf5, 0xdb, 0x41, 0x45, 0x23, 0x92, 0xe7, 0xb6, 0x97, 0xd0, 0xff, 0xfb,
+ 0xe7, 0x80, 0x00, 0x08, 0x55, 0xb7, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80,
+ 0xa0, 0x03, 0x55, 0xd5, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x80, 0x7d,
+ 0x19, 0xc9, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0xd7, 0x03, 0xc7,
+ 0x87, 0x03, 0x83, 0xc7, 0x27, 0x06, 0x63, 0x06, 0xf7, 0x06, 0x97, 0x70,
+ 0xff, 0xfb, 0xe7, 0x80, 0xa0, 0x7b, 0x51, 0xd1, 0xb7, 0x97, 0x01, 0x24,
+ 0x93, 0x87, 0x07, 0xd7, 0x03, 0xc7, 0xc7, 0x01, 0x83, 0xc7, 0x27, 0x06,
+ 0xe3, 0x19, 0xf7, 0xf6, 0xb7, 0x27, 0x02, 0x24, 0x05, 0x64, 0x93, 0x87,
+ 0x07, 0x6b, 0xa2, 0x97, 0x03, 0xc7, 0xf7, 0x80, 0x85, 0x47, 0x63, 0x17,
+ 0xf7, 0x00, 0xb7, 0x37, 0x01, 0x24, 0x83, 0xc7, 0x57, 0xa5, 0xb1, 0xc3,
+ 0xb7, 0x87, 0x00, 0x40, 0x83, 0xd5, 0xe7, 0xf3, 0x0d, 0x45, 0x93, 0xe5,
+ 0x05, 0x01, 0x97, 0xd0, 0xff, 0xfb, 0xe7, 0x80, 0x20, 0x00, 0xb7, 0xa7,
+ 0x01, 0x24, 0x93, 0x87, 0x07, 0x53, 0x03, 0xd7, 0x47, 0xb6, 0x3d, 0x9b,
+ 0x23, 0x92, 0xe7, 0xb6, 0x1d, 0xb7, 0xb7, 0x27, 0x02, 0x24, 0x05, 0x64,
+ 0x93, 0x87, 0x07, 0x6b, 0xa2, 0x97, 0x03, 0xc7, 0xf7, 0x80, 0x91, 0x47,
+ 0xe3, 0x0d, 0xf7, 0xfa, 0xc1, 0xb7, 0xb7, 0x87, 0x00, 0x40, 0x83, 0xd5,
+ 0xe7, 0xf3, 0x0d, 0x45, 0x93, 0xe5, 0x05, 0x04, 0x97, 0xd0, 0xff, 0xfb,
+ 0xe7, 0x80, 0x00, 0xfc, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0x53,
+ 0xa2, 0x97, 0x03, 0xd7, 0x47, 0xb6, 0x13, 0x77, 0xf7, 0xfb, 0x23, 0x92,
+ 0xe7, 0xb6, 0xc5, 0xb5, 0x35, 0x71, 0x22, 0xcf, 0x26, 0xcd, 0x73, 0x24,
+ 0x20, 0x34, 0xf3, 0x24, 0x10, 0x34, 0x73, 0x60, 0x04, 0x30, 0x06, 0xcb,
+ 0x16, 0xc9, 0x1a, 0xc7, 0x1e, 0xc5, 0x2a, 0xc3, 0x2e, 0xc1, 0xb2, 0xde,
+ 0xb6, 0xdc, 0xba, 0xda, 0xbe, 0xd8, 0xc2, 0xd6, 0xc6, 0xd4, 0xf2, 0xd2,
+ 0xf6, 0xd0, 0xfa, 0xce, 0xfe, 0xcc, 0x82, 0xe2, 0x86, 0xe0, 0x0a, 0xfe,
+ 0x0e, 0xfc, 0x12, 0xfa, 0x16, 0xf8, 0x1a, 0xf6, 0x1e, 0xf4, 0x2a, 0xf2,
+ 0x2e, 0xf0, 0x32, 0xee, 0x36, 0xec, 0x3a, 0xea, 0x3e, 0xe8, 0x42, 0xe6,
+ 0x46, 0xe4, 0x72, 0xe2, 0x76, 0xe0, 0x27, 0x2e, 0xe1, 0xff, 0x27, 0x2c,
+ 0xf1, 0xff, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x60, 0xf3, 0x19, 0xc5,
+ 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0xef, 0x63, 0x1c, 0x05, 0x12,
+ 0x93, 0x05, 0x00, 0x24, 0x41, 0x45, 0x97, 0xd0, 0xff, 0xfb, 0xe7, 0x80,
+ 0x60, 0xf9, 0x81, 0x45, 0x93, 0x77, 0x15, 0x00, 0x85, 0xc7, 0x37, 0xd7,
+ 0x01, 0x24, 0xb7, 0xa7, 0x01, 0x24, 0x13, 0x07, 0x07, 0xc4, 0x93, 0x87,
+ 0x07, 0x53, 0x03, 0x56, 0x47, 0x07, 0x83, 0xd6, 0xa7, 0xb6, 0x05, 0x06,
+ 0x93, 0xe6, 0x16, 0x00, 0x23, 0x1a, 0xc7, 0x06, 0x23, 0x95, 0xd7, 0xb6,
+ 0x93, 0x77, 0x25, 0x00, 0x85, 0xc7, 0x37, 0xd7, 0x01, 0x24, 0xb7, 0xa7,
+ 0x01, 0x24, 0x13, 0x07, 0x07, 0xc4, 0x93, 0x87, 0x07, 0x53, 0x03, 0x56,
+ 0xc7, 0x0c, 0x83, 0xd6, 0xa7, 0xb6, 0x05, 0x06, 0x93, 0xe6, 0x26, 0x00,
+ 0x23, 0x16, 0xc7, 0x0c, 0x23, 0x95, 0xd7, 0xb6, 0x93, 0x77, 0x05, 0x20,
+ 0x13, 0x75, 0x05, 0x04, 0xc5, 0xc3, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87,
+ 0x07, 0xc4, 0x03, 0xd7, 0x67, 0x08, 0x05, 0x07, 0x23, 0x93, 0xe7, 0x08,
+ 0xd1, 0xc5, 0x37, 0xa7, 0x01, 0x24, 0x13, 0x07, 0x07, 0x53, 0x83, 0x56,
+ 0xa7, 0xb6, 0x93, 0xe6, 0x06, 0x20, 0x23, 0x15, 0xd7, 0xb6, 0x11, 0xc9,
+ 0x03, 0xd6, 0xa7, 0x08, 0x05, 0x06, 0x23, 0x95, 0xc7, 0x08, 0x93, 0xe6,
+ 0x06, 0x04, 0x23, 0x15, 0xd7, 0xb6, 0xda, 0x40, 0xca, 0x42, 0x3a, 0x43,
+ 0xaa, 0x43, 0x1a, 0x45, 0x8a, 0x45, 0x76, 0x56, 0xe6, 0x56, 0x56, 0x57,
+ 0xc6, 0x57, 0x36, 0x58, 0xa6, 0x58, 0x16, 0x5e, 0x86, 0x5e, 0x76, 0x4f,
+ 0xe6, 0x4f, 0x16, 0x60, 0x86, 0x60, 0x72, 0x71, 0xe2, 0x71, 0x52, 0x72,
+ 0xc2, 0x72, 0x32, 0x73, 0xa2, 0x73, 0x12, 0x75, 0x82, 0x75, 0x72, 0x66,
+ 0xe2, 0x66, 0x52, 0x67, 0xc2, 0x67, 0x32, 0x68, 0xa2, 0x68, 0x12, 0x6e,
+ 0x82, 0x6e, 0x07, 0x2f, 0xc1, 0xff, 0x87, 0x2f, 0x81, 0xff, 0x73, 0x70,
+ 0x04, 0x30, 0x73, 0x90, 0x14, 0x34, 0x73, 0x10, 0x24, 0x34, 0x7a, 0x44,
+ 0xea, 0x44, 0x0d, 0x61, 0x73, 0x00, 0x20, 0x30, 0x59, 0xdd, 0xb7, 0xd7,
+ 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4, 0x03, 0xd7, 0xa7, 0x08, 0x05, 0x07,
+ 0x23, 0x95, 0xe7, 0x08, 0xc9, 0xd5, 0x37, 0xa7, 0x01, 0x24, 0x13, 0x07,
+ 0x07, 0x53, 0x83, 0x56, 0xa7, 0xb6, 0x95, 0xbf, 0xb7, 0xa7, 0x01, 0x24,
+ 0x83, 0xd5, 0x87, 0x09, 0x41, 0x45, 0x97, 0xd0, 0xff, 0xfb, 0xe7, 0x80,
+ 0xe0, 0xe5, 0x85, 0x45, 0xe1, 0xb5, 0x01, 0x00, 0x82, 0x80, 0x01, 0x00,
+ 0x17, 0x53, 0x02, 0xfc, 0xe7, 0x02, 0x83, 0x97, 0x37, 0xe4, 0x01, 0x24,
+ 0x13, 0x04, 0x04, 0x4c, 0x83, 0x44, 0xe4, 0x0a, 0x85, 0x47, 0x23, 0x07,
+ 0xf4, 0x0a, 0x97, 0xa0, 0xfd, 0xfb, 0xe7, 0x80, 0x20, 0xe3, 0x23, 0x07,
+ 0x94, 0x0a, 0x17, 0x53, 0x02, 0xfc, 0x67, 0x00, 0x63, 0x97, 0x01, 0x00,
+ 0xb7, 0xa7, 0x02, 0x24, 0x83, 0xc7, 0x07, 0x5a, 0x05, 0x47, 0x63, 0x83,
+ 0xe7, 0x00, 0x82, 0x80, 0x17, 0x53, 0x02, 0xfc, 0xe7, 0x02, 0xe3, 0x91,
+ 0x37, 0x94, 0x01, 0x24, 0x13, 0x04, 0x04, 0x53, 0x03, 0x47, 0x04, 0x1b,
+ 0x41, 0x11, 0x63, 0x07, 0xf7, 0x00, 0x41, 0x01, 0x17, 0x53, 0x02, 0xfc,
+ 0x67, 0x00, 0x63, 0x93, 0x89, 0x47, 0xe3, 0x1a, 0xf5, 0xfe, 0x83, 0x47,
+ 0x34, 0x41, 0xad, 0xc3, 0x83, 0xa9, 0x05, 0x00, 0x2e, 0xc6, 0x97, 0xc0,
+ 0x01, 0xfc, 0xe7, 0x80, 0x20, 0xb8, 0xaa, 0x84, 0x97, 0x80, 0x01, 0xfc,
+ 0xe7, 0x80, 0x80, 0xc7, 0xb2, 0x45, 0x2a, 0x89, 0x9c, 0x41, 0x63, 0xf3,
+ 0x97, 0x00, 0xa6, 0x87, 0x88, 0x51, 0x9c, 0xc1, 0x2e, 0xc6, 0x4a, 0x95,
+ 0x97, 0xb0, 0x00, 0xfc, 0xe7, 0x80, 0x00, 0xc5, 0xb2, 0x45, 0xaa, 0x84,
+ 0xe8, 0xc9, 0x33, 0x85, 0x29, 0x01, 0x97, 0xb0, 0x00, 0xfc, 0xe7, 0x80,
+ 0xe0, 0xc3, 0x85, 0x67, 0x3e, 0x94, 0x83, 0x27, 0xc4, 0x83, 0x26, 0x95,
+ 0xb2, 0x45, 0x63, 0xf3, 0xa7, 0x00, 0xaa, 0x87, 0x23, 0x22, 0xf4, 0x98,
+ 0xe8, 0xc5, 0x71, 0xb7, 0x01, 0x45, 0x2e, 0xc6, 0x97, 0xb0, 0x01, 0xfc,
+ 0xe7, 0x80, 0x80, 0x35, 0xb2, 0x45, 0xaa, 0x89, 0x51, 0xbf, 0x01, 0x00,
+ 0x17, 0x53, 0x02, 0xfc, 0xe7, 0x02, 0x43, 0x89, 0x2a, 0x84, 0xef, 0xe0,
+ 0xaf, 0xfc, 0x01, 0xe8, 0xb7, 0xd7, 0x01, 0x24, 0x03, 0xa7, 0x87, 0xc1,
+ 0x91, 0x47, 0x63, 0x06, 0xf7, 0x00, 0x17, 0x53, 0x02, 0xfc, 0x67, 0x00,
+ 0xa3, 0x89, 0xb7, 0xd7, 0x01, 0x24, 0x83, 0xc7, 0x07, 0xfa, 0xe5, 0xdb,
+ 0xb7, 0x47, 0x01, 0x24, 0x83, 0xc7, 0x27, 0xc4, 0xfd, 0xf3, 0x97, 0xe0,
+ 0x00, 0xfc, 0xe7, 0x80, 0xa0, 0x97, 0xb7, 0x87, 0x02, 0x24, 0x05, 0x47,
+ 0xa3, 0x80, 0xe7, 0x4e, 0xc9, 0xbf, 0x01, 0x00, 0x17, 0x53, 0x02, 0xfc,
+ 0xe7, 0x02, 0x43, 0x84, 0x37, 0x84, 0x02, 0x24, 0x13, 0x04, 0xc4, 0x49,
+ 0x83, 0x47, 0x54, 0x04, 0x99, 0xe7, 0xef, 0xe0, 0x7f, 0x82, 0x17, 0x53,
+ 0x02, 0xfc, 0x67, 0x00, 0xe3, 0x84, 0x97, 0xe0, 0x00, 0xfc, 0xe7, 0x80,
+ 0x20, 0xaf, 0xa3, 0x02, 0x04, 0x04, 0xef, 0xe0, 0xff, 0x80, 0x17, 0x53,
+ 0x02, 0xfc, 0x67, 0x00, 0x63, 0x83, 0x01, 0x00, 0x17, 0x53, 0x02, 0xfc,
+ 0xe7, 0x02, 0x83, 0x80, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87,
+ 0x03, 0xa9, 0x87, 0x0e, 0x83, 0xa4, 0xc7, 0x0e, 0x01, 0x46, 0xca, 0x85,
+ 0x2a, 0x84, 0x26, 0x85, 0x97, 0x40, 0x01, 0xfc, 0xe7, 0x80, 0xc0, 0xd6,
+ 0x22, 0x85, 0x97, 0xa0, 0xff, 0xfb, 0xe7, 0x80, 0x60, 0x3e, 0x05, 0x46,
+ 0xca, 0x85, 0x26, 0x85, 0x97, 0x40, 0x01, 0xfc, 0xe7, 0x80, 0x40, 0xd5,
+ 0x85, 0x47, 0x63, 0x0f, 0xf4, 0x00, 0x91, 0x47, 0x63, 0x0c, 0xf4, 0x00,
+ 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x07, 0xb7, 0x09, 0x45, 0x82, 0x97,
+ 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0x43, 0x7d, 0x97, 0x70, 0xff, 0xfb,
+ 0xe7, 0x80, 0x00, 0xc0, 0x75, 0xf1, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80,
+ 0x60, 0xbc, 0x69, 0xdd, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x40, 0x36,
+ 0x19, 0xc9, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0xd7, 0x03, 0xc7,
+ 0x87, 0x03, 0x83, 0xc7, 0x27, 0x06, 0x63, 0x06, 0xf7, 0x06, 0x97, 0x70,
+ 0xff, 0xfb, 0xe7, 0x80, 0x60, 0x34, 0x4d, 0xd9, 0xb7, 0x97, 0x01, 0x24,
+ 0x93, 0x87, 0x07, 0xd7, 0x03, 0xc7, 0xc7, 0x01, 0x83, 0xc7, 0x27, 0x06,
+ 0xe3, 0x10, 0xf7, 0xfa, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x47, 0xb7,
+ 0xb7, 0x06, 0x00, 0x40, 0x13, 0x86, 0x46, 0x06, 0x89, 0x65, 0x3e, 0x96,
+ 0x13, 0x87, 0x06, 0x1f, 0x93, 0x85, 0xf5, 0xf1, 0x23, 0x10, 0xb6, 0x00,
+ 0x3e, 0x97, 0x7d, 0x56, 0x23, 0x10, 0xc7, 0x00, 0x37, 0xd6, 0x01, 0x24,
+ 0x13, 0x06, 0x06, 0xe7, 0x03, 0x57, 0xc6, 0x05, 0x03, 0x56, 0x66, 0x06,
+ 0x93, 0x86, 0x86, 0x1d, 0x32, 0x97, 0x42, 0x07, 0xb6, 0x97, 0x41, 0x83,
+ 0x23, 0x90, 0xe7, 0x00, 0x91, 0xbf, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7,
+ 0x47, 0xb7, 0xb7, 0x06, 0x00, 0x40, 0x13, 0x86, 0x46, 0x06, 0x89, 0x65,
+ 0x3e, 0x96, 0x13, 0x87, 0x06, 0x1f, 0x93, 0x85, 0xf5, 0xf1, 0x23, 0x10,
+ 0xb6, 0x00, 0x3e, 0x97, 0x7d, 0x56, 0x23, 0x10, 0xc7, 0x00, 0x37, 0xd6,
+ 0x01, 0x24, 0x13, 0x06, 0x06, 0xe7, 0x03, 0x57, 0x06, 0x06, 0x93, 0x86,
+ 0xa6, 0x1d, 0x03, 0x56, 0x66, 0x06, 0x5d, 0xbf, 0x17, 0x43, 0x02, 0xfc,
+ 0xe7, 0x02, 0x03, 0x6d, 0xb7, 0xd7, 0x00, 0x24, 0x83, 0xc7, 0x47, 0x6d,
+ 0x85, 0x44, 0x63, 0x80, 0x97, 0x14, 0xb7, 0xe7, 0x00, 0x24, 0x03, 0xc4,
+ 0xc7, 0x84, 0xb7, 0xa7, 0x01, 0x24, 0x83, 0xc7, 0x67, 0x92, 0x33, 0x34,
+ 0x80, 0x00, 0x33, 0x04, 0x80, 0x40, 0x79, 0x98, 0x13, 0x04, 0x64, 0x02,
+ 0xed, 0xe7, 0xb7, 0x67, 0x00, 0x24, 0x93, 0x87, 0x07, 0x33, 0x03, 0xd7,
+ 0xe7, 0x5b, 0x19, 0xc7, 0x13, 0x47, 0xf7, 0xff, 0x61, 0x8f, 0x13, 0x14,
+ 0x07, 0x01, 0x41, 0x80, 0x83, 0xd7, 0x07, 0x5c, 0x0d, 0x45, 0x5d, 0x8c,
+ 0x42, 0x04, 0x41, 0x80, 0xa2, 0x85, 0x97, 0xd0, 0xff, 0xfb, 0xe7, 0x80,
+ 0xa0, 0xbb, 0x93, 0x15, 0x05, 0x01, 0xc1, 0x81, 0xaa, 0x84, 0x63, 0x09,
+ 0xb4, 0x00, 0x05, 0x65, 0xa1, 0x8d, 0x2d, 0x05, 0x97, 0xa0, 0xff, 0xfb,
+ 0xe7, 0x80, 0x80, 0x46, 0x13, 0x95, 0x04, 0x01, 0x93, 0xf7, 0x14, 0x00,
+ 0x41, 0x81, 0x91, 0xcb, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4,
+ 0x03, 0xd7, 0x47, 0x07, 0x05, 0x07, 0x23, 0x9a, 0xe7, 0x06, 0x93, 0x77,
+ 0x25, 0x00, 0x91, 0xcb, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4,
+ 0x03, 0xd7, 0xc7, 0x0c, 0x05, 0x07, 0x23, 0x96, 0xe7, 0x0c, 0x93, 0x77,
+ 0x45, 0x00, 0x91, 0xcb, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4,
+ 0x03, 0xd7, 0xe7, 0x0c, 0x05, 0x07, 0x23, 0x97, 0xe7, 0x0c, 0x93, 0x77,
+ 0x05, 0x02, 0x91, 0xcb, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4,
+ 0x03, 0xd7, 0x07, 0x0f, 0x05, 0x07, 0x23, 0x98, 0xe7, 0x0e, 0x93, 0x77,
+ 0x05, 0x20, 0x91, 0xcb, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4,
+ 0x03, 0xd7, 0x67, 0x08, 0x05, 0x07, 0x23, 0x93, 0xe7, 0x08, 0x13, 0x75,
+ 0x05, 0x04, 0x11, 0xc9, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4,
+ 0x03, 0xd7, 0xa7, 0x08, 0x05, 0x07, 0x23, 0x95, 0xe7, 0x08, 0x17, 0x43,
+ 0x02, 0xfc, 0x67, 0x00, 0xe3, 0x5d, 0xb7, 0xd7, 0x01, 0x24, 0x83, 0xd7,
+ 0xa7, 0xe7, 0x81, 0xdb, 0x97, 0x60, 0xfe, 0xfb, 0xe7, 0x80, 0x80, 0x68,
+ 0x63, 0x11, 0x95, 0x06, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0xd7,
+ 0x03, 0xc7, 0xc7, 0x01, 0x83, 0xc7, 0x27, 0x06, 0x63, 0x07, 0xf7, 0x04,
+ 0x13, 0x64, 0x04, 0x24, 0x42, 0x04, 0x41, 0x80, 0x11, 0xa0, 0x01, 0x44,
+ 0xb7, 0x67, 0x00, 0x24, 0x93, 0x87, 0x07, 0x33, 0x03, 0xc7, 0x27, 0x3b,
+ 0xe3, 0x0f, 0x07, 0xec, 0x37, 0xa7, 0x01, 0x24, 0x03, 0x47, 0x67, 0x92,
+ 0xe3, 0x09, 0x07, 0xec, 0x37, 0xd7, 0x01, 0x24, 0x03, 0x57, 0xa7, 0xe7,
+ 0xe3, 0x03, 0x07, 0xec, 0x37, 0x97, 0x01, 0x24, 0x03, 0x47, 0x17, 0x00,
+ 0xe3, 0x0d, 0x07, 0xea, 0x13, 0x74, 0xf4, 0xdf, 0x42, 0x04, 0x41, 0x80,
+ 0x7d, 0xb5, 0x97, 0x60, 0xfe, 0xfb, 0xe7, 0x80, 0xe0, 0x61, 0x85, 0x47,
+ 0xe3, 0x1c, 0xf5, 0xfa, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0xd7,
+ 0x03, 0xc7, 0xc7, 0x01, 0x83, 0xc7, 0x27, 0x06, 0xe3, 0x12, 0xf7, 0xfa,
+ 0x13, 0x64, 0x04, 0x20, 0x42, 0x04, 0x41, 0x80, 0x61, 0xbf, 0x01, 0x00,
+ 0x71, 0x71, 0x22, 0xd7, 0x26, 0xd5, 0x73, 0x24, 0x20, 0x34, 0xf3, 0x24,
+ 0x10, 0x34, 0x73, 0x60, 0x04, 0x30, 0x2e, 0xc5, 0xa5, 0x65, 0xbe, 0xdc,
+ 0x06, 0xd3, 0x16, 0xd1, 0x1a, 0xcf, 0x1e, 0xcd, 0x22, 0xcb, 0x2a, 0xc7,
+ 0x32, 0xc3, 0x36, 0xc1, 0xba, 0xde, 0xc2, 0xda, 0xc6, 0xd8, 0xf2, 0xd0,
+ 0xf6, 0xce, 0xfa, 0xcc, 0xfe, 0xca, 0x82, 0xe2, 0x86, 0xe0, 0x0a, 0xfe,
+ 0x0e, 0xfc, 0x12, 0xfa, 0x16, 0xf8, 0x1a, 0xf6, 0x1e, 0xf4, 0x2a, 0xf2,
+ 0x2e, 0xf0, 0x32, 0xee, 0x26, 0xc9, 0xca, 0xd6, 0xce, 0xd4, 0xd2, 0xd2,
+ 0x93, 0x85, 0x05, 0x40, 0x05, 0x45, 0x36, 0xec, 0x3a, 0xea, 0x3e, 0xe8,
+ 0x42, 0xe6, 0x46, 0xe4, 0x72, 0xe2, 0x76, 0xe0, 0x27, 0x2e, 0xe1, 0xff,
+ 0x27, 0x2c, 0xf1, 0xff, 0x97, 0xd0, 0xff, 0xfb, 0xe7, 0x80, 0x40, 0x97,
+ 0xa1, 0x67, 0xe9, 0x8f, 0x2a, 0x84, 0x63, 0x94, 0x07, 0x18, 0xb7, 0x64,
+ 0x01, 0x24, 0x93, 0x84, 0x04, 0x40, 0x85, 0x67, 0xe1, 0x8f, 0xcd, 0xcf,
+ 0x37, 0xd7, 0x01, 0x24, 0x37, 0x89, 0x02, 0x24, 0x13, 0x07, 0x07, 0xc4,
+ 0x13, 0x09, 0xc9, 0x49, 0x83, 0x56, 0x67, 0x0e, 0x83, 0x27, 0x09, 0x05,
+ 0x85, 0x06, 0x85, 0x07, 0x23, 0x28, 0xf9, 0x04, 0x23, 0x13, 0xd7, 0x0e,
+ 0x85, 0x8b, 0x63, 0x9f, 0x07, 0x1a, 0x85, 0x47, 0xa3, 0x0a, 0xf9, 0x04,
+ 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x00, 0xff, 0x19, 0xc5, 0x03, 0x57,
+ 0x49, 0x05, 0x93, 0x07, 0x10, 0x10, 0x63, 0x06, 0xf7, 0x24, 0xdc, 0x50,
+ 0x09, 0x45, 0x82, 0x97, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0x85,
+ 0x11, 0xc5, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x20, 0x88, 0x55, 0xc5,
+ 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80, 0x40, 0x5a, 0xb7, 0x87, 0x00, 0x24,
+ 0x83, 0xc7, 0x07, 0x8c, 0xaa, 0x89, 0x63, 0x92, 0x07, 0x1c, 0xb7, 0xd7,
+ 0x01, 0x24, 0x93, 0x87, 0x07, 0xe7, 0xbc, 0x5f, 0x63, 0x9a, 0x07, 0x16,
+ 0x37, 0x99, 0x01, 0x24, 0x13, 0x09, 0x09, 0x53, 0xb7, 0x27, 0x00, 0x24,
+ 0x83, 0xc7, 0x77, 0x52, 0x63, 0x96, 0x07, 0x1e, 0x03, 0x45, 0xc9, 0x18,
+ 0x63, 0x1d, 0x05, 0x1c, 0xdc, 0x50, 0x0d, 0x45, 0x82, 0x97, 0x4e, 0x85,
+ 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80, 0x00, 0x5a, 0x85, 0x67, 0x3e, 0x99,
+ 0x23, 0x20, 0xa9, 0xa2, 0x13, 0x74, 0x04, 0x40, 0x21, 0xc4, 0xb7, 0xd7,
+ 0x01, 0x24, 0x93, 0x87, 0x07, 0xc4, 0x37, 0xa7, 0x01, 0x24, 0x83, 0xd6,
+ 0x67, 0x0e, 0x13, 0x07, 0x07, 0x53, 0x03, 0x47, 0x17, 0x9b, 0x85, 0x06,
+ 0x37, 0x84, 0x02, 0x24, 0x13, 0x04, 0xc4, 0x49, 0x13, 0x37, 0x17, 0x00,
+ 0x23, 0x93, 0xd7, 0x0e, 0x23, 0x0a, 0xe4, 0x04, 0x97, 0x70, 0xff, 0xfb,
+ 0xe7, 0x80, 0x40, 0xf3, 0x63, 0x06, 0x05, 0x10, 0x03, 0x57, 0x44, 0x05,
+ 0x93, 0x07, 0x10, 0x10, 0x63, 0x00, 0xf7, 0x10, 0xdc, 0x50, 0x1d, 0x45,
+ 0x82, 0x97, 0x9a, 0x50, 0x8a, 0x52, 0x7a, 0x43, 0xea, 0x43, 0x5a, 0x44,
+ 0xca, 0x44, 0x3a, 0x45, 0xaa, 0x45, 0x1a, 0x46, 0x8a, 0x46, 0x76, 0x57,
+ 0xe6, 0x57, 0x56, 0x58, 0xc6, 0x58, 0x36, 0x59, 0xa6, 0x59, 0x16, 0x5a,
+ 0x06, 0x5e, 0xf6, 0x4e, 0x66, 0x4f, 0xd6, 0x4f, 0x16, 0x60, 0x86, 0x60,
+ 0x72, 0x71, 0xe2, 0x71, 0x52, 0x72, 0xc2, 0x72, 0x32, 0x73, 0xa2, 0x73,
+ 0x12, 0x75, 0x82, 0x75, 0x72, 0x66, 0xe2, 0x66, 0x52, 0x67, 0xc2, 0x67,
+ 0x32, 0x68, 0xa2, 0x68, 0x12, 0x6e, 0x82, 0x6e, 0x07, 0x2f, 0xc1, 0xff,
+ 0x87, 0x2f, 0x81, 0xff, 0x73, 0x70, 0x04, 0x30, 0x73, 0x90, 0x14, 0x34,
+ 0x73, 0x10, 0x24, 0x34, 0x3a, 0x54, 0xaa, 0x54, 0x4d, 0x61, 0x73, 0x00,
+ 0x20, 0x30, 0x37, 0xd9, 0x01, 0x24, 0x13, 0x09, 0x09, 0xc4, 0x83, 0x57,
+ 0x49, 0x0e, 0xb7, 0x64, 0x01, 0x24, 0x93, 0x84, 0x04, 0x40, 0xd8, 0x50,
+ 0x85, 0x07, 0x01, 0x45, 0x23, 0x12, 0xf9, 0x0e, 0x02, 0x97, 0x97, 0x60,
+ 0xff, 0xfb, 0xe7, 0x80, 0x20, 0x71, 0x25, 0xe5, 0xb7, 0x29, 0x00, 0x24,
+ 0x37, 0x99, 0x01, 0x24, 0x93, 0x89, 0x09, 0x33, 0x13, 0x09, 0x09, 0x53,
+ 0x05, 0x6a, 0x83, 0xc7, 0x79, 0x1f, 0x4a, 0x9a, 0x23, 0x20, 0x0a, 0xa2,
+ 0xb9, 0xef, 0x03, 0x45, 0xc9, 0x18, 0x2d, 0xe5, 0x83, 0xc7, 0x09, 0x20,
+ 0x89, 0xc7, 0x03, 0x27, 0x4a, 0xb3, 0x63, 0x0a, 0xf7, 0x00, 0x97, 0xe0,
+ 0x00, 0xfc, 0xe7, 0x80, 0xe0, 0xd2, 0xdc, 0x50, 0x05, 0x45, 0x82, 0x97,
+ 0x29, 0xbd, 0x01, 0xa0, 0x85, 0x47, 0x23, 0x0a, 0x09, 0x04, 0xa3, 0x0a,
+ 0x09, 0x04, 0x23, 0x28, 0xf9, 0x04, 0x3d, 0xbd, 0x7d, 0x55, 0x97, 0x70,
+ 0x01, 0xfc, 0xe7, 0x80, 0xa0, 0x04, 0x59, 0xb5, 0xef, 0xe0, 0x5f, 0xd9,
+ 0x01, 0xb7, 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80, 0x20, 0x6d, 0x49, 0xf9,
+ 0x83, 0x57, 0x49, 0x0e, 0x85, 0x8b, 0xc9, 0xf7, 0xcd, 0xbd, 0x97, 0x70,
+ 0x01, 0xfc, 0xe7, 0x80, 0x20, 0x03, 0x23, 0x11, 0xa9, 0x4e, 0x03, 0x45,
+ 0xc9, 0x18, 0x49, 0xdd, 0x97, 0xc0, 0xff, 0xfb, 0xe7, 0x80, 0x40, 0xb4,
+ 0x41, 0xbf, 0x97, 0x70, 0x01, 0xfc, 0xe7, 0x80, 0x60, 0x01, 0x37, 0x99,
+ 0x01, 0x24, 0x13, 0x09, 0x09, 0x53, 0x8d, 0x67, 0xca, 0x97, 0x03, 0xc7,
+ 0xd7, 0x6f, 0x23, 0x2e, 0xa9, 0x4e, 0x85, 0x47, 0x63, 0x06, 0xf7, 0x00,
+ 0x83, 0x27, 0x09, 0x4f, 0xe3, 0x77, 0xf5, 0xea, 0x97, 0x60, 0x00, 0xfc,
+ 0xe7, 0x80, 0x80, 0xfc, 0x97, 0x70, 0x01, 0xfc, 0xe7, 0x80, 0x40, 0xfe,
+ 0x23, 0x20, 0xa9, 0x50, 0x21, 0xbd, 0x97, 0xc0, 0xff, 0xfb, 0xe7, 0x80,
+ 0xa0, 0xb2, 0x0d, 0xb5, 0x97, 0x70, 0x01, 0xfc, 0xe7, 0x80, 0xc0, 0xfc,
+ 0x23, 0x12, 0xa9, 0x4e, 0x31, 0xb5, 0xef, 0xe0, 0x7f, 0xd0, 0x55, 0xbb,
+ 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0xc3, 0x1e, 0x2a, 0x84, 0xef, 0xd0,
+ 0xbf, 0xa7, 0x89, 0x47, 0x63, 0x06, 0xf4, 0x00, 0x17, 0x43, 0x02, 0xfc,
+ 0x67, 0x00, 0xc3, 0x1f, 0xb7, 0xe7, 0x00, 0x24, 0x03, 0xd7, 0xc7, 0xc8,
+ 0x85, 0x64, 0x93, 0x87, 0xf4, 0xb3, 0xe3, 0x15, 0xf7, 0xfe, 0x37, 0xa9,
+ 0x02, 0x24, 0x13, 0x09, 0x89, 0x54, 0x83, 0x47, 0x19, 0x0c, 0xe9, 0xff,
+ 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x00, 0xe3, 0x61, 0xf9, 0x97, 0x70,
+ 0xff, 0xfb, 0xe7, 0x80, 0xa0, 0xe3, 0x79, 0xf1, 0x37, 0x25, 0x02, 0x24,
+ 0x13, 0x05, 0x05, 0xed, 0x97, 0x00, 0xff, 0xfb, 0xe7, 0x80, 0x80, 0xfa,
+ 0xb7, 0x97, 0x01, 0x24, 0x37, 0x67, 0x01, 0x24, 0x03, 0x27, 0x07, 0x40,
+ 0x93, 0x87, 0x07, 0x53, 0xa6, 0x97, 0x85, 0x44, 0x1d, 0x45, 0x23, 0x8d,
+ 0x97, 0xce, 0x02, 0x97, 0xa3, 0x00, 0x99, 0x0c, 0x97, 0x80, 0x01, 0xfc,
+ 0xe7, 0x80, 0x00, 0x83, 0x51, 0xf5, 0xb7, 0x27, 0x01, 0x24, 0x23, 0x80,
+ 0x87, 0x54, 0x97, 0xb0, 0xfe, 0xfb, 0xe7, 0x80, 0x60, 0x02, 0x23, 0x01,
+ 0x99, 0x0c, 0x9d, 0xbf, 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0xc3, 0x14,
+ 0x37, 0xa4, 0x02, 0x24, 0x13, 0x04, 0x84, 0x54, 0x03, 0x47, 0x24, 0x0c,
+ 0x85, 0x47, 0x63, 0x0a, 0xf7, 0x00, 0x97, 0xb0, 0xfe, 0xfb, 0xe7, 0x80,
+ 0xe0, 0x69, 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0xe3, 0x14, 0x97, 0x70,
+ 0x01, 0xfc, 0xe7, 0x80, 0x60, 0x7e, 0x65, 0xf5, 0x97, 0xb0, 0xfe, 0xfb,
+ 0xe7, 0x80, 0x80, 0x0f, 0x23, 0x01, 0x04, 0x0c, 0xe9, 0xbf, 0x01, 0x00,
+ 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0x83, 0x10, 0x9d, 0x47, 0x63, 0x1f,
+ 0xf5, 0x00, 0x37, 0x94, 0x01, 0x24, 0x13, 0x04, 0x04, 0x53, 0x85, 0x67,
+ 0xa2, 0x97, 0x83, 0xc7, 0xa7, 0xcf, 0x9d, 0xe7, 0x17, 0x43, 0x02, 0xfc,
+ 0x67, 0x00, 0xc3, 0x10, 0x2a, 0x84, 0xef, 0xd0, 0x7f, 0xdd, 0x85, 0x47,
+ 0xe3, 0x18, 0xf4, 0xfe, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x4c,
+ 0x23, 0xae, 0x07, 0x10, 0x23, 0xa4, 0x07, 0x7e, 0x17, 0x43, 0x02, 0xfc,
+ 0x67, 0x00, 0x83, 0x0e, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0xd3,
+ 0x71, 0xf5, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x60, 0xd4, 0x69, 0xf1,
+ 0x8d, 0x67, 0x3e, 0x94, 0x83, 0x27, 0x84, 0x6d, 0xb7, 0x24, 0x01, 0x24,
+ 0x93, 0x84, 0x04, 0x5f, 0x91, 0xef, 0x83, 0xa7, 0x44, 0x0e, 0x99, 0xcb,
+ 0xb7, 0xd7, 0x01, 0x24, 0x83, 0xc7, 0x07, 0xfa, 0xc5, 0xd3, 0x97, 0x00,
+ 0xff, 0xfb, 0xe7, 0x80, 0x20, 0xe3, 0x59, 0xbf, 0x83, 0xa7, 0xc4, 0x0a,
+ 0xc1, 0xdb, 0x05, 0x45, 0x97, 0x30, 0xfe, 0xfb, 0xe7, 0x80, 0x80, 0x51,
+ 0xb7, 0x35, 0x20, 0x2d, 0x75, 0x78, 0x37, 0xf5, 0x20, 0x2d, 0x93, 0x85,
+ 0x05, 0x60, 0x13, 0x08, 0x08, 0xa0, 0x91, 0x68, 0x13, 0x05, 0x05, 0x60,
+ 0xb3, 0x87, 0x05, 0x01, 0x03, 0xc7, 0x07, 0x00, 0x93, 0x06, 0xf0, 0x0f,
+ 0x13, 0x16, 0x87, 0x01, 0x61, 0x86, 0x06, 0x07, 0x63, 0x44, 0x06, 0x00,
+ 0x93, 0x76, 0xf7, 0x0f, 0x23, 0x80, 0xd7, 0x00, 0x85, 0x07, 0xe3, 0x91,
+ 0xb7, 0xfe, 0xb3, 0x85, 0x17, 0x01, 0xe3, 0x9b, 0xa5, 0xfc, 0xb7, 0xa7,
+ 0x02, 0x24, 0x05, 0x47, 0x01, 0x45, 0xa3, 0x84, 0xe7, 0x60, 0x97, 0x30,
+ 0xfe, 0xfb, 0xe7, 0x80, 0xe0, 0x4b, 0xb7, 0xd7, 0x01, 0x24, 0x83, 0xc7,
+ 0x07, 0xfa, 0x8d, 0xd3, 0x83, 0x27, 0x84, 0x6d, 0x91, 0xff, 0x83, 0xa7,
+ 0x44, 0x0e, 0x99, 0xdb, 0x9d, 0xbf, 0x01, 0x00, 0x17, 0x43, 0x02, 0xfc,
+ 0xe7, 0x02, 0x83, 0xff, 0xb7, 0xd7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xf4,
+ 0x03, 0xc7, 0x17, 0x05, 0x2a, 0x84, 0x11, 0xc7, 0x03, 0xc7, 0x17, 0x00,
+ 0x89, 0x47, 0x63, 0x07, 0xf7, 0x04, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87,
+ 0x07, 0x87, 0x83, 0xa4, 0x87, 0x0f, 0x03, 0xa9, 0xc7, 0x0f, 0x01, 0x46,
+ 0xa6, 0x85, 0x4a, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80, 0x40, 0x54,
+ 0x22, 0x85, 0x97, 0xd0, 0xfe, 0xfb, 0xe7, 0x80, 0x20, 0xd7, 0x4a, 0x85,
+ 0x05, 0x46, 0xa6, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80, 0xc0, 0x52,
+ 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x07, 0xb7, 0x11, 0x45, 0x82, 0x97,
+ 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0x83, 0xfb, 0xb7, 0xe7, 0x00, 0x24,
+ 0x83, 0xd6, 0xc7, 0xc8, 0x85, 0x67, 0x13, 0x87, 0xf7, 0xb3, 0xe3, 0x94,
+ 0xe6, 0xfa, 0x37, 0x97, 0x01, 0x24, 0x13, 0x07, 0x07, 0x53, 0xba, 0x97,
+ 0x03, 0xa5, 0x07, 0xb2, 0x81, 0x45, 0x33, 0x25, 0xa0, 0x00, 0x97, 0xd0,
+ 0x00, 0xfc, 0xe7, 0x80, 0x60, 0xbb, 0x61, 0xb7, 0x17, 0x43, 0x02, 0xfc,
+ 0xe7, 0x02, 0xc3, 0xf5, 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0x37,
+ 0x11, 0xc5, 0xb7, 0xe7, 0x00, 0x24, 0x83, 0xc7, 0xc7, 0x84, 0xbd, 0xef,
+ 0x13, 0x84, 0x81, 0xe7, 0x03, 0x47, 0x84, 0x00, 0x85, 0x47, 0x63, 0x03,
+ 0xf7, 0x06, 0x03, 0x57, 0x24, 0x03, 0xb7, 0x67, 0x00, 0x40, 0x23, 0x98,
+ 0xe7, 0x18, 0x83, 0x57, 0x44, 0x03, 0x37, 0x67, 0x00, 0x40, 0x23, 0x14,
+ 0xf7, 0x20, 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80, 0x20, 0x34, 0x19, 0xc5,
+ 0xb7, 0xe7, 0x00, 0x24, 0x03, 0xc7, 0xc7, 0x84, 0x81, 0x47, 0x09, 0xeb,
+ 0x83, 0x46, 0x84, 0x00, 0x05, 0x47, 0x81, 0x47, 0x63, 0x84, 0xe6, 0x00,
+ 0x83, 0x57, 0xc4, 0x05, 0x37, 0xa7, 0x00, 0x40, 0x23, 0x12, 0xf7, 0x10,
+ 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0xb6, 0x35, 0xc1, 0x97, 0x70,
+ 0xff, 0xfb, 0xe7, 0x80, 0x60, 0xb7, 0x05, 0xc9, 0x17, 0x43, 0x02, 0xfc,
+ 0x67, 0x00, 0xc3, 0xef, 0xb7, 0x67, 0x00, 0x40, 0x23, 0x98, 0x07, 0x18,
+ 0x81, 0x47, 0x55, 0xb7, 0xb7, 0x67, 0x00, 0x40, 0x23, 0x98, 0x07, 0x18,
+ 0x13, 0x84, 0x81, 0xe7, 0x83, 0x46, 0x84, 0x00, 0x05, 0x47, 0x81, 0x47,
+ 0xe3, 0x95, 0xe6, 0xf8, 0x69, 0xb7, 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80,
+ 0x20, 0x2d, 0x31, 0xed, 0x83, 0x46, 0x84, 0x00, 0x05, 0x47, 0x81, 0x47,
+ 0x63, 0x84, 0xe6, 0x00, 0x83, 0x57, 0x44, 0x08, 0x37, 0x87, 0x00, 0x40,
+ 0x23, 0x14, 0xf7, 0x10, 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0xc3, 0xea,
+ 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0x40, 0xb1, 0x59, 0xf9, 0x97, 0x60,
+ 0xff, 0xfb, 0xe7, 0x80, 0xe0, 0x29, 0x19, 0xc5, 0xb7, 0xe7, 0x00, 0x24,
+ 0x03, 0xc7, 0xc7, 0x84, 0x81, 0x47, 0x09, 0xeb, 0x83, 0x46, 0x84, 0x00,
+ 0x05, 0x47, 0x81, 0x47, 0x63, 0x84, 0xe6, 0x00, 0x83, 0x57, 0x64, 0x07,
+ 0x37, 0x07, 0x01, 0x40, 0x23, 0x14, 0xf7, 0x10, 0x9d, 0xb7, 0xb7, 0xe7,
+ 0x00, 0x24, 0x03, 0xc7, 0xc7, 0x84, 0x81, 0x47, 0x55, 0xf7, 0x69, 0xbf,
+ 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0x03, 0xe1, 0x41, 0x11, 0x3a, 0x84,
+ 0x22, 0xe6, 0x26, 0xe4, 0x4a, 0xe2, 0x4e, 0xe0, 0xaa, 0x84, 0x36, 0x89,
+ 0x97, 0xa0, 0xfe, 0xfb, 0xe7, 0x80, 0x80, 0x66, 0xb7, 0x27, 0x02, 0x24,
+ 0x93, 0x87, 0x07, 0x6b, 0xa2, 0x97, 0x05, 0x67, 0xba, 0x97, 0x83, 0xc7,
+ 0x07, 0x8d, 0x63, 0x9d, 0x07, 0x18, 0x83, 0xc7, 0x04, 0x00, 0x63, 0x99,
+ 0x07, 0x18, 0xb7, 0xa7, 0x02, 0x24, 0x93, 0x89, 0x87, 0x54, 0x03, 0xc7,
+ 0x99, 0x05, 0x63, 0x01, 0x07, 0x18, 0x03, 0xca, 0xa9, 0x05, 0x03, 0xd6,
+ 0xa9, 0x0b, 0x37, 0xe7, 0x01, 0x24, 0x03, 0x55, 0x67, 0x5f, 0x93, 0x87,
+ 0x87, 0x54, 0x01, 0x47, 0xa1, 0x45, 0x63, 0x69, 0xa6, 0x22, 0x83, 0xd6,
+ 0xc7, 0x0a, 0x89, 0x07, 0x63, 0xf1, 0xa6, 0x26, 0x05, 0x07, 0xe3, 0x18,
+ 0xb7, 0xfe, 0x37, 0xcb, 0x02, 0x24, 0x53, 0x09, 0x00, 0xf0, 0x87, 0x27,
+ 0x8b, 0xb7, 0x9d, 0x46, 0x43, 0x79, 0xf9, 0x90, 0x13, 0x07, 0x07, 0x05,
+ 0x06, 0x07, 0x4e, 0x97, 0x83, 0x57, 0xc7, 0x00, 0x11, 0x8d, 0x53, 0x77,
+ 0x05, 0xd0, 0x91, 0x8f, 0xd3, 0xf7, 0x07, 0xd0, 0x93, 0x17, 0x3a, 0x00,
+ 0xb6, 0x97, 0x53, 0x77, 0xf7, 0x18, 0x93, 0x87, 0x87, 0x02, 0x86, 0x07,
+ 0xce, 0x97, 0x83, 0xd7, 0xc7, 0x00, 0x07, 0x26, 0x8b, 0xb7, 0x13, 0xf7,
+ 0xf7, 0x0f, 0xa1, 0x83, 0xd3, 0x77, 0x07, 0xd0, 0xd3, 0xf6, 0x07, 0xd0,
+ 0xc3, 0xf7, 0xc7, 0x68, 0x53, 0x79, 0xf9, 0x08, 0x43, 0x79, 0xe9, 0x78,
+ 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0x8a, 0xaa, 0x8a, 0x93, 0xda,
+ 0x8a, 0x40, 0x97, 0x70, 0xff, 0xfb, 0xe7, 0x80, 0xe0, 0x89, 0xc2, 0x0a,
+ 0x93, 0x07, 0x8a, 0x04, 0x13, 0x75, 0xf5, 0x0f, 0x93, 0xda, 0x0a, 0x41,
+ 0xd3, 0xf7, 0x0a, 0xd0, 0xd3, 0x74, 0x05, 0xd0, 0x07, 0x27, 0x8b, 0xb7,
+ 0x86, 0x07, 0xce, 0x97, 0x03, 0xdc, 0xc7, 0x00, 0xc3, 0xf4, 0xe4, 0x78,
+ 0xdc, 0x4c, 0x53, 0x74, 0x0c, 0xd0, 0xd3, 0x07, 0x00, 0xf0, 0x83, 0xd4,
+ 0xc7, 0x00, 0x53, 0xf4, 0x84, 0x08, 0x13, 0x0a, 0x0a, 0x05, 0x06, 0x0a,
+ 0x4e, 0x9a, 0x03, 0x5a, 0x4a, 0x00, 0xd3, 0x17, 0xf4, 0xa0, 0x99, 0xc3,
+ 0x53, 0x14, 0x84, 0x20, 0xb7, 0xcb, 0x02, 0x24, 0x83, 0xa7, 0x0b, 0xb7,
+ 0x0d, 0x45, 0x82, 0x97, 0xd3, 0x97, 0x14, 0xc0, 0xc2, 0x07, 0xc1, 0x83,
+ 0x63, 0x95, 0x87, 0x0b, 0xb7, 0x47, 0x01, 0x24, 0x93, 0x87, 0x07, 0x27,
+ 0x03, 0xd7, 0x67, 0x12, 0x83, 0xd6, 0xe7, 0x10, 0x89, 0x47, 0x7d, 0x17,
+ 0xb3, 0x97, 0xe7, 0x00, 0xd3, 0xf7, 0x07, 0xd0, 0x53, 0xf7, 0x16, 0xd0,
+ 0x53, 0x04, 0x00, 0xf0, 0xd3, 0xf7, 0x27, 0x11, 0x37, 0xca, 0x02, 0x24,
+ 0xd3, 0xf7, 0xe7, 0x18, 0xb7, 0xc7, 0x02, 0x24, 0x07, 0xa7, 0xc7, 0xb7,
+ 0x83, 0xa7, 0x0b, 0xb7, 0x25, 0x45, 0xd3, 0xf7, 0xe7, 0x00, 0xd3, 0x9a,
+ 0x17, 0xc0, 0x82, 0x97, 0x87, 0x27, 0x0a, 0xb8, 0xc2, 0x0a, 0x93, 0xda,
+ 0x0a, 0x01, 0x53, 0x74, 0xf4, 0x10, 0xd6, 0x94, 0xc2, 0x04, 0x23, 0x93,
+ 0x59, 0x0d, 0xc1, 0x80, 0xd3, 0x17, 0x14, 0xc0, 0x23, 0x92, 0xf9, 0x0c,
+ 0xb7, 0x07, 0x00, 0x40, 0x19, 0xec, 0x93, 0x87, 0xe7, 0x03, 0xca, 0x97,
+ 0x23, 0x90, 0x97, 0x00, 0x32, 0x64, 0xa2, 0x64, 0x12, 0x69, 0x82, 0x69,
+ 0x41, 0x01, 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0x23, 0xc7, 0x93, 0x87,
+ 0x07, 0x04, 0x32, 0x64, 0xa2, 0x64, 0x12, 0x69, 0x82, 0x69, 0xca, 0x97,
+ 0x23, 0x90, 0x97, 0x00, 0x41, 0x01, 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00,
+ 0x63, 0xc5, 0x93, 0x77, 0xfa, 0x0f, 0x13, 0x5a, 0x8a, 0x00, 0x87, 0x29,
+ 0x8b, 0xb7, 0xd3, 0xf7, 0x07, 0xd0, 0xd3, 0x76, 0x0a, 0xd0, 0x37, 0xca,
+ 0x02, 0x24, 0x07, 0x27, 0x0a, 0xb8, 0xc3, 0xf7, 0x37, 0x69, 0x53, 0x74,
+ 0xf4, 0x18, 0x53, 0x74, 0xe4, 0x10, 0x53, 0x1b, 0x14, 0xc0, 0x42, 0x0b,
+ 0x13, 0x5b, 0x0b, 0x01, 0x5a, 0x85, 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80,
+ 0xa0, 0x1a, 0xaa, 0x8a, 0x5a, 0x85, 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80,
+ 0xe0, 0x19, 0x93, 0xda, 0x8a, 0x00, 0xd3, 0x97, 0x04, 0xc0, 0xc2, 0x0a,
+ 0x13, 0x75, 0xf5, 0x0f, 0x93, 0xda, 0x0a, 0x01, 0x53, 0x74, 0x05, 0xd0,
+ 0xd3, 0xf7, 0x0a, 0xd0, 0xc2, 0x07, 0xc1, 0x87, 0x43, 0x74, 0x34, 0x79,
+ 0x63, 0xd7, 0x87, 0x03, 0x53, 0x74, 0x89, 0x18, 0xb7, 0x47, 0x01, 0x24,
+ 0x93, 0x87, 0x07, 0x27, 0x03, 0xd7, 0x67, 0x12, 0x83, 0xd6, 0xe7, 0x10,
+ 0x89, 0x47, 0x7d, 0x17, 0xb3, 0x97, 0xe7, 0x00, 0xd3, 0xf7, 0x07, 0xd0,
+ 0x53, 0xf7, 0x16, 0xd0, 0xd3, 0xf7, 0x87, 0x10, 0xc5, 0xbd, 0x53, 0x74,
+ 0x89, 0x10, 0xd9, 0xbf, 0x93, 0x17, 0x4a, 0x00, 0xce, 0x97, 0x83, 0xd7,
+ 0xa7, 0x06, 0x93, 0xf6, 0xf7, 0x0f, 0x37, 0xcb, 0x02, 0x24, 0xa1, 0x83,
+ 0x53, 0xf9, 0x06, 0xd0, 0xd3, 0xf7, 0x07, 0xd0, 0x07, 0x27, 0x8b, 0xb7,
+ 0x43, 0x79, 0xe9, 0x78, 0xe3, 0x0e, 0x07, 0xe0, 0x93, 0x07, 0xf7, 0x04,
+ 0x86, 0x07, 0xce, 0x97, 0x03, 0xd6, 0xc7, 0x00, 0x93, 0x06, 0xf7, 0xff,
+ 0x75, 0xbb, 0x93, 0x17, 0x3a, 0x00, 0xba, 0x97, 0x93, 0x87, 0x87, 0x02,
+ 0x86, 0x07, 0xce, 0x97, 0x83, 0xd7, 0xc7, 0x00, 0x7d, 0xbf, 0x01, 0x00,
+ 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0x63, 0xb3, 0xb7, 0x47, 0x01, 0x24,
+ 0x03, 0xd7, 0xc7, 0xe1, 0x89, 0x47, 0x2a, 0x84, 0xae, 0x84, 0x63, 0x19,
+ 0xf7, 0x00, 0xb7, 0xa7, 0x01, 0x24, 0x03, 0xa7, 0x47, 0x06, 0xfd, 0x57,
+ 0x63, 0x04, 0xf7, 0x04, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87,
+ 0x03, 0xa9, 0x87, 0x10, 0x83, 0xa9, 0xc7, 0x10, 0x01, 0x46, 0xca, 0x85,
+ 0x4e, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80, 0x60, 0x09, 0xa6, 0x85,
+ 0x22, 0x85, 0x97, 0xc0, 0x00, 0xfc, 0xe7, 0x80, 0x60, 0x75, 0x4e, 0x85,
+ 0x05, 0x46, 0xca, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80, 0xc0, 0x07,
+ 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x07, 0xb7, 0x15, 0x45, 0x82, 0x97,
+ 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0xe3, 0xaf, 0xb7, 0xc7, 0x02, 0x24,
+ 0x03, 0xa6, 0x47, 0xb7, 0xb7, 0x07, 0x00, 0x40, 0x93, 0x87, 0x07, 0x06,
+ 0x3e, 0x96, 0x09, 0x67, 0x13, 0x08, 0x05, 0x02, 0xaa, 0x87, 0x09, 0x8e,
+ 0x13, 0x07, 0xf7, 0xf1, 0x23, 0x90, 0xe7, 0x00, 0xb3, 0x06, 0xf6, 0x00,
+ 0x23, 0x90, 0xe6, 0x00, 0x89, 0x07, 0xe3, 0x99, 0x07, 0xff, 0x83, 0xc7,
+ 0xc5, 0x00, 0xb1, 0xcb, 0x83, 0xaf, 0x05, 0x00, 0x09, 0x63, 0x13, 0x88,
+ 0xe5, 0x00, 0x81, 0x47, 0x0d, 0x4f, 0x85, 0x4e, 0x09, 0x4e, 0x13, 0x03,
+ 0x03, 0xf0, 0x33, 0x17, 0xff, 0x00, 0x33, 0x77, 0xf7, 0x01, 0x33, 0x96,
+ 0xfe, 0x00, 0xb3, 0x16, 0xfe, 0x00, 0x79, 0x8e, 0xb3, 0x08, 0xf5, 0x00,
+ 0xf9, 0x8e, 0x89, 0x07, 0x7d, 0x47, 0x19, 0xc2, 0x03, 0x47, 0x08, 0x00,
+ 0x1a, 0x86, 0x81, 0xc6, 0x03, 0x46, 0x18, 0x00, 0x22, 0x06, 0x51, 0x8f,
+ 0x23, 0x90, 0xe8, 0x00, 0x03, 0xc7, 0xc5, 0x00, 0x09, 0x08, 0xe3, 0xc4,
+ 0xe7, 0xfc, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x07, 0xb7, 0x1d, 0x45,
+ 0x82, 0x87, 0x01, 0x00, 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0x43, 0xa4,
+ 0xb7, 0xa7, 0x02, 0x24, 0x03, 0xc7, 0x67, 0x60, 0x85, 0x47, 0x63, 0x0c,
+ 0xf7, 0x00, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xa7, 0x07, 0xb7, 0x21, 0x45,
+ 0x82, 0x97, 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0x63, 0xa4, 0x97, 0x60,
+ 0xff, 0xfb, 0xe7, 0x80, 0xe0, 0xe8, 0x75, 0xd1, 0xb7, 0xe7, 0x00, 0x24,
+ 0x83, 0xc7, 0xb7, 0xad, 0xe9, 0xff, 0xb7, 0xb7, 0x00, 0x24, 0x03, 0xd7,
+ 0x47, 0x33, 0xb7, 0x07, 0x01, 0x40, 0x23, 0x99, 0xe7, 0xdc, 0xe1, 0xb7,
+ 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0x43, 0x9f, 0xb7, 0xb7, 0x02, 0x24,
+ 0x93, 0x87, 0x87, 0xb4, 0x23, 0xae, 0xf1, 0x94, 0x37, 0x64, 0x01, 0x24,
+ 0x9d, 0x66, 0xb7, 0xb5, 0x02, 0x24, 0xb7, 0xb7, 0x02, 0x24, 0x13, 0x04,
+ 0x04, 0x40, 0x93, 0x87, 0xc7, 0x83, 0x93, 0x86, 0xf6, 0xbf, 0x11, 0x46,
+ 0x93, 0x85, 0x05, 0xfb, 0x05, 0x45, 0x5c, 0xc4, 0x97, 0xe0, 0xff, 0xfb,
+ 0xe7, 0x80, 0xc0, 0xe8, 0xc1, 0x66, 0xb7, 0xb5, 0x02, 0x24, 0xfd, 0x16,
+ 0x31, 0x46, 0x93, 0x85, 0x45, 0x98, 0x41, 0x45, 0x97, 0xe0, 0xff, 0xfb,
+ 0xe7, 0x80, 0x40, 0xe7, 0x37, 0xb7, 0x02, 0x24, 0x13, 0x07, 0x87, 0xb7,
+ 0xb7, 0xa7, 0x02, 0x24, 0x93, 0x87, 0x87, 0x54, 0x78, 0xc8, 0x37, 0xb7,
+ 0x02, 0x24, 0xa3, 0x80, 0x07, 0x0c, 0x23, 0x81, 0x07, 0x0c, 0x13, 0x07,
+ 0xc7, 0xc2, 0xb7, 0xb7, 0x02, 0x24, 0x18, 0xd4, 0x93, 0x87, 0x47, 0x2d,
+ 0x37, 0xb7, 0x02, 0x24, 0x7c, 0xc4, 0x13, 0x07, 0x87, 0x3b, 0xb7, 0xb7,
+ 0x02, 0x24, 0x18, 0xc0, 0x93, 0x87, 0x47, 0x37, 0x23, 0xaa, 0xf1, 0xa4,
+ 0x17, 0x43, 0x02, 0xfc, 0x67, 0x00, 0xc3, 0x97, 0x14, 0xa6, 0x02, 0x24,
+ 0x00, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3b, 0x00, 0x00, 0x00, 0x3f,
+ 0x00, 0x00, 0x80, 0x43,
+};
+
+static const u8 s5kjn5_data_bc98[] = {
+ 0x17, 0x43, 0x02, 0xfc, 0xe7, 0x02, 0x83, 0x82, 0x2a, 0x84, 0xef, 0xe0,
+ 0xbf, 0xb9, 0xa1, 0x47, 0x63, 0x06, 0xf4, 0x00, 0x17, 0x43, 0x02, 0xfc,
+ 0x67, 0x00, 0x83, 0x83, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xc7, 0x87, 0xb8,
+ 0xe5, 0xdb, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0x53, 0x05, 0x67,
+ 0x3e, 0x97, 0x83, 0x46, 0x07, 0xb9, 0xf9, 0xde, 0x83, 0xc7, 0x67, 0x3f,
+ 0xe1, 0xdf, 0x83, 0x57, 0x47, 0xb6, 0x93, 0xe7, 0x07, 0x20, 0x23, 0x12,
+ 0xf7, 0xb6, 0xe9, 0xb7, 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0x43, 0x7b,
+ 0x37, 0xc8, 0x02, 0x24, 0x13, 0x08, 0x48, 0xb8, 0x83, 0x48, 0x48, 0x00,
+ 0x2a, 0x8b, 0xae, 0x8b, 0x32, 0x84, 0xb6, 0x84, 0x3a, 0x89, 0xbe, 0x89,
+ 0x63, 0x80, 0x08, 0x02, 0xb7, 0xa7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x53,
+ 0x03, 0xc7, 0x07, 0xb9, 0x83, 0xc7, 0xb7, 0x92, 0x11, 0xc7, 0x03, 0x47,
+ 0x58, 0x00, 0xbd, 0x8b, 0x63, 0x06, 0xf7, 0x04, 0x37, 0xe8, 0x01, 0x24,
+ 0x13, 0x08, 0x08, 0x87, 0x83, 0x2a, 0x08, 0x12, 0x03, 0x2a, 0x48, 0x12,
+ 0x01, 0x46, 0xd6, 0x85, 0x52, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80,
+ 0xa0, 0xd0, 0xce, 0x87, 0x4a, 0x87, 0xa6, 0x86, 0x22, 0x86, 0xde, 0x85,
+ 0x5a, 0x85, 0x97, 0x40, 0x00, 0xfc, 0xe7, 0x80, 0xa0, 0x66, 0x05, 0x46,
+ 0xd6, 0x85, 0x52, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80, 0x80, 0xce,
+ 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0xc3, 0x76, 0x23, 0x15, 0x06, 0x00,
+ 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80, 0x80, 0xba, 0x01, 0xcd, 0xb7, 0x97,
+ 0x01, 0x24, 0x93, 0x87, 0x07, 0xd7, 0x03, 0xc7, 0xc7, 0x00, 0x59, 0xdf,
+ 0x7d, 0x17, 0x23, 0x86, 0xe7, 0x00, 0x59, 0xbf, 0x97, 0x60, 0xff, 0xfb,
+ 0xe7, 0x80, 0x80, 0xb5, 0x6d, 0xd1, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87,
+ 0x07, 0xd7, 0x03, 0xc7, 0xd7, 0x00, 0x3d, 0xdf, 0x7d, 0x17, 0xa3, 0x86,
+ 0xe7, 0x00, 0x9d, 0xbf, 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0x63, 0x6f,
+ 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87, 0x03, 0xaa, 0x87, 0x12,
+ 0x83, 0xa9, 0xc7, 0x12, 0xae, 0x84, 0x2a, 0x84, 0x32, 0x89, 0xd2, 0x85,
+ 0x01, 0x46, 0x4e, 0x85, 0x97, 0x30, 0x01, 0xfc, 0xe7, 0x80, 0x00, 0xc7,
+ 0xa6, 0x85, 0x4a, 0x86, 0x22, 0x85, 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80,
+ 0x20, 0x6a, 0xaa, 0x84, 0x05, 0x46, 0xd2, 0x85, 0x4e, 0x85, 0x97, 0x30,
+ 0x01, 0xfc, 0xe7, 0x80, 0x20, 0xc5, 0xb7, 0xc7, 0x02, 0x24, 0x93, 0x87,
+ 0x47, 0xb8, 0x03, 0xc7, 0xe7, 0x10, 0x15, 0xc3, 0x37, 0xa7, 0x01, 0x24,
+ 0x13, 0x07, 0x07, 0x53, 0x03, 0x46, 0x37, 0xb9, 0x89, 0x46, 0x63, 0x1a,
+ 0xd6, 0x00, 0x83, 0x56, 0x87, 0xba, 0xe1, 0x8e, 0x89, 0xc6, 0x93, 0x06,
+ 0x00, 0x40, 0x63, 0x07, 0xd4, 0x00, 0x26, 0x85, 0x17, 0x33, 0x02, 0xfc,
+ 0x67, 0x00, 0xe3, 0x6a, 0x83, 0x26, 0x47, 0xb3, 0x7d, 0x57, 0xe3, 0x88,
+ 0xe6, 0xfe, 0x03, 0xd7, 0x27, 0x11, 0x93, 0x96, 0x04, 0x01, 0xc1, 0x82,
+ 0x11, 0xe3, 0x36, 0x87, 0xba, 0x84, 0x23, 0x99, 0xd7, 0x10, 0xe1, 0xbf,
+ 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0x23, 0x65, 0x37, 0x29, 0x00, 0x24,
+ 0xb7, 0xa4, 0x01, 0x24, 0x13, 0x09, 0x09, 0x33, 0x93, 0x84, 0x04, 0x53,
+ 0x83, 0x47, 0x49, 0x1a, 0x03, 0xc7, 0x24, 0xb7, 0x2a, 0x84, 0xd9, 0x8f,
+ 0x63, 0x82, 0x07, 0x14, 0x83, 0x47, 0xe4, 0x00, 0x05, 0x47, 0x23, 0x05,
+ 0xe4, 0x00, 0x99, 0xe7, 0x83, 0x47, 0xc4, 0x00, 0xd1, 0xcf, 0x83, 0xc7,
+ 0x24, 0xb7, 0xc5, 0xcb, 0xb7, 0x6a, 0x01, 0x24, 0x13, 0x0a, 0x04, 0x03,
+ 0x03, 0x47, 0x04, 0x00, 0xa1, 0x69, 0xfd, 0x19, 0xa3, 0x01, 0xe4, 0x00,
+ 0x83, 0xa7, 0x0a, 0x4b, 0x23, 0x02, 0xe4, 0x00, 0x05, 0x67, 0xba, 0x97,
+ 0x83, 0xd7, 0x47, 0xe0, 0x23, 0x03, 0x04, 0x00, 0xb3, 0xf7, 0x37, 0x01,
+ 0x23, 0x1c, 0xf4, 0x00, 0x97, 0x40, 0xfd, 0xfb, 0xe7, 0x80, 0x00, 0x67,
+ 0x03, 0x58, 0x84, 0x01, 0xa3, 0x08, 0xa4, 0x00, 0x63, 0x01, 0x08, 0x06,
+ 0x37, 0x36, 0x05, 0x20, 0x13, 0x06, 0x06, 0xc8, 0x81, 0x46, 0x81, 0x47,
+ 0x41, 0x45, 0xb3, 0x05, 0xf4, 0x00, 0x33, 0x57, 0xf8, 0x40, 0x23, 0x80,
+ 0xd5, 0x02, 0x05, 0x8b, 0x85, 0x07, 0x11, 0xc7, 0x03, 0x47, 0x06, 0x00,
+ 0xba, 0x96, 0x93, 0xf6, 0xf6, 0x0f, 0x05, 0x06, 0xe3, 0x91, 0xa7, 0xfe,
+ 0x23, 0x08, 0xd4, 0x00, 0x83, 0x47, 0x49, 0x1a, 0x03, 0xc7, 0x24, 0xb7,
+ 0xd9, 0x8f, 0xc9, 0xc3, 0x23, 0x07, 0x04, 0x00, 0x23, 0x2e, 0x44, 0x01,
+ 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0xa3, 0x5b, 0x83, 0x47, 0xb4, 0x00,
+ 0xa5, 0xd7, 0x83, 0xc7, 0x24, 0xb7, 0xad, 0xf3, 0x39, 0xa0, 0x01, 0x48,
+ 0x45, 0xf1, 0x23, 0x1c, 0x34, 0x01, 0x4e, 0x88, 0x61, 0xbf, 0xb7, 0x6a,
+ 0x01, 0x24, 0x83, 0xa5, 0x0a, 0x4b, 0x85, 0x67, 0x13, 0x0a, 0x04, 0x03,
+ 0x93, 0x87, 0x07, 0xe1, 0x13, 0x06, 0x80, 0x07, 0xbe, 0x95, 0x52, 0x85,
+ 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80, 0x40, 0x0a, 0x21, 0xc9, 0x23, 0x05,
+ 0x04, 0x00, 0x03, 0x47, 0x24, 0x01, 0x83, 0x47, 0x64, 0x00, 0x83, 0x56,
+ 0x44, 0x01, 0xa3, 0x08, 0xe4, 0x00, 0x05, 0x47, 0x23, 0x1c, 0xd4, 0x00,
+ 0x23, 0x07, 0xe4, 0x00, 0xa3, 0x01, 0xf4, 0x00, 0x23, 0x03, 0x04, 0x00,
+ 0x23, 0x2e, 0x44, 0x01, 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0xa3, 0x54,
+ 0x83, 0xa5, 0x0a, 0x4b, 0x85, 0x67, 0x93, 0x87, 0x07, 0xe1, 0x13, 0x06,
+ 0x00, 0x0f, 0xbe, 0x95, 0x52, 0x85, 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80,
+ 0x20, 0x05, 0x9d, 0xb7, 0x83, 0x47, 0xa4, 0x00, 0xcd, 0xdb, 0xcd, 0xb5,
+ 0x37, 0xa5, 0x01, 0x24, 0x13, 0x05, 0x05, 0x0c, 0x97, 0x60, 0xff, 0xfb,
+ 0xe7, 0x80, 0x80, 0x43, 0x45, 0xbd, 0x01, 0x00, 0x17, 0x33, 0x02, 0xfc,
+ 0xe7, 0x02, 0x03, 0x4f, 0x83, 0x47, 0x15, 0x01, 0xa3, 0x04, 0x05, 0x00,
+ 0x2a, 0x84, 0x91, 0xef, 0x83, 0x57, 0x85, 0x01, 0x99, 0xeb, 0x83, 0x47,
+ 0xf5, 0x00, 0xa3, 0x07, 0x05, 0x00, 0xa3, 0x04, 0xf5, 0x00, 0x17, 0x33,
+ 0x02, 0xfc, 0x67, 0x00, 0xe3, 0x4e, 0x22, 0x85, 0x97, 0x90, 0xff, 0xfb,
+ 0xe7, 0x80, 0xc0, 0xc4, 0x83, 0x47, 0x34, 0x00, 0x03, 0x47, 0x64, 0x00,
+ 0x83, 0x46, 0x74, 0x00, 0xfd, 0x17, 0x05, 0x07, 0x93, 0xf7, 0xf7, 0x0f,
+ 0x23, 0x03, 0xe4, 0x00, 0xa3, 0x01, 0xf4, 0x00, 0x99, 0xc2, 0xa3, 0x03,
+ 0x04, 0x00, 0xb1, 0xef, 0x03, 0x47, 0x14, 0x01, 0x83, 0x56, 0x84, 0x01,
+ 0x83, 0x47, 0x54, 0x00, 0x23, 0x09, 0xe4, 0x00, 0x05, 0x47, 0x23, 0x1a,
+ 0xd4, 0x00, 0x23, 0x04, 0xe4, 0x00, 0x23, 0x1c, 0x04, 0x00, 0xa3, 0x08,
+ 0x04, 0x00, 0xc5, 0xe3, 0x83, 0x47, 0x14, 0x00, 0x13, 0xf7, 0x27, 0x00,
+ 0x19, 0xc7, 0x03, 0x47, 0x04, 0x00, 0x01, 0xc7, 0x03, 0x47, 0x24, 0x00,
+ 0x4d, 0xc3, 0x85, 0x8b, 0xa5, 0xcf, 0xb7, 0x27, 0x00, 0x24, 0x83, 0xc7,
+ 0x27, 0x4d, 0xd1, 0xd3, 0xb7, 0x67, 0x01, 0x24, 0x83, 0xa7, 0x07, 0x4b,
+ 0x05, 0x67, 0xba, 0x97, 0x23, 0x80, 0x07, 0xe0, 0x8d, 0xbf, 0x03, 0x47,
+ 0x04, 0x01, 0x5c, 0x4c, 0x93, 0x16, 0x17, 0x00, 0xb6, 0x97, 0x5c, 0xcc,
+ 0xb7, 0x27, 0x00, 0x24, 0x93, 0x87, 0x07, 0x33, 0x83, 0xc6, 0x37, 0x1a,
+ 0x89, 0xea, 0x83, 0x46, 0x64, 0x01, 0xa1, 0xda, 0xb7, 0xa6, 0x01, 0x24,
+ 0x83, 0xc6, 0x26, 0x0a, 0xb9, 0xf2, 0x83, 0xc7, 0x47, 0x1a, 0xa1, 0xf3,
+ 0x03, 0x46, 0x04, 0x00, 0xb7, 0x67, 0x01, 0x24, 0x83, 0xa5, 0x07, 0x4b,
+ 0x33, 0x06, 0xe6, 0x02, 0x85, 0x67, 0x93, 0x87, 0x07, 0xe1, 0xbe, 0x95,
+ 0x13, 0x05, 0x04, 0x03, 0x06, 0x06, 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80,
+ 0x60, 0xf2, 0x21, 0xbf, 0x85, 0x47, 0xa3, 0x04, 0xf4, 0x00, 0x17, 0x33,
+ 0x02, 0xfc, 0x67, 0x00, 0xe3, 0x3f, 0xfd, 0x17, 0xa3, 0x02, 0xf4, 0x00,
+ 0x22, 0x85, 0x97, 0x60, 0xff, 0xfb, 0xe7, 0x80, 0x60, 0x11, 0x17, 0x33,
+ 0x02, 0xfc, 0x67, 0x00, 0x63, 0x3e, 0x22, 0x85, 0x97, 0x60, 0xff, 0xfb,
+ 0xe7, 0x80, 0x40, 0x10, 0xdd, 0xb5, 0x01, 0x00, 0x89, 0x47, 0x63, 0x03,
+ 0xf5, 0x00, 0x82, 0x80, 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0xa3, 0x38,
+ 0xb7, 0x84, 0x01, 0x24, 0x93, 0x84, 0x04, 0xaa, 0x87, 0xa7, 0x04, 0x0a,
+ 0x41, 0x11, 0x37, 0xc5, 0x02, 0x24, 0x53, 0x96, 0x17, 0xc0, 0x74, 0x00,
+ 0x91, 0x45, 0x13, 0x05, 0xa5, 0xb8, 0x97, 0x50, 0xff, 0xfb, 0xe7, 0x80,
+ 0x60, 0xc3, 0x37, 0x19, 0x01, 0x40, 0x42, 0x05, 0x41, 0x81, 0x13, 0x0a,
+ 0x49, 0x24, 0xb7, 0x89, 0x01, 0x24, 0x37, 0xc4, 0x02, 0x24, 0xb7, 0xca,
+ 0x02, 0x24, 0x23, 0x17, 0xa1, 0x00, 0x93, 0x89, 0x89, 0xb1, 0x13, 0x04,
+ 0x24, 0xb9, 0x93, 0x8a, 0xaa, 0xbb, 0x33, 0x0a, 0x9a, 0x40, 0x06, 0x05,
+ 0x22, 0x95, 0x83, 0x55, 0x25, 0x00, 0x03, 0x56, 0xc1, 0x00, 0x03, 0x55,
+ 0x05, 0x00, 0x21, 0x04, 0x97, 0x60, 0x00, 0xfc, 0xe7, 0x80, 0x80, 0x82,
+ 0x42, 0x05, 0x41, 0x81, 0x23, 0x90, 0xa9, 0x00, 0xb3, 0x87, 0x49, 0x01,
+ 0x23, 0x90, 0xa7, 0x00, 0x89, 0x09, 0x63, 0x05, 0x54, 0x01, 0x03, 0x55,
+ 0xe1, 0x00, 0xf1, 0xb7, 0xb7, 0x89, 0x01, 0x24, 0x37, 0xca, 0x02, 0x24,
+ 0x13, 0x09, 0x09, 0x26, 0x93, 0x89, 0xa9, 0xaf, 0x13, 0x0a, 0x2a, 0xc3,
+ 0x83, 0x57, 0xe1, 0x00, 0x03, 0x56, 0xc1, 0x00, 0x85, 0x09, 0x86, 0x07,
+ 0xa2, 0x97, 0x83, 0xd5, 0x27, 0x00, 0x03, 0xd5, 0x07, 0x00, 0x09, 0x09,
+ 0x21, 0x04, 0x97, 0x50, 0x00, 0xfc, 0xe7, 0x80, 0x60, 0x7d, 0x13, 0x75,
+ 0xf5, 0x0f, 0xa3, 0x8f, 0xa9, 0xfe, 0x42, 0x05, 0x41, 0x81, 0x23, 0x1f,
+ 0xa9, 0xfe, 0xe3, 0x17, 0x44, 0xfd, 0xb7, 0x19, 0x01, 0x40, 0x37, 0x89,
+ 0x01, 0x24, 0x37, 0xca, 0x02, 0x24, 0x93, 0x89, 0x29, 0x1f, 0x13, 0x09,
+ 0xc9, 0xb2, 0x13, 0x0a, 0x2a, 0xc6, 0xb3, 0x89, 0x99, 0x40, 0x83, 0x57,
+ 0xe1, 0x00, 0x03, 0x56, 0xc1, 0x00, 0x86, 0x07, 0xa2, 0x97, 0x83, 0xd5,
+ 0x27, 0x00, 0x03, 0xd5, 0x07, 0x00, 0x21, 0x04, 0x97, 0x50, 0x00, 0xfc,
+ 0xe7, 0x80, 0x80, 0x78, 0x42, 0x05, 0x41, 0x81, 0x23, 0x10, 0xa9, 0x00,
+ 0xb3, 0x07, 0x39, 0x01, 0x23, 0x90, 0xa7, 0x00, 0x09, 0x09, 0xe3, 0x18,
+ 0x44, 0xfd, 0xb7, 0x17, 0x01, 0x40, 0x37, 0x89, 0x01, 0x24, 0xb7, 0xc9,
+ 0x02, 0x24, 0x93, 0x87, 0xa7, 0x20, 0x13, 0x09, 0x69, 0xb4, 0x93, 0x89,
+ 0x29, 0xc9, 0xb3, 0x84, 0x97, 0x40, 0x83, 0x57, 0xe1, 0x00, 0x03, 0x56,
+ 0xc1, 0x00, 0x86, 0x07, 0xa2, 0x97, 0x83, 0xd5, 0x27, 0x00, 0x03, 0xd5,
+ 0x07, 0x00, 0x21, 0x04, 0x97, 0x50, 0x00, 0xfc, 0xe7, 0x80, 0x80, 0x73,
+ 0x42, 0x05, 0x41, 0x81, 0x23, 0x10, 0xa9, 0x00, 0xb3, 0x07, 0x99, 0x00,
+ 0x23, 0x90, 0xa7, 0x00, 0x09, 0x09, 0xe3, 0x18, 0x34, 0xfd, 0x41, 0x01,
+ 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0x23, 0x24, 0x17, 0x33, 0x02, 0xfc,
+ 0xe7, 0x02, 0x03, 0x22, 0x2a, 0x84, 0xef, 0xe0, 0x3f, 0x98, 0x1d, 0xe0,
+ 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87, 0x07, 0x53, 0x0d, 0x67, 0x3e, 0x97,
+ 0x03, 0x27, 0x87, 0x6e, 0x05, 0x8b, 0x09, 0xcb, 0x37, 0x87, 0x00, 0x40,
+ 0x03, 0x57, 0x87, 0xf4, 0xa1, 0x46, 0x61, 0x8b, 0x63, 0x06, 0xd7, 0x00,
+ 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0x03, 0x21, 0x05, 0x67, 0xba, 0x97,
+ 0x23, 0x89, 0x07, 0xb6, 0xc5, 0xbf, 0x01, 0x00, 0x91, 0x47, 0x63, 0x03,
+ 0xf5, 0x00, 0x82, 0x80, 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0x03, 0x1d,
+ 0x97, 0x50, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0x63, 0x09, 0xc5, 0x17, 0x33,
+ 0x02, 0xfc, 0x67, 0x00, 0x23, 0x1e, 0x97, 0x50, 0xff, 0xfb, 0xe7, 0x80,
+ 0xe0, 0x5d, 0x65, 0xf9, 0xb7, 0xc7, 0x02, 0x24, 0x03, 0xd7, 0x67, 0xb8,
+ 0xb7, 0xf7, 0x00, 0x40, 0x23, 0x90, 0xe7, 0x3e, 0xf9, 0xbf, 0x01, 0x00,
+ 0x37, 0xc7, 0x02, 0x24, 0x13, 0x07, 0x47, 0xb8, 0x83, 0x45, 0x07, 0x00,
+ 0xb7, 0xa7, 0x02, 0x24, 0xb7, 0xd6, 0x01, 0x24, 0x03, 0xd6, 0x47, 0x60,
+ 0x23, 0xa8, 0xb6, 0xda, 0xb7, 0x67, 0x01, 0x24, 0xb7, 0xc6, 0x02, 0x24,
+ 0x93, 0x87, 0x07, 0x40, 0x93, 0x86, 0x86, 0xc9, 0xd4, 0xc7, 0x09, 0xca,
+ 0xb7, 0xb6, 0x02, 0x24, 0x37, 0x26, 0x00, 0x24, 0x93, 0x86, 0x86, 0x68,
+ 0x23, 0x20, 0xd6, 0xce, 0x23, 0x19, 0x07, 0x10, 0x37, 0xc7, 0x02, 0x24,
+ 0x13, 0x07, 0x07, 0x2a, 0xb7, 0xc6, 0x02, 0x24, 0x98, 0xd7, 0x37, 0xc7,
+ 0x02, 0x24, 0x93, 0x86, 0x46, 0x11, 0x13, 0x07, 0x87, 0x2e, 0x23, 0xa4,
+ 0xd1, 0xa4, 0xd8, 0xc3, 0x82, 0x80, 0x00, 0x00,
+};
+
+static const u8 s5kjn5_data_c398[] = {
+ 0x29, 0xe1, 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0x63, 0x12, 0xb7, 0x97,
+ 0x01, 0x24, 0x93, 0x87, 0x07, 0x53, 0x85, 0x64, 0xbe, 0x94, 0x03, 0xc7,
+ 0xe4, 0xb6, 0x8d, 0x66, 0x33, 0x84, 0xd7, 0x00, 0x83, 0x27, 0x84, 0x6e,
+ 0x05, 0xc3, 0x85, 0x8b, 0x89, 0xcb, 0xb7, 0x87, 0x00, 0x40, 0x83, 0xd7,
+ 0x87, 0xf4, 0x21, 0x47, 0xe1, 0x8b, 0x63, 0x8b, 0xe7, 0x02, 0x17, 0x33,
+ 0x02, 0xfc, 0x67, 0x00, 0x23, 0x11, 0x82, 0x80, 0x11, 0x47, 0xe3, 0x90,
+ 0xe7, 0xfe, 0xb7, 0xd7, 0x01, 0x24, 0x83, 0xc7, 0x07, 0xfa, 0xe5, 0xd7,
+ 0x97, 0xc0, 0x00, 0xfc, 0xe7, 0x80, 0x40, 0x1f, 0x37, 0x87, 0x02, 0x24,
+ 0x85, 0x46, 0x83, 0x27, 0x84, 0x6e, 0xa3, 0x00, 0xd7, 0x4e, 0x75, 0xbf,
+ 0x23, 0x89, 0x04, 0xb6, 0xe9, 0xb7, 0x01, 0x00, 0x09, 0xe5, 0xb7, 0xa7,
+ 0x01, 0x24, 0xa3, 0x83, 0x07, 0x0c, 0x49, 0xb0, 0x17, 0x33, 0x02, 0xfc,
+ 0xe7, 0x02, 0xe3, 0x08, 0x2a, 0x84, 0x2e, 0x8a, 0x97, 0x50, 0xff, 0xfb,
+ 0xe7, 0x80, 0x40, 0x4c, 0x1d, 0xc5, 0xb7, 0x97, 0x01, 0x24, 0x93, 0x87,
+ 0x07, 0x53, 0x05, 0x67, 0x3e, 0x97, 0x83, 0x46, 0x37, 0xb7, 0x05, 0x47,
+ 0x63, 0x85, 0xe6, 0x00, 0x83, 0xc7, 0x27, 0x41, 0x89, 0xcb, 0xb7, 0x87,
+ 0x02, 0x24, 0x03, 0xc7, 0xb7, 0x4a, 0x85, 0x47, 0xa2, 0x84, 0x63, 0x0f,
+ 0xf7, 0x02, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87, 0x83, 0xa9,
+ 0x87, 0x0a, 0x03, 0xa9, 0xc7, 0x0a, 0x01, 0x46, 0xce, 0x85, 0x4a, 0x85,
+ 0x97, 0x20, 0x01, 0xfc, 0xe7, 0x80, 0x40, 0x5d, 0xd2, 0x85, 0x22, 0x85,
+ 0x97, 0x80, 0x01, 0xfc, 0xe7, 0x80, 0x40, 0x1a, 0xaa, 0x84, 0x05, 0x46,
+ 0xce, 0x85, 0x4a, 0x85, 0x97, 0x20, 0x01, 0xfc, 0xe7, 0x80, 0x80, 0x5b,
+ 0x26, 0x85, 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0x43, 0x04, 0x01, 0x00,
+ 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0x03, 0x02, 0x97, 0x50, 0xff, 0xfb,
+ 0xe7, 0x80, 0x00, 0x44, 0x09, 0xcd, 0x97, 0x50, 0xff, 0xfb, 0xe7, 0x80,
+ 0x60, 0x46, 0x01, 0xe9, 0xb7, 0xa7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x53,
+ 0x83, 0xa7, 0x47, 0xb2, 0x95, 0xef, 0x97, 0x50, 0xff, 0xfb, 0xe7, 0x80,
+ 0xe0, 0x41, 0x0d, 0xed, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87,
+ 0x84, 0x57, 0xc0, 0x57, 0x01, 0x46, 0xa6, 0x85, 0x22, 0x85, 0x97, 0x20,
+ 0x01, 0xfc, 0xe7, 0x80, 0xe0, 0x55, 0x97, 0x50, 0x00, 0xfc, 0xe7, 0x80,
+ 0xa0, 0xd7, 0x05, 0x46, 0xa6, 0x85, 0x22, 0x85, 0x97, 0x20, 0x01, 0xfc,
+ 0xe7, 0x80, 0x80, 0x54, 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0x03, 0xfe,
+ 0x97, 0x50, 0xff, 0xfb, 0xe7, 0x80, 0xc0, 0x40, 0x61, 0xf1, 0x97, 0x60,
+ 0x01, 0xfc, 0xe7, 0x80, 0x60, 0xd7, 0xb7, 0xd7, 0x01, 0x24, 0x03, 0xd4,
+ 0x07, 0xed, 0xaa, 0x84, 0x97, 0xc0, 0x01, 0xfc, 0xe7, 0x80, 0x00, 0x51,
+ 0x33, 0x14, 0xa4, 0x00, 0x97, 0xc0, 0x01, 0xfc, 0xe7, 0x80, 0x00, 0x52,
+ 0x33, 0x54, 0xa4, 0x40, 0xe3, 0xfa, 0x84, 0xf8, 0xc1, 0xb7, 0x01, 0x00,
+ 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0xe3, 0xf5, 0x37, 0x84, 0x02, 0x24,
+ 0x13, 0x04, 0xc4, 0x49, 0x83, 0x57, 0x04, 0x00, 0xaa, 0x84, 0x2e, 0x89,
+ 0x91, 0xcf, 0x19, 0xe9, 0xb7, 0xa9, 0x01, 0x24, 0x93, 0x89, 0x09, 0x53,
+ 0x03, 0xc7, 0x09, 0xd0, 0x83, 0xc7, 0x19, 0xd0, 0x63, 0x08, 0xf7, 0x06,
+ 0xef, 0xc0, 0x9f, 0xaf, 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87,
+ 0x03, 0xaa, 0x07, 0x02, 0x83, 0xa9, 0x47, 0x02, 0x01, 0x46, 0xd2, 0x85,
+ 0x4e, 0x85, 0x97, 0x20, 0x01, 0xfc, 0xe7, 0x80, 0x20, 0x4b, 0xca, 0x85,
+ 0x26, 0x85, 0x97, 0xb0, 0x00, 0xfc, 0xe7, 0x80, 0xa0, 0x1a, 0x2a, 0x89,
+ 0x05, 0x46, 0xd2, 0x85, 0x4e, 0x85, 0x97, 0x20, 0x01, 0xfc, 0xe7, 0x80,
+ 0x60, 0x49, 0x83, 0x57, 0x04, 0x00, 0x85, 0xc3, 0x99, 0xe8, 0xb7, 0xa9,
+ 0x01, 0x24, 0x93, 0x89, 0x09, 0x53, 0x03, 0xc7, 0x09, 0xd0, 0x83, 0xc7,
+ 0x19, 0xd0, 0x63, 0x06, 0xf7, 0x00, 0x97, 0x70, 0x01, 0xfc, 0xe7, 0x80,
+ 0xe0, 0xda, 0x4a, 0x85, 0x17, 0x33, 0x02, 0xfc, 0x67, 0x00, 0xe3, 0xef,
+ 0xb7, 0xe7, 0x01, 0x24, 0x93, 0x87, 0x07, 0x87, 0x03, 0xaa, 0x07, 0x02,
+ 0xc4, 0x53, 0x01, 0x46, 0xd2, 0x85, 0x26, 0x85, 0x97, 0x20, 0x01, 0xfc,
+ 0xe7, 0x80, 0xc0, 0x44, 0xca, 0x85, 0x01, 0x45, 0x97, 0xb0, 0x00, 0xfc,
+ 0xe7, 0x80, 0x40, 0x14, 0x2a, 0x89, 0x05, 0x46, 0xd2, 0x85, 0x26, 0x85,
+ 0x97, 0x20, 0x01, 0xfc, 0xe7, 0x80, 0x00, 0x43, 0x83, 0x57, 0x04, 0x00,
+ 0xcd, 0xdf, 0x55, 0xb7, 0xb7, 0xc7, 0x02, 0x24, 0x83, 0xc6, 0x07, 0x39,
+ 0x37, 0xd7, 0x01, 0x24, 0xb7, 0x67, 0x01, 0x24, 0x23, 0x28, 0xd7, 0xda,
+ 0x37, 0xc7, 0x02, 0x24, 0x93, 0x87, 0x07, 0x40, 0x13, 0x07, 0x87, 0x39,
+ 0x98, 0xd7, 0x37, 0xc7, 0x02, 0x24, 0x13, 0x07, 0xc7, 0x40, 0xd8, 0xc7,
+ 0x82, 0x80, 0x01, 0x00, 0x17, 0x33, 0x02, 0xfc, 0xe7, 0x02, 0xc3, 0xe6,
+ 0xb7, 0xc6, 0x02, 0x24, 0xb7, 0x87, 0x03, 0x24, 0x93, 0x86, 0x06, 0x6b,
+ 0x37, 0xa7, 0x01, 0x24, 0x93, 0x87, 0x07, 0xff, 0x13, 0x07, 0x07, 0x53,
+ 0x95, 0x8f, 0x23, 0x2c, 0xd7, 0xb4, 0x23, 0x2e, 0xf7, 0xb4, 0x97, 0x20,
+ 0x01, 0xfc, 0xe7, 0x80, 0x20, 0xe0, 0x19, 0xc5, 0xef, 0xd0, 0xdf, 0xd3,
+ 0xef, 0xf0, 0x0f, 0xc4, 0x61, 0x39, 0x49, 0x3f, 0x17, 0x33, 0x02, 0xfc,
+ 0x67, 0x00, 0x03, 0xe5, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x10, 0xe5, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0xbe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+static const u8 s5kjn5_data_a548[] = {
+ 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f,
+ 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
+};
+
+static const u8 s5kjn5_data_bb84[] = {
+ 0x00, 0xab, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x10, 0x00,
+ 0x20, 0x00, 0x9a, 0x00, 0x9a, 0x00, 0x9a, 0x00, 0x9a, 0x00, 0x96, 0x00,
+ 0x96, 0x00, 0x96, 0x00, 0x96, 0x00, 0x93, 0x00, 0x93, 0x00, 0x93, 0x00,
+ 0x93, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x90, 0x00, 0x8d, 0x00,
+ 0x8d, 0x00, 0x8d, 0x00, 0x8d, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+ 0x3f, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
+ 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00,
+ 0x34, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00,
+ 0x06, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00,
+ 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00,
+ 0x06, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x1c, 0x00, 0x06, 0x00,
+ 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00,
+ 0x2a, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x0e, 0x00, 0x0e, 0x00, 0x0e, 0x00,
+ 0x0e, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x28, 0x00, 0x18, 0x00,
+ 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00,
+ 0x24, 0x00, 0x24, 0x00, 0x24, 0x00, 0x00, 0x4d,
+};
+
+static const u8 s5kjn5_data_5634[] = {
+ 0x04, 0x1d, 0x04, 0x20, 0x3c, 0x85, 0x02, 0x24, 0x3c, 0xe6, 0x03, 0x20,
+ 0xd8, 0x85, 0x02, 0x24, 0xd0, 0x6e, 0x03, 0x20, 0xc4, 0x8d, 0x02, 0x24,
+ 0x48, 0x77, 0x03, 0x20, 0x48, 0xc5, 0x02, 0x24, 0x68, 0x12, 0x03, 0x20,
+ 0xa0, 0xc4, 0x02, 0x24, 0xe8, 0xfe, 0x02, 0x20, 0x54, 0x91, 0x02, 0x24,
+ 0xa4, 0x62, 0x03, 0x20, 0x9c, 0x95, 0x02, 0x24, 0x90, 0x1b, 0x00, 0x20,
+ 0x28, 0x96, 0x02, 0x24, 0xc4, 0x46, 0x03, 0x20, 0xe8, 0x96, 0x02, 0x24,
+ 0x14, 0x27, 0x03, 0x20, 0xc4, 0x98, 0x02, 0x24, 0x30, 0x4c, 0x02, 0x20,
+ 0x74, 0x9b, 0x02, 0x24, 0xc8, 0x2c, 0x02, 0x20, 0xd0, 0x9b, 0x02, 0x24,
+ 0x48, 0x4f, 0x02, 0x20, 0x28, 0x9c, 0x02, 0x24, 0xb0, 0x41, 0x02, 0x20,
+ 0x3c, 0x9a, 0x02, 0x24, 0xc8, 0x1d, 0x04, 0x20, 0xfc, 0x9a, 0x02, 0x24,
+ 0xac, 0x7f, 0x04, 0x20, 0x8c, 0x86, 0x02, 0x24, 0x7c, 0x80, 0x04, 0x20,
+ 0x10, 0x86, 0x02, 0x24, 0xf8, 0x87, 0x03, 0x20, 0x7c, 0xac, 0x02, 0x24,
+ 0x10, 0x07, 0x03, 0x20, 0xe0, 0x8e, 0x02, 0x24, 0x14, 0x09, 0x00, 0x20,
+ 0x24, 0x95, 0x02, 0x24, 0x20, 0x46, 0x04, 0x20, 0x18, 0xc4, 0x02, 0x24,
+ 0xb0, 0x5b, 0x04, 0x20, 0x40, 0x88, 0x02, 0x24, 0x50, 0x5c, 0x03, 0x20,
+ 0x44, 0x8a, 0x02, 0x24, 0xa4, 0x5b, 0x03, 0x20, 0x50, 0x89, 0x02, 0x24,
+ 0x30, 0x6a, 0x04, 0x20, 0x14, 0x85, 0x02, 0x24, 0x90, 0xf8, 0x02, 0x20,
+ 0x44, 0xa1, 0x02, 0x24, 0x04, 0x54, 0x01, 0x20, 0x18, 0xa6, 0x02, 0x24,
+ 0x04, 0x53, 0x00, 0x20, 0xa0, 0xa7, 0x02, 0x24, 0xc8, 0x50, 0x02, 0x20,
+ 0xb8, 0xac, 0x02, 0x24, 0x2c, 0x88, 0x02, 0x20, 0xf0, 0xad, 0x02, 0x24,
+ 0x7c, 0x82, 0x01, 0x20, 0xc8, 0xb4, 0x02, 0x24, 0xac, 0xf3, 0x03, 0x20,
+ 0x64, 0xb5, 0x02, 0x24, 0x10, 0x81, 0x03, 0x20, 0x70, 0xb9, 0x02, 0x24,
+ 0xbc, 0xfd, 0x02, 0x20, 0xe4, 0xb9, 0x02, 0x24, 0xbc, 0xa5, 0x04, 0x20,
+ 0x7c, 0xba, 0x02, 0x24, 0xb8, 0x03, 0x03, 0x20, 0xe4, 0xbc, 0x02, 0x24,
+ 0x84, 0x24, 0x02, 0x20, 0xb0, 0xbd, 0x02, 0x24, 0x9c, 0x4c, 0x02, 0x20,
+ 0xd0, 0xbf, 0x02, 0x24, 0x0c, 0x22, 0x02, 0x20, 0x54, 0xbe, 0x02, 0x24,
+};
+
+static const u8 s5kjn5_data_bb8a[] = {
+ 0x01, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0xc8, 0x00, 0xc8, 0x00,
+ 0xc8, 0x00, 0xc8, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0xc4, 0x00,
+ 0xc2, 0x00, 0xc2, 0x00, 0xc2, 0x00, 0xc2, 0x00, 0xbe, 0x00, 0xbe, 0x00,
+ 0xbe, 0x00, 0xbe, 0x00, 0xbc, 0x00, 0xbc, 0x00, 0xbc, 0x00, 0xbc, 0x00,
+ 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x16, 0x00, 0x16, 0x00,
+ 0x16, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x14, 0x00, 0x14, 0x00,
+ 0x14, 0x00, 0x14, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00,
+ 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x19, 0x00, 0x19, 0x00,
+ 0x19, 0x00, 0x19, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00,
+ 0x3a, 0x00, 0x3a, 0x00, 0x3a, 0x00, 0x3a, 0x00, 0x0a, 0x00, 0x0a, 0x00,
+ 0x0a, 0x00, 0x0a, 0x00, 0x4b, 0x00, 0x4b, 0x00, 0x4b, 0x00, 0x4b, 0x00,
+ 0x02, 0x00, 0x06, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x2a, 0x00, 0x25, 0x00,
+ 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x23, 0x00, 0x23, 0x00,
+ 0x3f, 0x00, 0x31, 0x00, 0x21, 0x00, 0x21, 0x00, 0x0a, 0x00, 0x1b, 0x00,
+ 0x30, 0x00, 0x30, 0x00, 0x19, 0x00, 0x15, 0x00, 0x11, 0x00, 0x11, 0x00,
+ 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x19, 0x00,
+ 0x19, 0x00, 0x19, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x0a, 0x00,
+ 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
+};
+
+struct s5kjn5_init_op {
+ u64 val;
+ const u8 *burst;
+ u32 reg;
+ u16 burst_addr;
+ u16 burst_len;
+};
+
+/*
+ * First half of the vendor initialisation sequence, applied before the
+ * mandatory 5 ms settling delay.
+ */
+static const struct s5kjn5_init_op s5kjn5_init_ops_1[] = {
+ { .reg = CCI_REG16(0xfcfc), .val = 0x4000 },
+ { .reg = CCI_REG16(0x0000), .val = 0x000e },
+ { .reg = CCI_REG16(0x0000), .val = S5KJN5_CHIP_ID },
+ { .reg = CCI_REG16(0x6018), .val = 0x0001 },
+ { .reg = CCI_REG16(0x7002), .val = 0x0408 },
+ { .reg = CCI_REG16(0x6014), .val = 0x0001 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2002 },
+ { .reg = CCI_REG16(0x1e92), .val = 0x8000 },
+ { .reg = CCI_REG8(0x1e84), .val = 0x28 },
+ { .reg = CCI_REG8(0x1e85), .val = 0x2b },
+ { .reg = CCI_REG8(0x1e86), .val = 0x03 },
+ { .reg = CCI_REG8(0x1e87), .val = 0x20 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x4000 },
+ { .reg = CCI_REG16(0x7002), .val = 0x0008 },
+};
+
+/* Second half of the vendor initialisation sequence, applied after the delay. */
+static const struct s5kjn5_init_op s5kjn5_init_ops_2[] = {
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2000 },
+ { .reg = CCI_REG16(0xdcf0), .val = 0x0000 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2001 },
+ { .reg = CCI_REG16(0x3c60), .val = 0x0000 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2002 },
+ { .burst = s5kjn5_data_a614, .burst_addr = 0xa614,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_a614) },
+ { .burst = s5kjn5_data_bc98, .burst_addr = 0xbc98,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_bc98) },
+ { .burst = s5kjn5_data_c398, .burst_addr = 0xc398,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_c398) },
+ { .reg = CCI_REG8(0x849c), .val = 0x01 },
+ { .reg = CCI_REG8(0x849d), .val = 0x00 },
+ { .reg = CCI_REG8(0x849e), .val = 0x00 },
+ { .reg = CCI_REG8(0x849f), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a0), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a1), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a2), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a3), .val = 0x05 },
+ { .reg = CCI_REG8(0x84a4), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a5), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a6), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a7), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a8), .val = 0x00 },
+ { .reg = CCI_REG8(0x84a9), .val = 0x00 },
+ { .reg = CCI_REG8(0x84aa), .val = 0x00 },
+ { .reg = CCI_REG8(0x84ab), .val = 0x01 },
+ { .reg = CCI_REG8(0x84ac), .val = 0x01 },
+ { .reg = CCI_REG8(0x84ad), .val = 0xff },
+ { .reg = CCI_REG8(0x84b0), .val = 0x80 },
+ { .reg = CCI_REG8(0x84b1), .val = 0x89 },
+ { .reg = CCI_REG8(0x84b2), .val = 0x00 },
+ { .reg = CCI_REG8(0x84b3), .val = 0x00 },
+ { .reg = CCI_REG8(0x84b4), .val = 0x88 },
+ { .reg = CCI_REG8(0x84b5), .val = 0x89 },
+ { .reg = CCI_REG8(0x84b6), .val = 0x00 },
+ { .reg = CCI_REG8(0x84b7), .val = 0x00 },
+ { .reg = CCI_REG8(0x84b8), .val = 0xc0 },
+ { .reg = CCI_REG8(0x84b9), .val = 0x97 },
+ { .reg = CCI_REG8(0x84ba), .val = 0x00 },
+ { .reg = CCI_REG8(0x84bb), .val = 0x00 },
+ { .reg = CCI_REG8(0x84bc), .val = 0xa6 },
+ { .reg = CCI_REG8(0x84bd), .val = 0x0e },
+ { .reg = CCI_REG8(0x84be), .val = 0x00 },
+ { .reg = CCI_REG8(0x84bf), .val = 0x00 },
+ { .reg = CCI_REG8(0x84c0), .val = 0x22 },
+ { .reg = CCI_REG8(0x84c1), .val = 0x06 },
+ { .reg = CCI_REG8(0x84c2), .val = 0x00 },
+ { .reg = CCI_REG8(0x84c3), .val = 0x00 },
+ { .reg = CCI_REG8(0x84c4), .val = 0x00 },
+ { .reg = CCI_REG8(0x84c5), .val = 0x2d },
+ { .reg = CCI_REG8(0x84c8), .val = 0x54 },
+ { .reg = CCI_REG8(0x84c9), .val = 0xc6 },
+ { .reg = CCI_REG8(0x84ca), .val = 0x02 },
+ { .reg = CCI_REG8(0x84cb), .val = 0x24 },
+ { .reg = CCI_REG8(0x84cc), .val = 0x44 },
+ { .reg = CCI_REG8(0x84cd), .val = 0xab },
+ { .reg = CCI_REG8(0x84ce), .val = 0x02 },
+ { .reg = CCI_REG8(0x84cf), .val = 0x24 },
+ { .reg = CCI_REG8(0x84d0), .val = 0x44 },
+ { .reg = CCI_REG8(0x84d1), .val = 0xab },
+ { .reg = CCI_REG8(0x84d2), .val = 0x02 },
+ { .reg = CCI_REG8(0x84d3), .val = 0x24 },
+ { .reg = CCI_REG8(0x84d4), .val = 0x44 },
+ { .reg = CCI_REG8(0x84d5), .val = 0xab },
+ { .reg = CCI_REG8(0x84d6), .val = 0x02 },
+ { .reg = CCI_REG8(0x84d7), .val = 0x24 },
+ { .reg = CCI_REG8(0x84d8), .val = 0x44 },
+ { .reg = CCI_REG8(0x84d9), .val = 0xab },
+ { .reg = CCI_REG8(0x84da), .val = 0x02 },
+ { .reg = CCI_REG8(0x84db), .val = 0x24 },
+ { .reg = CCI_REG8(0x84dc), .val = 0x44 },
+ { .reg = CCI_REG8(0x84dd), .val = 0xab },
+ { .reg = CCI_REG8(0x84de), .val = 0x02 },
+ { .reg = CCI_REG8(0x84df), .val = 0x24 },
+ { .burst = s5kjn5_data_a548, .burst_addr = 0xa548,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_a548) },
+ { .burst = s5kjn5_data_bb84, .burst_addr = 0xbb84,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_bb84) },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2001 },
+ { .burst = s5kjn5_data_5634, .burst_addr = 0x5634,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_5634) },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2000 },
+ { .reg = CCI_REG8(0x2366), .val = 0x00 },
+ { .reg = CCI_REG8(0x2367), .val = 0x1c },
+ { .reg = CCI_REG8(0x2368), .val = 0x00 },
+ { .reg = CCI_REG8(0x2369), .val = 0x1c },
+ { .reg = CCI_REG16(0x238e), .val = 0x3f28 },
+ { .reg = CCI_REG16(0x2398), .val = 0x5037 },
+ { .reg = CCI_REG16(0x24b8), .val = 0x0101 },
+ { .reg = CCI_REG8(0x66e4), .val = 0x1e },
+ { .reg = CCI_REG8(0x66e5), .val = 0x8d },
+ { .reg = CCI_REG8(0x66e6), .val = 0x00 },
+ { .reg = CCI_REG8(0x66e7), .val = 0x00 },
+ { .reg = CCI_REG8(0x6874), .val = 0x00 },
+ { .reg = CCI_REG8(0x6875), .val = 0x00 },
+ { .reg = CCI_REG8(0x6876), .val = 0x00 },
+ { .reg = CCI_REG8(0x6877), .val = 0x00 },
+ { .reg = CCI_REG8(0x6878), .val = 0x00 },
+ { .reg = CCI_REG8(0x6879), .val = 0x00 },
+ { .reg = CCI_REG8(0x687a), .val = 0x00 },
+ { .reg = CCI_REG8(0x687b), .val = 0x00 },
+ { .reg = CCI_REG8(0x6884), .val = 0x01 },
+ { .reg = CCI_REG8(0x6885), .val = 0x00 },
+ { .reg = CCI_REG8(0x6886), .val = 0x01 },
+ { .reg = CCI_REG8(0x6887), .val = 0x00 },
+ { .reg = CCI_REG8(0x6888), .val = 0x01 },
+ { .reg = CCI_REG8(0x6889), .val = 0x00 },
+ { .reg = CCI_REG8(0x688a), .val = 0x01 },
+ { .reg = CCI_REG8(0x688b), .val = 0x00 },
+ { .reg = CCI_REG16(0x77d2), .val = 0x0000 },
+ { .reg = CCI_REG16(0x780a), .val = 0x0000 },
+ { .reg = CCI_REG8(0x793e), .val = 0x01 },
+ { .reg = CCI_REG8(0x793f), .val = 0x00 },
+ { .reg = CCI_REG8(0x7940), .val = 0x70 },
+ { .reg = CCI_REG8(0x7941), .val = 0x17 },
+ { .reg = CCI_REG8(0x795c), .val = 0x04 },
+ { .reg = CCI_REG8(0x795d), .val = 0x00 },
+ { .reg = CCI_REG8(0x795e), .val = 0x04 },
+ { .reg = CCI_REG8(0x795f), .val = 0x00 },
+ { .reg = CCI_REG8(0x7960), .val = 0x08 },
+ { .reg = CCI_REG8(0x7961), .val = 0x00 },
+ { .reg = CCI_REG8(0x7962), .val = 0x10 },
+ { .reg = CCI_REG8(0x7963), .val = 0x00 },
+ { .reg = CCI_REG8(0x7964), .val = 0x08 },
+ { .reg = CCI_REG8(0x7965), .val = 0x00 },
+ { .reg = CCI_REG8(0x7966), .val = 0x10 },
+ { .reg = CCI_REG8(0x7967), .val = 0x00 },
+ { .reg = CCI_REG8(0x7968), .val = 0x08 },
+ { .reg = CCI_REG8(0x7969), .val = 0x00 },
+ { .reg = CCI_REG8(0x796a), .val = 0x08 },
+ { .reg = CCI_REG8(0x796b), .val = 0x00 },
+ { .reg = CCI_REG8(0x796c), .val = 0x08 },
+ { .reg = CCI_REG8(0x796d), .val = 0x00 },
+ { .reg = CCI_REG8(0x796e), .val = 0x08 },
+ { .reg = CCI_REG8(0x796f), .val = 0x00 },
+ { .reg = CCI_REG8(0x7972), .val = 0x04 },
+ { .reg = CCI_REG8(0x7973), .val = 0x00 },
+ { .reg = CCI_REG8(0x7974), .val = 0x04 },
+ { .reg = CCI_REG8(0x7975), .val = 0x00 },
+ { .reg = CCI_REG8(0x7976), .val = 0x08 },
+ { .reg = CCI_REG8(0x7977), .val = 0x00 },
+ { .reg = CCI_REG8(0x7978), .val = 0x10 },
+ { .reg = CCI_REG8(0x7979), .val = 0x00 },
+ { .reg = CCI_REG8(0x797a), .val = 0x08 },
+ { .reg = CCI_REG8(0x797b), .val = 0x00 },
+ { .reg = CCI_REG8(0x797c), .val = 0x10 },
+ { .reg = CCI_REG8(0x797d), .val = 0x00 },
+ { .reg = CCI_REG8(0x797e), .val = 0x08 },
+ { .reg = CCI_REG8(0x797f), .val = 0x00 },
+ { .reg = CCI_REG8(0x7980), .val = 0x08 },
+ { .reg = CCI_REG8(0x7981), .val = 0x00 },
+ { .reg = CCI_REG8(0x7982), .val = 0x08 },
+ { .reg = CCI_REG8(0x7983), .val = 0x00 },
+ { .reg = CCI_REG8(0x7984), .val = 0x08 },
+ { .reg = CCI_REG8(0x7985), .val = 0x00 },
+ { .reg = CCI_REG16(0xb3ac), .val = 0x4000 },
+ { .reg = CCI_REG16(0xb3b4), .val = 0x2000 },
+ { .reg = CCI_REG16(0xb3b8), .val = 0x1000 },
+ { .reg = CCI_REG16(0xb3f8), .val = 0x8000 },
+ { .reg = CCI_REG16(0xb400), .val = 0x4000 },
+ { .reg = CCI_REG16(0xb404), .val = 0x2000 },
+ { .reg = CCI_REG16(0xbf70), .val = 0x3a46 },
+ { .reg = CCI_REG16(0xbf7c), .val = 0x0800 },
+ { .reg = CCI_REG16(0xc4a8), .val = 0x0000 },
+ { .reg = CCI_REG8(0xc4f8), .val = 0x00 },
+ { .reg = CCI_REG8(0xc4f9), .val = 0xa8 },
+ { .reg = CCI_REG8(0xc4fa), .val = 0x00 },
+ { .reg = CCI_REG8(0xc4fb), .val = 0x00 },
+ { .reg = CCI_REG16(0xd3da), .val = 0x0d00 },
+ { .reg = CCI_REG8(0xd3e0), .val = 0x0d },
+ { .reg = CCI_REG8(0xd3e1), .val = 0x00 },
+ { .reg = CCI_REG8(0xd3e2), .val = 0x0d },
+ { .reg = CCI_REG8(0xd3e3), .val = 0x00 },
+ { .reg = CCI_REG8(0xd3e4), .val = 0x0d },
+ { .reg = CCI_REG8(0xd3e5), .val = 0x00 },
+ { .reg = CCI_REG8(0xd3e6), .val = 0x0d },
+ { .reg = CCI_REG8(0xd3e7), .val = 0x00 },
+ { .reg = CCI_REG16(0xd3ea), .val = 0x0d00 },
+ { .reg = CCI_REG16(0xd3f4), .val = 0x301c },
+ { .reg = CCI_REG16(0xd3f8), .val = 0x301c },
+ { .reg = CCI_REG8(0xdd6c), .val = 0xb4 },
+ { .reg = CCI_REG8(0xdd6d), .val = 0x7e },
+ { .reg = CCI_REG8(0xdd6e), .val = 0xb6 },
+ { .reg = CCI_REG8(0xdd6f), .val = 0x7e },
+ { .reg = CCI_REG8(0xde34), .val = 0x00 },
+ { .reg = CCI_REG8(0xde35), .val = 0x00 },
+ { .reg = CCI_REG8(0xde36), .val = 0x92 },
+ { .reg = CCI_REG8(0xde37), .val = 0x31 },
+ { .reg = CCI_REG8(0xec42), .val = 0x01 },
+ { .reg = CCI_REG8(0xec43), .val = 0x00 },
+ { .reg = CCI_REG8(0xec44), .val = 0x01 },
+ { .reg = CCI_REG8(0xec45), .val = 0x00 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2001 },
+ { .reg = CCI_REG8(0x2542), .val = 0x20 },
+ { .reg = CCI_REG8(0x2543), .val = 0x20 },
+ { .reg = CCI_REG8(0x2544), .val = 0x20 },
+ { .reg = CCI_REG8(0x2545), .val = 0x18 },
+ { .reg = CCI_REG8(0x2554), .val = 0x00 },
+ { .reg = CCI_REG8(0x2555), .val = 0x00 },
+ { .reg = CCI_REG8(0x2556), .val = 0x00 },
+ { .reg = CCI_REG8(0x2557), .val = 0x00 },
+ { .reg = CCI_REG16(0x256e), .val = 0x0000 },
+ { .reg = CCI_REG16(0x25d2), .val = 0x0102 },
+ { .reg = CCI_REG16(0x2936), .val = 0x4400 },
+ { .reg = CCI_REG8(0x2a14), .val = 0x00 },
+ { .reg = CCI_REG8(0x2a15), .val = 0x02 },
+ { .reg = CCI_REG8(0x2a16), .val = 0xdf },
+ { .reg = CCI_REG8(0x2a17), .val = 0x03 },
+ { .reg = CCI_REG8(0x2a18), .val = 0x00 },
+ { .reg = CCI_REG8(0x2a19), .val = 0x02 },
+ { .reg = CCI_REG8(0x2a1a), .val = 0x00 },
+ { .reg = CCI_REG8(0x2a1b), .val = 0x02 },
+ { .reg = CCI_REG8(0x3252), .val = 0x8c },
+ { .reg = CCI_REG8(0x3253), .val = 0x00 },
+ { .reg = CCI_REG8(0x3254), .val = 0x8c },
+ { .reg = CCI_REG8(0x3255), .val = 0x00 },
+ { .reg = CCI_REG8(0x3256), .val = 0x8c },
+ { .reg = CCI_REG8(0x3257), .val = 0x00 },
+ { .reg = CCI_REG8(0x3258), .val = 0x87 },
+ { .reg = CCI_REG8(0x3259), .val = 0x00 },
+ { .reg = CCI_REG8(0x325a), .val = 0x82 },
+ { .reg = CCI_REG8(0x325b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3e1c), .val = 0x02 },
+ { .reg = CCI_REG8(0x3e1d), .val = 0x00 },
+ { .reg = CCI_REG8(0x3e1e), .val = 0x20 },
+ { .reg = CCI_REG8(0x3e1f), .val = 0x00 },
+ { .reg = CCI_REG16(0x5acc), .val = 0x6505 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x4000 },
+ { .reg = CCI_REG16(0x1858), .val = 0x123f },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2001 },
+ { .reg = CCI_REG16(0x3eb8), .val = 0x00ff },
+ { .reg = CCI_REG16(0x3ecc), .val = 0xfe03 },
+ { .reg = CCI_REG16(0x3f12), .val = 0x9001 },
+ { .reg = CCI_REG8(0x33e0), .val = 0x1e },
+ { .reg = CCI_REG8(0x33e1), .val = 0x00 },
+ { .reg = CCI_REG8(0x33e2), .val = 0x1e },
+ { .reg = CCI_REG8(0x33e3), .val = 0x00 },
+ { .reg = CCI_REG8(0x33e4), .val = 0x1e },
+ { .reg = CCI_REG8(0x33e5), .val = 0x00 },
+ { .reg = CCI_REG8(0x33e6), .val = 0x1e },
+ { .reg = CCI_REG8(0x33e7), .val = 0x00 },
+ { .reg = CCI_REG8(0x33e8), .val = 0x1e },
+ { .reg = CCI_REG8(0x33e9), .val = 0x00 },
+ { .reg = CCI_REG8(0x33ea), .val = 0x1e },
+ { .reg = CCI_REG8(0x33eb), .val = 0x00 },
+ { .reg = CCI_REG8(0x3440), .val = 0x05 },
+ { .reg = CCI_REG8(0x3441), .val = 0x00 },
+ { .reg = CCI_REG8(0x3442), .val = 0x05 },
+ { .reg = CCI_REG8(0x3443), .val = 0x00 },
+ { .reg = CCI_REG8(0x3444), .val = 0x05 },
+ { .reg = CCI_REG8(0x3445), .val = 0x00 },
+ { .reg = CCI_REG8(0x3446), .val = 0x05 },
+ { .reg = CCI_REG8(0x3447), .val = 0x00 },
+ { .reg = CCI_REG8(0x3448), .val = 0x05 },
+ { .reg = CCI_REG8(0x3449), .val = 0x00 },
+ { .reg = CCI_REG8(0x344a), .val = 0x05 },
+ { .reg = CCI_REG8(0x344b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3450), .val = 0x0a },
+ { .reg = CCI_REG8(0x3451), .val = 0x00 },
+ { .reg = CCI_REG8(0x3452), .val = 0x0a },
+ { .reg = CCI_REG8(0x3453), .val = 0x00 },
+ { .reg = CCI_REG8(0x3454), .val = 0x0a },
+ { .reg = CCI_REG8(0x3455), .val = 0x00 },
+ { .reg = CCI_REG8(0x3456), .val = 0x0a },
+ { .reg = CCI_REG8(0x3457), .val = 0x00 },
+ { .reg = CCI_REG8(0x3458), .val = 0x0a },
+ { .reg = CCI_REG8(0x3459), .val = 0x00 },
+ { .reg = CCI_REG8(0x345a), .val = 0x0a },
+ { .reg = CCI_REG8(0x345b), .val = 0x00 },
+ { .reg = CCI_REG8(0x34e0), .val = 0x14 },
+ { .reg = CCI_REG8(0x34e1), .val = 0x00 },
+ { .reg = CCI_REG8(0x34e2), .val = 0x14 },
+ { .reg = CCI_REG8(0x34e3), .val = 0x00 },
+ { .reg = CCI_REG8(0x34e4), .val = 0x14 },
+ { .reg = CCI_REG8(0x34e5), .val = 0x00 },
+ { .reg = CCI_REG8(0x34e6), .val = 0x14 },
+ { .reg = CCI_REG8(0x34e7), .val = 0x00 },
+ { .reg = CCI_REG8(0x34e8), .val = 0x14 },
+ { .reg = CCI_REG8(0x34e9), .val = 0x00 },
+ { .reg = CCI_REG8(0x34ea), .val = 0x14 },
+ { .reg = CCI_REG8(0x34eb), .val = 0x00 },
+ { .reg = CCI_REG8(0x3500), .val = 0x14 },
+ { .reg = CCI_REG8(0x3501), .val = 0x00 },
+ { .reg = CCI_REG8(0x3502), .val = 0x14 },
+ { .reg = CCI_REG8(0x3503), .val = 0x00 },
+ { .reg = CCI_REG8(0x3504), .val = 0x14 },
+ { .reg = CCI_REG8(0x3505), .val = 0x00 },
+ { .reg = CCI_REG8(0x3506), .val = 0x14 },
+ { .reg = CCI_REG8(0x3507), .val = 0x00 },
+ { .reg = CCI_REG8(0x3508), .val = 0x14 },
+ { .reg = CCI_REG8(0x3509), .val = 0x00 },
+ { .reg = CCI_REG8(0x350a), .val = 0x14 },
+ { .reg = CCI_REG8(0x350b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3520), .val = 0x14 },
+ { .reg = CCI_REG8(0x3521), .val = 0x00 },
+ { .reg = CCI_REG8(0x3522), .val = 0x14 },
+ { .reg = CCI_REG8(0x3523), .val = 0x00 },
+ { .reg = CCI_REG8(0x3524), .val = 0x14 },
+ { .reg = CCI_REG8(0x3525), .val = 0x00 },
+ { .reg = CCI_REG8(0x3526), .val = 0x14 },
+ { .reg = CCI_REG8(0x3527), .val = 0x00 },
+ { .reg = CCI_REG8(0x3528), .val = 0x14 },
+ { .reg = CCI_REG8(0x3529), .val = 0x00 },
+ { .reg = CCI_REG8(0x352a), .val = 0x14 },
+ { .reg = CCI_REG8(0x352b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3580), .val = 0x23 },
+ { .reg = CCI_REG8(0x3581), .val = 0x00 },
+ { .reg = CCI_REG8(0x3582), .val = 0x23 },
+ { .reg = CCI_REG8(0x3583), .val = 0x00 },
+ { .reg = CCI_REG8(0x3584), .val = 0x23 },
+ { .reg = CCI_REG8(0x3585), .val = 0x00 },
+ { .reg = CCI_REG8(0x3586), .val = 0x23 },
+ { .reg = CCI_REG8(0x3587), .val = 0x00 },
+ { .reg = CCI_REG8(0x3588), .val = 0x23 },
+ { .reg = CCI_REG8(0x3589), .val = 0x00 },
+ { .reg = CCI_REG8(0x358a), .val = 0x23 },
+ { .reg = CCI_REG8(0x358b), .val = 0x00 },
+ { .reg = CCI_REG8(0x35a0), .val = 0x19 },
+ { .reg = CCI_REG8(0x35a1), .val = 0x00 },
+ { .reg = CCI_REG8(0x35a2), .val = 0x19 },
+ { .reg = CCI_REG8(0x35a3), .val = 0x00 },
+ { .reg = CCI_REG8(0x35a4), .val = 0x19 },
+ { .reg = CCI_REG8(0x35a5), .val = 0x00 },
+ { .reg = CCI_REG8(0x35a6), .val = 0x19 },
+ { .reg = CCI_REG8(0x35a7), .val = 0x00 },
+ { .reg = CCI_REG8(0x35a8), .val = 0x19 },
+ { .reg = CCI_REG8(0x35a9), .val = 0x00 },
+ { .reg = CCI_REG8(0x35aa), .val = 0x19 },
+ { .reg = CCI_REG8(0x35ab), .val = 0x00 },
+ { .reg = CCI_REG8(0x35d0), .val = 0x1e },
+ { .reg = CCI_REG8(0x35d1), .val = 0x00 },
+ { .reg = CCI_REG8(0x35d2), .val = 0x1e },
+ { .reg = CCI_REG8(0x35d3), .val = 0x00 },
+ { .reg = CCI_REG8(0x35d4), .val = 0x1e },
+ { .reg = CCI_REG8(0x35d5), .val = 0x00 },
+ { .reg = CCI_REG8(0x35d6), .val = 0x1e },
+ { .reg = CCI_REG8(0x35d7), .val = 0x00 },
+ { .reg = CCI_REG8(0x35d8), .val = 0x1e },
+ { .reg = CCI_REG8(0x35d9), .val = 0x00 },
+ { .reg = CCI_REG8(0x35da), .val = 0x1e },
+ { .reg = CCI_REG8(0x35db), .val = 0x00 },
+ { .reg = CCI_REG8(0x35e0), .val = 0x1e },
+ { .reg = CCI_REG8(0x35e1), .val = 0x00 },
+ { .reg = CCI_REG8(0x35e2), .val = 0x1e },
+ { .reg = CCI_REG8(0x35e3), .val = 0x00 },
+ { .reg = CCI_REG8(0x35e4), .val = 0x1e },
+ { .reg = CCI_REG8(0x35e5), .val = 0x00 },
+ { .reg = CCI_REG8(0x35e6), .val = 0x1e },
+ { .reg = CCI_REG8(0x35e7), .val = 0x00 },
+ { .reg = CCI_REG8(0x35e8), .val = 0x1e },
+ { .reg = CCI_REG8(0x35e9), .val = 0x00 },
+ { .reg = CCI_REG8(0x35ea), .val = 0x1e },
+ { .reg = CCI_REG8(0x35eb), .val = 0x00 },
+ { .reg = CCI_REG8(0x35f0), .val = 0x1e },
+ { .reg = CCI_REG8(0x35f1), .val = 0x00 },
+ { .reg = CCI_REG8(0x35f2), .val = 0x1e },
+ { .reg = CCI_REG8(0x35f3), .val = 0x00 },
+ { .reg = CCI_REG8(0x35f4), .val = 0x1e },
+ { .reg = CCI_REG8(0x35f5), .val = 0x00 },
+ { .reg = CCI_REG8(0x35f6), .val = 0x1e },
+ { .reg = CCI_REG8(0x35f7), .val = 0x00 },
+ { .reg = CCI_REG8(0x35f8), .val = 0x1e },
+ { .reg = CCI_REG8(0x35f9), .val = 0x00 },
+ { .reg = CCI_REG8(0x35fa), .val = 0x1e },
+ { .reg = CCI_REG8(0x35fb), .val = 0x00 },
+ { .reg = CCI_REG8(0x3600), .val = 0x1e },
+ { .reg = CCI_REG8(0x3601), .val = 0x00 },
+ { .reg = CCI_REG8(0x3602), .val = 0x1e },
+ { .reg = CCI_REG8(0x3603), .val = 0x00 },
+ { .reg = CCI_REG8(0x3604), .val = 0x1e },
+ { .reg = CCI_REG8(0x3605), .val = 0x00 },
+ { .reg = CCI_REG8(0x3606), .val = 0x1e },
+ { .reg = CCI_REG8(0x3607), .val = 0x00 },
+ { .reg = CCI_REG8(0x3608), .val = 0x1e },
+ { .reg = CCI_REG8(0x3609), .val = 0x00 },
+ { .reg = CCI_REG8(0x360a), .val = 0x1e },
+ { .reg = CCI_REG8(0x360b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3610), .val = 0x1e },
+ { .reg = CCI_REG8(0x3611), .val = 0x00 },
+ { .reg = CCI_REG8(0x3612), .val = 0x1e },
+ { .reg = CCI_REG8(0x3613), .val = 0x00 },
+ { .reg = CCI_REG8(0x3614), .val = 0x1e },
+ { .reg = CCI_REG8(0x3615), .val = 0x00 },
+ { .reg = CCI_REG8(0x3616), .val = 0x1e },
+ { .reg = CCI_REG8(0x3617), .val = 0x00 },
+ { .reg = CCI_REG8(0x3618), .val = 0x1e },
+ { .reg = CCI_REG8(0x3619), .val = 0x00 },
+ { .reg = CCI_REG8(0x361a), .val = 0x1e },
+ { .reg = CCI_REG8(0x361b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3620), .val = 0x00 },
+ { .reg = CCI_REG8(0x3621), .val = 0x00 },
+ { .reg = CCI_REG8(0x3622), .val = 0x00 },
+ { .reg = CCI_REG8(0x3623), .val = 0x00 },
+ { .reg = CCI_REG8(0x3624), .val = 0x00 },
+ { .reg = CCI_REG8(0x3625), .val = 0x00 },
+ { .reg = CCI_REG8(0x3626), .val = 0x00 },
+ { .reg = CCI_REG8(0x3627), .val = 0x00 },
+ { .reg = CCI_REG8(0x3628), .val = 0x00 },
+ { .reg = CCI_REG8(0x3629), .val = 0x00 },
+ { .reg = CCI_REG8(0x362a), .val = 0x00 },
+ { .reg = CCI_REG8(0x362b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3630), .val = 0x0a },
+ { .reg = CCI_REG8(0x3631), .val = 0x00 },
+ { .reg = CCI_REG8(0x3632), .val = 0x0a },
+ { .reg = CCI_REG8(0x3633), .val = 0x00 },
+ { .reg = CCI_REG8(0x3634), .val = 0x0a },
+ { .reg = CCI_REG8(0x3635), .val = 0x00 },
+ { .reg = CCI_REG8(0x3636), .val = 0x0a },
+ { .reg = CCI_REG8(0x3637), .val = 0x00 },
+ { .reg = CCI_REG8(0x3638), .val = 0x0a },
+ { .reg = CCI_REG8(0x3639), .val = 0x00 },
+ { .reg = CCI_REG8(0x363a), .val = 0x0a },
+ { .reg = CCI_REG8(0x363b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3650), .val = 0x1e },
+ { .reg = CCI_REG8(0x3651), .val = 0x00 },
+ { .reg = CCI_REG8(0x3652), .val = 0x1e },
+ { .reg = CCI_REG8(0x3653), .val = 0x00 },
+ { .reg = CCI_REG8(0x3654), .val = 0x1e },
+ { .reg = CCI_REG8(0x3655), .val = 0x00 },
+ { .reg = CCI_REG8(0x3656), .val = 0x1e },
+ { .reg = CCI_REG8(0x3657), .val = 0x00 },
+ { .reg = CCI_REG8(0x3658), .val = 0x1e },
+ { .reg = CCI_REG8(0x3659), .val = 0x00 },
+ { .reg = CCI_REG8(0x365a), .val = 0x1e },
+ { .reg = CCI_REG8(0x365b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3660), .val = 0x1e },
+ { .reg = CCI_REG8(0x3661), .val = 0x00 },
+ { .reg = CCI_REG8(0x3662), .val = 0x1e },
+ { .reg = CCI_REG8(0x3663), .val = 0x00 },
+ { .reg = CCI_REG8(0x3664), .val = 0x1e },
+ { .reg = CCI_REG8(0x3665), .val = 0x00 },
+ { .reg = CCI_REG8(0x3666), .val = 0x1e },
+ { .reg = CCI_REG8(0x3667), .val = 0x00 },
+ { .reg = CCI_REG8(0x3668), .val = 0x1e },
+ { .reg = CCI_REG8(0x3669), .val = 0x00 },
+ { .reg = CCI_REG8(0x366a), .val = 0x1e },
+ { .reg = CCI_REG8(0x366b), .val = 0x00 },
+ { .reg = CCI_REG8(0x36a0), .val = 0x64 },
+ { .reg = CCI_REG8(0x36a1), .val = 0x00 },
+ { .reg = CCI_REG8(0x36a2), .val = 0x64 },
+ { .reg = CCI_REG8(0x36a3), .val = 0x00 },
+ { .reg = CCI_REG8(0x36a4), .val = 0x64 },
+ { .reg = CCI_REG8(0x36a5), .val = 0x00 },
+ { .reg = CCI_REG8(0x36a6), .val = 0x64 },
+ { .reg = CCI_REG8(0x36a7), .val = 0x00 },
+ { .reg = CCI_REG8(0x36a8), .val = 0x64 },
+ { .reg = CCI_REG8(0x36a9), .val = 0x00 },
+ { .reg = CCI_REG8(0x36aa), .val = 0x64 },
+ { .reg = CCI_REG8(0x36ab), .val = 0x00 },
+ { .reg = CCI_REG8(0x36c0), .val = 0x8c },
+ { .reg = CCI_REG8(0x36c1), .val = 0x00 },
+ { .reg = CCI_REG8(0x36c2), .val = 0x8c },
+ { .reg = CCI_REG8(0x36c3), .val = 0x00 },
+ { .reg = CCI_REG8(0x36c4), .val = 0x8c },
+ { .reg = CCI_REG8(0x36c5), .val = 0x00 },
+ { .reg = CCI_REG8(0x36c6), .val = 0x8c },
+ { .reg = CCI_REG8(0x36c7), .val = 0x00 },
+ { .reg = CCI_REG8(0x36c8), .val = 0x8c },
+ { .reg = CCI_REG8(0x36c9), .val = 0x00 },
+ { .reg = CCI_REG8(0x36ca), .val = 0x8c },
+ { .reg = CCI_REG8(0x36cb), .val = 0x00 },
+ { .reg = CCI_REG8(0x36e0), .val = 0x64 },
+ { .reg = CCI_REG8(0x36e1), .val = 0x00 },
+ { .reg = CCI_REG8(0x36e2), .val = 0x64 },
+ { .reg = CCI_REG8(0x36e3), .val = 0x00 },
+ { .reg = CCI_REG8(0x36e4), .val = 0x64 },
+ { .reg = CCI_REG8(0x36e5), .val = 0x00 },
+ { .reg = CCI_REG8(0x36e6), .val = 0x64 },
+ { .reg = CCI_REG8(0x36e7), .val = 0x00 },
+ { .reg = CCI_REG8(0x36e8), .val = 0x64 },
+ { .reg = CCI_REG8(0x36e9), .val = 0x00 },
+ { .reg = CCI_REG8(0x36ea), .val = 0x64 },
+ { .reg = CCI_REG8(0x36eb), .val = 0x00 },
+ { .reg = CCI_REG8(0x36f0), .val = 0x32 },
+ { .reg = CCI_REG8(0x36f1), .val = 0x00 },
+ { .reg = CCI_REG8(0x36f2), .val = 0x32 },
+ { .reg = CCI_REG8(0x36f3), .val = 0x00 },
+ { .reg = CCI_REG8(0x36f4), .val = 0x32 },
+ { .reg = CCI_REG8(0x36f5), .val = 0x00 },
+ { .reg = CCI_REG8(0x36f6), .val = 0x32 },
+ { .reg = CCI_REG8(0x36f7), .val = 0x00 },
+ { .reg = CCI_REG8(0x36f8), .val = 0x32 },
+ { .reg = CCI_REG8(0x36f9), .val = 0x00 },
+ { .reg = CCI_REG8(0x36fa), .val = 0x32 },
+ { .reg = CCI_REG8(0x36fb), .val = 0x00 },
+ { .reg = CCI_REG8(0x3700), .val = 0x32 },
+ { .reg = CCI_REG8(0x3701), .val = 0x00 },
+ { .reg = CCI_REG8(0x3702), .val = 0x32 },
+ { .reg = CCI_REG8(0x3703), .val = 0x00 },
+ { .reg = CCI_REG8(0x3704), .val = 0x32 },
+ { .reg = CCI_REG8(0x3705), .val = 0x00 },
+ { .reg = CCI_REG8(0x3706), .val = 0x32 },
+ { .reg = CCI_REG8(0x3707), .val = 0x00 },
+ { .reg = CCI_REG8(0x3708), .val = 0x32 },
+ { .reg = CCI_REG8(0x3709), .val = 0x00 },
+ { .reg = CCI_REG8(0x370a), .val = 0x32 },
+ { .reg = CCI_REG8(0x370b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3720), .val = 0x32 },
+ { .reg = CCI_REG8(0x3721), .val = 0x00 },
+ { .reg = CCI_REG8(0x3722), .val = 0x32 },
+ { .reg = CCI_REG8(0x3723), .val = 0x00 },
+ { .reg = CCI_REG8(0x3724), .val = 0x32 },
+ { .reg = CCI_REG8(0x3725), .val = 0x00 },
+ { .reg = CCI_REG8(0x3726), .val = 0x32 },
+ { .reg = CCI_REG8(0x3727), .val = 0x00 },
+ { .reg = CCI_REG8(0x3728), .val = 0x32 },
+ { .reg = CCI_REG8(0x3729), .val = 0x00 },
+ { .reg = CCI_REG8(0x372a), .val = 0x32 },
+ { .reg = CCI_REG8(0x372b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3730), .val = 0x32 },
+ { .reg = CCI_REG8(0x3731), .val = 0x00 },
+ { .reg = CCI_REG8(0x3732), .val = 0x32 },
+ { .reg = CCI_REG8(0x3733), .val = 0x00 },
+ { .reg = CCI_REG8(0x3734), .val = 0x32 },
+ { .reg = CCI_REG8(0x3735), .val = 0x00 },
+ { .reg = CCI_REG8(0x3736), .val = 0x32 },
+ { .reg = CCI_REG8(0x3737), .val = 0x00 },
+ { .reg = CCI_REG8(0x3738), .val = 0x32 },
+ { .reg = CCI_REG8(0x3739), .val = 0x00 },
+ { .reg = CCI_REG8(0x373a), .val = 0x32 },
+ { .reg = CCI_REG8(0x373b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3790), .val = 0x32 },
+ { .reg = CCI_REG8(0x3791), .val = 0x00 },
+ { .reg = CCI_REG8(0x3792), .val = 0x32 },
+ { .reg = CCI_REG8(0x3793), .val = 0x00 },
+ { .reg = CCI_REG8(0x3794), .val = 0x32 },
+ { .reg = CCI_REG8(0x3795), .val = 0x00 },
+ { .reg = CCI_REG8(0x3796), .val = 0x32 },
+ { .reg = CCI_REG8(0x3797), .val = 0x00 },
+ { .reg = CCI_REG8(0x3798), .val = 0x32 },
+ { .reg = CCI_REG8(0x3799), .val = 0x00 },
+ { .reg = CCI_REG8(0x379a), .val = 0x32 },
+ { .reg = CCI_REG8(0x379b), .val = 0x00 },
+ { .reg = CCI_REG8(0x37a0), .val = 0x50 },
+ { .reg = CCI_REG8(0x37a1), .val = 0x00 },
+ { .reg = CCI_REG8(0x37a2), .val = 0x50 },
+ { .reg = CCI_REG8(0x37a3), .val = 0x00 },
+ { .reg = CCI_REG8(0x37a4), .val = 0x50 },
+ { .reg = CCI_REG8(0x37a5), .val = 0x00 },
+ { .reg = CCI_REG8(0x37a6), .val = 0x50 },
+ { .reg = CCI_REG8(0x37a7), .val = 0x00 },
+ { .reg = CCI_REG8(0x37a8), .val = 0x50 },
+ { .reg = CCI_REG8(0x37a9), .val = 0x00 },
+ { .reg = CCI_REG8(0x37aa), .val = 0x50 },
+ { .reg = CCI_REG8(0x37ab), .val = 0x00 },
+ { .reg = CCI_REG8(0x37b0), .val = 0x64 },
+ { .reg = CCI_REG8(0x37b1), .val = 0x00 },
+ { .reg = CCI_REG8(0x37b2), .val = 0x64 },
+ { .reg = CCI_REG8(0x37b3), .val = 0x00 },
+ { .reg = CCI_REG8(0x37b4), .val = 0x64 },
+ { .reg = CCI_REG8(0x37b5), .val = 0x00 },
+ { .reg = CCI_REG8(0x37b6), .val = 0x64 },
+ { .reg = CCI_REG8(0x37b7), .val = 0x00 },
+ { .reg = CCI_REG8(0x37b8), .val = 0x64 },
+ { .reg = CCI_REG8(0x37b9), .val = 0x00 },
+ { .reg = CCI_REG8(0x37ba), .val = 0x64 },
+ { .reg = CCI_REG8(0x37bb), .val = 0x00 },
+ { .reg = CCI_REG8(0x37c0), .val = 0x50 },
+ { .reg = CCI_REG8(0x37c1), .val = 0x00 },
+ { .reg = CCI_REG8(0x37c2), .val = 0x50 },
+ { .reg = CCI_REG8(0x37c3), .val = 0x00 },
+ { .reg = CCI_REG8(0x37c4), .val = 0x50 },
+ { .reg = CCI_REG8(0x37c5), .val = 0x00 },
+ { .reg = CCI_REG8(0x37c6), .val = 0x50 },
+ { .reg = CCI_REG8(0x37c7), .val = 0x00 },
+ { .reg = CCI_REG8(0x37c8), .val = 0x50 },
+ { .reg = CCI_REG8(0x37c9), .val = 0x00 },
+ { .reg = CCI_REG8(0x37ca), .val = 0x50 },
+ { .reg = CCI_REG8(0x37cb), .val = 0x00 },
+ { .reg = CCI_REG8(0x37d0), .val = 0x32 },
+ { .reg = CCI_REG8(0x37d1), .val = 0x00 },
+ { .reg = CCI_REG8(0x37d2), .val = 0x32 },
+ { .reg = CCI_REG8(0x37d3), .val = 0x00 },
+ { .reg = CCI_REG8(0x37d4), .val = 0x32 },
+ { .reg = CCI_REG8(0x37d5), .val = 0x00 },
+ { .reg = CCI_REG8(0x37d6), .val = 0x32 },
+ { .reg = CCI_REG8(0x37d7), .val = 0x00 },
+ { .reg = CCI_REG8(0x37d8), .val = 0x32 },
+ { .reg = CCI_REG8(0x37d9), .val = 0x00 },
+ { .reg = CCI_REG8(0x37da), .val = 0x32 },
+ { .reg = CCI_REG8(0x37db), .val = 0x00 },
+ { .reg = CCI_REG8(0x37e0), .val = 0x1e },
+ { .reg = CCI_REG8(0x37e1), .val = 0x00 },
+ { .reg = CCI_REG8(0x37e2), .val = 0x1e },
+ { .reg = CCI_REG8(0x37e3), .val = 0x00 },
+ { .reg = CCI_REG8(0x37e4), .val = 0x1e },
+ { .reg = CCI_REG8(0x37e5), .val = 0x00 },
+ { .reg = CCI_REG8(0x37e6), .val = 0x1e },
+ { .reg = CCI_REG8(0x37e7), .val = 0x00 },
+ { .reg = CCI_REG8(0x37e8), .val = 0x1e },
+ { .reg = CCI_REG8(0x37e9), .val = 0x00 },
+ { .reg = CCI_REG8(0x37ea), .val = 0x1e },
+ { .reg = CCI_REG8(0x37eb), .val = 0x00 },
+ { .reg = CCI_REG8(0x37f0), .val = 0x1e },
+ { .reg = CCI_REG8(0x37f1), .val = 0x00 },
+ { .reg = CCI_REG8(0x37f2), .val = 0x1e },
+ { .reg = CCI_REG8(0x37f3), .val = 0x00 },
+ { .reg = CCI_REG8(0x37f4), .val = 0x1e },
+ { .reg = CCI_REG8(0x37f5), .val = 0x00 },
+ { .reg = CCI_REG8(0x37f6), .val = 0x1e },
+ { .reg = CCI_REG8(0x37f7), .val = 0x00 },
+ { .reg = CCI_REG8(0x37f8), .val = 0x1e },
+ { .reg = CCI_REG8(0x37f9), .val = 0x00 },
+ { .reg = CCI_REG8(0x37fa), .val = 0x1e },
+ { .reg = CCI_REG8(0x37fb), .val = 0x00 },
+ { .reg = CCI_REG8(0x3800), .val = 0x1e },
+ { .reg = CCI_REG8(0x3801), .val = 0x00 },
+ { .reg = CCI_REG8(0x3802), .val = 0x1e },
+ { .reg = CCI_REG8(0x3803), .val = 0x00 },
+ { .reg = CCI_REG8(0x3804), .val = 0x1e },
+ { .reg = CCI_REG8(0x3805), .val = 0x00 },
+ { .reg = CCI_REG8(0x3806), .val = 0x1e },
+ { .reg = CCI_REG8(0x3807), .val = 0x00 },
+ { .reg = CCI_REG8(0x3808), .val = 0x1e },
+ { .reg = CCI_REG8(0x3809), .val = 0x00 },
+ { .reg = CCI_REG8(0x380a), .val = 0x1e },
+ { .reg = CCI_REG8(0x380b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3810), .val = 0x1e },
+ { .reg = CCI_REG8(0x3811), .val = 0x00 },
+ { .reg = CCI_REG8(0x3812), .val = 0x1e },
+ { .reg = CCI_REG8(0x3813), .val = 0x00 },
+ { .reg = CCI_REG8(0x3814), .val = 0x1e },
+ { .reg = CCI_REG8(0x3815), .val = 0x00 },
+ { .reg = CCI_REG8(0x3816), .val = 0x1e },
+ { .reg = CCI_REG8(0x3817), .val = 0x00 },
+ { .reg = CCI_REG8(0x3818), .val = 0x1e },
+ { .reg = CCI_REG8(0x3819), .val = 0x00 },
+ { .reg = CCI_REG8(0x381a), .val = 0x1e },
+ { .reg = CCI_REG8(0x381b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3820), .val = 0x1e },
+ { .reg = CCI_REG8(0x3821), .val = 0x00 },
+ { .reg = CCI_REG8(0x3822), .val = 0x1e },
+ { .reg = CCI_REG8(0x3823), .val = 0x00 },
+ { .reg = CCI_REG8(0x3824), .val = 0x1e },
+ { .reg = CCI_REG8(0x3825), .val = 0x00 },
+ { .reg = CCI_REG8(0x3826), .val = 0x1e },
+ { .reg = CCI_REG8(0x3827), .val = 0x00 },
+ { .reg = CCI_REG8(0x3828), .val = 0x1e },
+ { .reg = CCI_REG8(0x3829), .val = 0x00 },
+ { .reg = CCI_REG8(0x382a), .val = 0x1e },
+ { .reg = CCI_REG8(0x382b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3870), .val = 0x32 },
+ { .reg = CCI_REG8(0x3871), .val = 0x00 },
+ { .reg = CCI_REG8(0x3872), .val = 0x32 },
+ { .reg = CCI_REG8(0x3873), .val = 0x00 },
+ { .reg = CCI_REG8(0x3874), .val = 0x32 },
+ { .reg = CCI_REG8(0x3875), .val = 0x00 },
+ { .reg = CCI_REG8(0x3876), .val = 0x32 },
+ { .reg = CCI_REG8(0x3877), .val = 0x00 },
+ { .reg = CCI_REG8(0x3878), .val = 0x32 },
+ { .reg = CCI_REG8(0x3879), .val = 0x00 },
+ { .reg = CCI_REG8(0x387a), .val = 0x32 },
+ { .reg = CCI_REG8(0x387b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3880), .val = 0x32 },
+ { .reg = CCI_REG8(0x3881), .val = 0x00 },
+ { .reg = CCI_REG8(0x3882), .val = 0x32 },
+ { .reg = CCI_REG8(0x3883), .val = 0x00 },
+ { .reg = CCI_REG8(0x3884), .val = 0x32 },
+ { .reg = CCI_REG8(0x3885), .val = 0x00 },
+ { .reg = CCI_REG8(0x3886), .val = 0x32 },
+ { .reg = CCI_REG8(0x3887), .val = 0x00 },
+ { .reg = CCI_REG8(0x3888), .val = 0x32 },
+ { .reg = CCI_REG8(0x3889), .val = 0x00 },
+ { .reg = CCI_REG8(0x388a), .val = 0x32 },
+ { .reg = CCI_REG8(0x388b), .val = 0x00 },
+ { .reg = CCI_REG8(0x3890), .val = 0x32 },
+ { .reg = CCI_REG8(0x3891), .val = 0x00 },
+ { .reg = CCI_REG8(0x3892), .val = 0x32 },
+ { .reg = CCI_REG8(0x3893), .val = 0x00 },
+ { .reg = CCI_REG8(0x3894), .val = 0x32 },
+ { .reg = CCI_REG8(0x3895), .val = 0x00 },
+ { .reg = CCI_REG8(0x3896), .val = 0x32 },
+ { .reg = CCI_REG8(0x3897), .val = 0x00 },
+ { .reg = CCI_REG8(0x3898), .val = 0x32 },
+ { .reg = CCI_REG8(0x3899), .val = 0x00 },
+ { .reg = CCI_REG8(0x389a), .val = 0x32 },
+ { .reg = CCI_REG8(0x389b), .val = 0x00 },
+ { .reg = CCI_REG8(0x38a0), .val = 0x32 },
+ { .reg = CCI_REG8(0x38a1), .val = 0x00 },
+ { .reg = CCI_REG8(0x38a2), .val = 0x32 },
+ { .reg = CCI_REG8(0x38a3), .val = 0x00 },
+ { .reg = CCI_REG8(0x38a4), .val = 0x32 },
+ { .reg = CCI_REG8(0x38a5), .val = 0x00 },
+ { .reg = CCI_REG8(0x38a6), .val = 0x32 },
+ { .reg = CCI_REG8(0x38a7), .val = 0x00 },
+ { .reg = CCI_REG8(0x38a8), .val = 0x32 },
+ { .reg = CCI_REG8(0x38a9), .val = 0x00 },
+ { .reg = CCI_REG8(0x38aa), .val = 0x32 },
+ { .reg = CCI_REG8(0x38ab), .val = 0x00 },
+ { .reg = CCI_REG8(0x38b0), .val = 0x32 },
+ { .reg = CCI_REG8(0x38b1), .val = 0x00 },
+ { .reg = CCI_REG8(0x38b2), .val = 0x32 },
+ { .reg = CCI_REG8(0x38b3), .val = 0x00 },
+ { .reg = CCI_REG8(0x38b4), .val = 0x32 },
+ { .reg = CCI_REG8(0x38b5), .val = 0x00 },
+ { .reg = CCI_REG8(0x38b6), .val = 0x32 },
+ { .reg = CCI_REG8(0x38b7), .val = 0x00 },
+ { .reg = CCI_REG8(0x38b8), .val = 0x32 },
+ { .reg = CCI_REG8(0x38b9), .val = 0x00 },
+ { .reg = CCI_REG8(0x38ba), .val = 0x32 },
+ { .reg = CCI_REG8(0x38bb), .val = 0x00 },
+ { .reg = CCI_REG8(0x320a), .val = 0xff },
+ { .reg = CCI_REG8(0x320b), .val = 0x03 },
+ { .reg = CCI_REG8(0x320c), .val = 0x07 },
+ { .reg = CCI_REG8(0x320d), .val = 0x00 },
+ { .reg = CCI_REG8(0x320e), .val = 0xff },
+ { .reg = CCI_REG8(0x320f), .val = 0x03 },
+ { .reg = CCI_REG8(0x3210), .val = 0x07 },
+ { .reg = CCI_REG8(0x3211), .val = 0x00 },
+ { .reg = CCI_REG16(0x321e), .val = 0x0000 },
+ { .reg = CCI_REG16(0x31d4), .val = 0x00ff },
+ { .reg = CCI_REG16(0x321a), .val = 0x0406 },
+ { .reg = CCI_REG8(0x3244), .val = 0x01 },
+ { .reg = CCI_REG8(0x3245), .val = 0x01 },
+ { .reg = CCI_REG8(0x3246), .val = 0x01 },
+ { .reg = CCI_REG8(0x3247), .val = 0x01 },
+ { .reg = CCI_REG8(0x3248), .val = 0x00 },
+ { .reg = CCI_REG8(0x3249), .val = 0x10 },
+ { .reg = CCI_REG16(0x3266), .val = 0x0100 },
+ { .reg = CCI_REG16(0x3330), .val = 0x0108 },
+ { .reg = CCI_REG8(0x3334), .val = 0x01 },
+ { .reg = CCI_REG8(0x3335), .val = 0x00 },
+ { .reg = CCI_REG8(0x3336), .val = 0x00 },
+ { .reg = CCI_REG8(0x3337), .val = 0x00 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2002 },
+ { .burst = s5kjn5_data_bb8a, .burst_addr = 0xbb8a,
+ .burst_len = ARRAY_SIZE(s5kjn5_data_bb8a) },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x4000 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x2000 },
+ { .reg = CCI_REG16(0x68d8), .val = 0x0100 },
+ { .reg = CCI_REG16(0xfcfc), .val = 0x4000 },
+ { .reg = CCI_REG16(0x0e04), .val = 0x0803 },
+ { .reg = CCI_REG8(0x0e10), .val = 0x01 },
+ { .reg = CCI_REG8(0x0e11), .val = 0x00 },
+ { .reg = CCI_REG8(0x0e12), .val = 0x00 },
+ { .reg = CCI_REG8(0x0e13), .val = 0x20 },
+ { .reg = CCI_REG8(0x0e14), .val = 0x00 },
+ { .reg = CCI_REG8(0x0e15), .val = 0x2b },
+ { .reg = CCI_REG8(0x0e16), .val = 0x02 },
+ { .reg = CCI_REG8(0x0e17), .val = 0x00 },
+ { .reg = CCI_REG8(0x0e18), .val = 0x00 },
+ { .reg = CCI_REG8(0x0e19), .val = 0x40 },
+ { .reg = CCI_REG8(0x0e1a), .val = 0x01 },
+ { .reg = CCI_REG8(0x0e1b), .val = 0x2b },
+ { .reg = CCI_REG8(0x0106), .val = 0x01 },
+ { .reg = CCI_REG8(0x0bcc), .val = 0x00 },
+ { .reg = CCI_REG8(0x0101), .val = 0x03 },
+};
+
+static const struct cci_reg_sequence s5kjn5_4096x3072_regs[] = {
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x6170), 0xffff },
+ { CCI_REG16(0x6180), 0x0000 },
+ { CCI_REG16(0x6190), 0x0000 },
+ { CCI_REG16(0x6200), 0xffff },
+ { CCI_REG16(0x6202), 0xffff },
+ { CCI_REG16(0x6204), 0x0000 },
+ { CCI_REG16(0x6206), 0x0000 },
+ { CCI_REG16(0x6208), 0x0000 },
+ { CCI_REG16(0xa100), 0xffff },
+ { CCI_REG16(0xa102), 0x0000 },
+ { CCI_REG16(0xa104), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x4001 },
+ { CCI_REG16(0x0102), 0xffff },
+ { CCI_REG16(0x0104), 0x0000 },
+ { CCI_REG16(0x0108), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x8100), 0xffff },
+ { CCI_REG16(0x8104), 0x0000 },
+ { CCI_REG16(0x8108), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0x7806), 0x0001 },
+ { CCI_REG16(0x7808), 0x2408 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0344), 0x0000 },
+ { CCI_REG16(0x0348), 0x201f },
+ { CCI_REG16(0x0346), 0x0000 },
+ { CCI_REG16(0x034a), 0x181f },
+ { CCI_REG16(0x034c), 0x1000 },
+ { CCI_REG16(0x034e), 0x0c00 },
+ { CCI_REG16(0x0350), 0x0008 },
+ { CCI_REG16(0x0352), 0x0008 },
+ { CCI_REG16(0x0340), 0x14b0 },
+ { CCI_REG16(0x0342), 0x16a8 },
+ { CCI_REG16(0x0136), 0x1300 },
+ { CCI_REG16(0x013e), 0x00c8 },
+ { CCI_REG16(0x0304), 0x0002 },
+ { CCI_REG16(0x0306), 0x00c0 },
+ { CCI_REG16(0x030c), 0x0000 },
+ { CCI_REG16(0x030e), 0x0003 },
+ { CCI_REG16(0x0310), 0x00c3 },
+ { CCI_REG16(0x0312), 0x0000 },
+ { CCI_REG16(0x031a), 0x0003 },
+ { CCI_REG16(0x031c), 0x0032 },
+ { CCI_REG16(0x031e), 0x0002 },
+ { CCI_REG16(0x0202), 0x0014 },
+ { CCI_REG16(0x0226), 0x0014 },
+ { CCI_REG16(0x022c), 0x0014 },
+ { CCI_REG16(0x0702), 0x0000 },
+ { CCI_REG16(0x0704), 0x0000 },
+ { CCI_REG16(0x0114), 0x0301 },
+ { CCI_REG16(0x0118), 0x0004 },
+ { CCI_REG16(0x011a), 0x0001 },
+ { CCI_REG16(0x011c), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xb176), 0x0602 },
+ { CCI_REG16(0xb178), 0x0000 },
+ { CCI_REG16(0x7996), 0x0101 },
+ { CCI_REG16(0x7994), 0x2020 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0900), 0x2222 },
+ { CCI_REG16(0x0380), 0x0002 },
+ { CCI_REG16(0x0382), 0x0002 },
+ { CCI_REG16(0x0384), 0x0002 },
+ { CCI_REG16(0x0386), 0x0002 },
+ { CCI_REG16(0x040c), 0x0000 },
+ { CCI_REG16(0x0400), 0x1010 },
+ { CCI_REG16(0x0408), 0x0100 },
+ { CCI_REG16(0x040a), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xd1f6), 0x3a00 },
+ { CCI_REG16(0xd20c), 0x0908 },
+ { CCI_REG16(0xd314), 0x2002 },
+ { CCI_REG16(0xd27a), 0x0500 },
+ { CCI_REG16(0xd3f0), 0xb01c },
+ { CCI_REG16(0xd410), 0x4802 },
+ { CCI_REG16(0xd426), 0xd204 },
+ { CCI_REG16(0xd43c), 0x0140 },
+ { CCI_REG16(0xd412), 0xd204 },
+ { CCI_REG16(0xd428), 0xea0a },
+ { CCI_REG16(0xd43e), 0x0140 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0260), 0x0001 },
+ { CCI_REG16(0x0262), 0x0000 },
+ { CCI_REG16(0x0264), 0x0106 },
+ { CCI_REG16(0x0266), 0x0700 },
+ { CCI_REG16(0x0112), 0x0a0a },
+ { CCI_REG16(0x0270), 0x2b2b },
+ { CCI_REG16(0x0272), 0x2b10 },
+ { CCI_REG16(0x0274), 0x302b },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x44c6), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0b02), 0x0102 },
+ { CCI_REG16(0x0720), 0x0001 },
+ { CCI_REG16(0x0722), 0x0800 },
+ { CCI_REG16(0x0724), 0x0000 },
+ { CCI_REG16(0x0728), 0x0000 },
+ { CCI_REG16(0x072a), 0x0000 },
+ { CCI_REG16(0x072c), 0x0000 },
+ { CCI_REG16(0x072e), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x3132), 0x0200 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x021e), 0x0000 },
+ { CCI_REG16(0x0228), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x31d0), 0x0000 },
+ { CCI_REG16(0x5a70), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xdc94), 0x0103 },
+ { CCI_REG16(0xef80), 0x0000 },
+ { CCI_REG16(0x23f0), 0x0001 },
+ { CCI_REG16(0xf3e4), 0x0300 },
+ { CCI_REG16(0xf288), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x2a30), 0x01ff },
+ { CCI_REG16(0x4270), 0x0000 },
+ { CCI_REG16(0x29ba), 0x2000 },
+ { CCI_REG16(0x29a8), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0b04), 0x0001 },
+ { CCI_REG16(0x0b06), 0x0101 },
+ { CCI_REG16(0x0b08), 0x0100 },
+ { CCI_REG16(0x0b0a), 0x0101 },
+ { CCI_REG16(0x0b0c), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xc4e0), 0x0100 },
+ { CCI_REG16(0xc4f6), 0x0000 },
+ { CCI_REG16(0xc4e2), 0x0000 },
+ { CCI_REG16(0xc53c), 0x0500 },
+ { CCI_REG16(0xc544), 0x0005 },
+ { CCI_REG16(0xc53e), 0x0000 },
+ { CCI_REG16(0xb23c), 0x6060 },
+ { CCI_REG16(0xb242), 0x6060 },
+ { CCI_REG16(0xc554), 0x0010 },
+ { CCI_REG16(0xc556), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x2920), 0x0100 },
+ { CCI_REG16(0x31f8), 0x0000 },
+ { CCI_REG16(0x31fa), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xd856), 0x0507 },
+ { CCI_REG16(0xd6d4), 0x0000 },
+ { CCI_REG16(0x799a), 0x0000 },
+ { CCI_REG16(0xd8a2), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x020a), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0x78c0), 0x0101 },
+ { CCI_REG16(0x22c2), 0x0600 },
+ { CCI_REG16(0x22c4), 0xff1f },
+ { CCI_REG16(0x22ec), 0x1f00 },
+ { CCI_REG16(0x2306), 0xff3f },
+ { CCI_REG16(0x2314), 0xff00 },
+ { CCI_REG16(0x2354), 0x0300 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0936), 0x0000 },
+ { CCI_REG16(0x0c40), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0x68de), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x2540), 0x0000 },
+ { CCI_REG16(0x25e0), 0x0000 },
+ { CCI_REG16(0x25e2), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xd718), 0x0002 },
+ { CCI_REG16(0xbf30), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x3c42), 0x0000 },
+ { CCI_REG16(0x3c46), 0xeb05 },
+ { CCI_REG16(0x3c52), 0x4006 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xd326), 0x0110 },
+ { CCI_REG16(0xd3ec), 0xb01c },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x195e), 0x0100 },
+ { CCI_REG16(0x1966), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0086), 0x1400 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xe980), 0x9e04 },
+ { CCI_REG16(0xc4d8), 0x2000 },
+ { CCI_REG16(0x795a), 0x2000 },
+ { CCI_REG16(0x7970), 0x2000 },
+ { CCI_REG16(0xfcfc), 0x2002 },
+ { CCI_REG16(0x849e), 0x0000 },
+ { CCI_REG16(0x84a0), 0x0000 },
+ { CCI_REG16(0x84a2), 0x0005 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x2bb2), 0x1000 },
+ { CCI_REG16(0x2d32), 0x0010 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0x703c), 0x0101 },
+ { CCI_REG16(0x7046), 0x7f02 },
+ { CCI_REG16(0x7058), 0x8002 },
+ { CCI_REG16(0x71d4), 0x3f00 },
+ { CCI_REG16(0x71d6), 0x3d00 },
+ { CCI_REG16(0x71d8), 0x84f3 },
+ { CCI_REG16(0x71da), 0x0040 },
+ { CCI_REG16(0x7048), 0x1f02 },
+ { CCI_REG16(0x705a), 0x2002 },
+ { CCI_REG16(0x7274), 0x0c00 },
+ { CCI_REG16(0x7276), 0x0b00 },
+ { CCI_REG16(0x7278), 0x36d2 },
+ { CCI_REG16(0x727a), 0x0040 },
+ { CCI_REG16(0x727c), 0x0000 },
+ { CCI_REG16(0x727e), 0x0000 },
+ { CCI_REG16(0x7280), 0x0000 },
+ { CCI_REG16(0x7282), 0x0000 },
+ { CCI_REG16(0x703e), 0x0100 },
+ { CCI_REG16(0x704a), 0x000a },
+ { CCI_REG16(0x705c), 0x010a },
+ { CCI_REG16(0x7314), 0x2e00 },
+ { CCI_REG16(0x7316), 0x3000 },
+ { CCI_REG16(0x7318), 0x9efd },
+ { CCI_REG16(0x731a), 0x0040 },
+ { CCI_REG16(0xbedc), 0xc526 },
+ { CCI_REG16(0xbede), 0x903e },
+ { CCI_REG16(0xbee0), 0xc00f },
+ { CCI_REG16(0xbee2), 0x0008 },
+ { CCI_REG16(0xbee4), 0x0c00 },
+ { CCI_REG16(0xbee6), 0x8000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x2a54), 0x0000 },
+ { CCI_REG16(0x2a56), 0x0400 },
+ { CCI_REG16(0x2a42), 0x0100 },
+ { CCI_REG16(0x2a44), 0x3907 },
+ { CCI_REG16(0x2a46), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xd704), 0x0278 },
+ { CCI_REG16(0x7a0e), 0x0f00 },
+ { CCI_REG16(0x7a6e), 0x1900 },
+ { CCI_REG16(0x7a86), 0x1900 },
+ { CCI_REG16(0x8c9e), 0x3500 },
+ { CCI_REG16(0x8cce), 0x9600 },
+ { CCI_REG16(0x7a10), 0x0f00 },
+ { CCI_REG16(0x7a70), 0x1900 },
+ { CCI_REG16(0x7a88), 0x1900 },
+ { CCI_REG16(0x8ca0), 0x3500 },
+ { CCI_REG16(0x8cd0), 0x9600 },
+ { CCI_REG16(0xb224), 0x0103 },
+ { CCI_REG16(0xb226), 0x0000 },
+ { CCI_REG16(0xb220), 0x0103 },
+ { CCI_REG16(0x7a12), 0x0f00 },
+ { CCI_REG16(0x7a72), 0x1900 },
+ { CCI_REG16(0x7a8a), 0x1900 },
+ { CCI_REG16(0x8ca2), 0x5000 },
+ { CCI_REG16(0x8cd2), 0xbe00 },
+ { CCI_REG16(0x7ee6), 0x2c00 },
+ { CCI_REG16(0x7ef2), 0x2c00 },
+ { CCI_REG16(0x7efe), 0x6400 },
+ { CCI_REG16(0x7f0a), 0x5800 },
+ { CCI_REG16(0x8d0e), 0x0000 },
+ { CCI_REG16(0x9032), 0x0000 },
+ { CCI_REG16(0x903e), 0x0000 },
+ { CCI_REG16(0x7a14), 0x0f00 },
+ { CCI_REG16(0x7a74), 0x1900 },
+ { CCI_REG16(0x7a8c), 0x1900 },
+ { CCI_REG16(0x8ca4), 0x3500 },
+ { CCI_REG16(0x7f0e), 0x5800 },
+ { CCI_REG16(0x8cd6), 0x9600 },
+ { CCI_REG16(0x7bda), 0x4c00 },
+ { CCI_REG16(0xd49c), 0x2100 },
+ { CCI_REG16(0xd4d0), 0x0a00 },
+ { CCI_REG16(0xd4a8), 0x0100 },
+ { CCI_REG16(0xd4d6), 0x1a00 },
+ { CCI_REG16(0xd4e2), 0x0000 },
+ { CCI_REG16(0xd4bc), 0x3700 },
+ { CCI_REG16(0xd4b0), 0x9603 },
+ { CCI_REG16(0xd4c8), 0x0100 },
+ { CCI_REG16(0xd624), 0x0000 },
+ { CCI_REG16(0xd62e), 0x0000 },
+ { CCI_REG16(0xd638), 0x0000 },
+ { CCI_REG16(0xd4ea), 0x0100 },
+ { CCI_REG16(0xd554), 0xc400 },
+ { CCI_REG16(0xd556), 0xc400 },
+ { CCI_REG16(0xd560), 0x5203 },
+ { CCI_REG16(0xd562), 0x5203 },
+ { CCI_REG16(0xd4da), 0x0000 },
+ { CCI_REG16(0xd4e6), 0x0100 },
+ { CCI_REG16(0xd4c0), 0x1400 },
+ { CCI_REG16(0xd4b4), 0x0100 },
+ { CCI_REG16(0xd4cc), 0x0000 },
+ { CCI_REG16(0xd5bc), 0x0000 },
+ { CCI_REG16(0xd5be), 0x0000 },
+ { CCI_REG16(0xd5c8), 0x0000 },
+ { CCI_REG16(0xd5ca), 0x0000 },
+ { CCI_REG16(0xd4d2), 0x0000 },
+ { CCI_REG16(0xd4de), 0x0100 },
+ { CCI_REG16(0xd4b8), 0x1400 },
+ { CCI_REG16(0xd4ac), 0x0100 },
+ { CCI_REG16(0xd4c4), 0x0000 },
+ { CCI_REG16(0xd4ec), 0x0000 },
+ { CCI_REG16(0xd4ee), 0x0000 },
+ { CCI_REG16(0xd4f8), 0x0000 },
+ { CCI_REG16(0xd4fa), 0x0000 },
+ { CCI_REG16(0xbf78), 0x5333 },
+ { CCI_REG16(0xd896), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x1c24), 0x0002 },
+ { CCI_REG16(0x1c26), 0x8001 },
+ { CCI_REG16(0x1c28), 0x8004 },
+ { CCI_REG16(0x1c2a), 0x2010 },
+ { CCI_REG16(0x1c2c), 0x2010 },
+ { CCI_REG16(0x1c2e), 0x0005 },
+ { CCI_REG16(0x1c30), 0x00a0 },
+ { CCI_REG16(0x1c32), 0x2810 },
+ { CCI_REG16(0x1c34), 0x2810 },
+ { CCI_REG16(0x1c4e), 0x8001 },
+ { CCI_REG16(0x1c50), 0x8004 },
+ { CCI_REG16(0x1c52), 0x0010 },
+ { CCI_REG16(0x1c54), 0x0010 },
+ { CCI_REG16(0x1c56), 0x0005 },
+ { CCI_REG16(0x1c58), 0x00a0 },
+ { CCI_REG16(0x1c5a), 0x2810 },
+ { CCI_REG16(0x1c5c), 0x2810 },
+ { CCI_REG16(0x1c5e), 0x0000 },
+ { CCI_REG16(0x1c60), 0x0000 },
+ { CCI_REG16(0x1c62), 0x0000 },
+ { CCI_REG16(0x1c64), 0x0000 },
+ { CCI_REG16(0x1c66), 0x0000 },
+ { CCI_REG16(0x1c68), 0x0000 },
+ { CCI_REG16(0x1c6a), 0x0000 },
+ { CCI_REG16(0x1c6c), 0x0000 },
+ { CCI_REG16(0x1c76), 0x8001 },
+ { CCI_REG16(0x1c78), 0x8004 },
+ { CCI_REG16(0x1c7a), 0x2010 },
+ { CCI_REG16(0x1c7c), 0x2010 },
+ { CCI_REG16(0x1c7e), 0x0005 },
+ { CCI_REG16(0x1c80), 0x00a0 },
+ { CCI_REG16(0x1c82), 0x2810 },
+ { CCI_REG16(0x1c84), 0x2810 },
+ { CCI_REG16(0x1c86), 0x0000 },
+ { CCI_REG16(0x1c88), 0x0000 },
+ { CCI_REG16(0x1c8a), 0x0000 },
+ { CCI_REG16(0x1c8c), 0x0000 },
+ { CCI_REG16(0x1c8e), 0x0000 },
+ { CCI_REG16(0x1c90), 0x0000 },
+ { CCI_REG16(0x1c92), 0x0000 },
+ { CCI_REG16(0x1c94), 0x0000 },
+ { CCI_REG16(0x1c9e), 0x8001 },
+ { CCI_REG16(0x1ca0), 0x8004 },
+ { CCI_REG16(0x1ca2), 0x2010 },
+ { CCI_REG16(0x1ca4), 0x2010 },
+ { CCI_REG16(0x1ca6), 0x0005 },
+ { CCI_REG16(0x1ca8), 0x00a0 },
+ { CCI_REG16(0x1caa), 0x2810 },
+ { CCI_REG16(0x1cac), 0x2810 },
+ { CCI_REG16(0x1cc6), 0x8001 },
+ { CCI_REG16(0x1cc8), 0x8004 },
+ { CCI_REG16(0x1cca), 0x2010 },
+ { CCI_REG16(0x1ccc), 0x2010 },
+ { CCI_REG16(0x1cce), 0x0005 },
+ { CCI_REG16(0x1cd0), 0x00a0 },
+ { CCI_REG16(0x1cd2), 0x2810 },
+ { CCI_REG16(0x1cd4), 0x2810 },
+ { CCI_REG16(0x1cee), 0x8001 },
+ { CCI_REG16(0x1cf0), 0x8004 },
+ { CCI_REG16(0x1cf2), 0x0010 },
+ { CCI_REG16(0x1cf4), 0x0010 },
+ { CCI_REG16(0x1cf6), 0x0005 },
+ { CCI_REG16(0x1cf8), 0x00a0 },
+ { CCI_REG16(0x1cfa), 0x2810 },
+ { CCI_REG16(0x1cfc), 0x2810 },
+ { CCI_REG16(0x1cfe), 0x0000 },
+ { CCI_REG16(0x1d00), 0x0000 },
+ { CCI_REG16(0x1d02), 0x0000 },
+ { CCI_REG16(0x1d04), 0x0000 },
+ { CCI_REG16(0x1d06), 0x0000 },
+ { CCI_REG16(0x1d08), 0x0000 },
+ { CCI_REG16(0x1d0a), 0x0000 },
+ { CCI_REG16(0x1d0c), 0x0000 },
+ { CCI_REG16(0x1d16), 0x8001 },
+ { CCI_REG16(0x1d18), 0x8004 },
+ { CCI_REG16(0x1d1a), 0x2010 },
+ { CCI_REG16(0x1d1c), 0x2010 },
+ { CCI_REG16(0x1d1e), 0x0005 },
+ { CCI_REG16(0x1d20), 0x00a0 },
+ { CCI_REG16(0x1d22), 0x2810 },
+ { CCI_REG16(0x1d24), 0x2810 },
+ { CCI_REG16(0x1d26), 0x0000 },
+ { CCI_REG16(0x1d28), 0x0000 },
+ { CCI_REG16(0x1d2a), 0x0000 },
+ { CCI_REG16(0x1d2c), 0x0000 },
+ { CCI_REG16(0x1d2e), 0x0000 },
+ { CCI_REG16(0x1d30), 0x0000 },
+ { CCI_REG16(0x1d32), 0x0000 },
+ { CCI_REG16(0x1d34), 0x0000 },
+ { CCI_REG16(0x1d3e), 0x8001 },
+ { CCI_REG16(0x1d40), 0x8004 },
+ { CCI_REG16(0x1d42), 0x2010 },
+ { CCI_REG16(0x1d44), 0x2010 },
+ { CCI_REG16(0x1d46), 0x0005 },
+ { CCI_REG16(0x1d48), 0x00a0 },
+ { CCI_REG16(0x1d4a), 0x2810 },
+ { CCI_REG16(0x1d4c), 0x2810 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xb21e), 0x0000 },
+ { CCI_REG16(0xb222), 0xc000 },
+ { CCI_REG16(0xb20c), 0x2e00 },
+ { CCI_REG16(0xb21a), 0x0402 },
+ { CCI_REG16(0xb378), 0x0100 },
+ { CCI_REG16(0xdd70), 0x0000 },
+ { CCI_REG16(0xde38), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2002 },
+ { CCI_REG16(0xa574), 0x0100 },
+ { CCI_REG16(0xa59c), 0xa2fd },
+ { CCI_REG16(0xa59e), 0xfefe },
+ { CCI_REG16(0xa576), 0x4000 },
+ { CCI_REG16(0xa588), 0x0e00 },
+ { CCI_REG16(0xa578), 0x8000 },
+ { CCI_REG16(0xa58a), 0x2000 },
+ { CCI_REG16(0xa57a), 0xa000 },
+ { CCI_REG16(0xa58c), 0x2800 },
+ { CCI_REG16(0xa57c), 0x4001 },
+ { CCI_REG16(0xa58e), 0x1400 },
+ { CCI_REG16(0xa57e), 0x8002 },
+ { CCI_REG16(0xa590), 0x2200 },
+ { CCI_REG16(0xa580), 0x0005 },
+ { CCI_REG16(0xa592), 0x2800 },
+ { CCI_REG16(0xa582), 0x000a },
+ { CCI_REG16(0xa594), 0x2c00 },
+ { CCI_REG16(0xa584), 0xa00f },
+ { CCI_REG16(0xa596), 0x2e00 },
+ { CCI_REG16(0xa586), 0x4011 },
+ { CCI_REG16(0xa598), 0x3200 },
+ { CCI_REG16(0xa59a), 0x3800 },
+ { CCI_REG16(0xa548), 0x0000 },
+ { CCI_REG16(0xa570), 0x0000 },
+ { CCI_REG16(0xa54a), 0x0000 },
+ { CCI_REG16(0xa54c), 0x0000 },
+ { CCI_REG16(0xa54e), 0x0000 },
+ { CCI_REG16(0xa550), 0x0000 },
+ { CCI_REG16(0xa552), 0x0000 },
+ { CCI_REG16(0xa554), 0x0000 },
+ { CCI_REG16(0xa556), 0x0000 },
+ { CCI_REG16(0xa55c), 0x0000 },
+ { CCI_REG16(0xa55e), 0x0000 },
+ { CCI_REG16(0xa560), 0x0000 },
+ { CCI_REG16(0xa562), 0x0000 },
+ { CCI_REG16(0xa564), 0x0000 },
+ { CCI_REG16(0xa566), 0x0000 },
+ { CCI_REG16(0xa568), 0x0000 },
+ { CCI_REG16(0xa56a), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x1e16), 0x0000 },
+ { CCI_REG16(0x1e1e), 0x0000 },
+ { CCI_REG16(0x1e56), 0x0000 },
+ { CCI_REG16(0x1e5e), 0x0000 },
+ { CCI_REG16(0x1df2), 0x0000 },
+ { CCI_REG16(0x1dfa), 0x0000 },
+ { CCI_REG16(0x1e32), 0x0000 },
+ { CCI_REG16(0x1e3a), 0x0000 },
+ { CCI_REG16(0x1e12), 0x0000 },
+ { CCI_REG16(0x1e1a), 0x0000 },
+ { CCI_REG16(0x1e52), 0x0000 },
+ { CCI_REG16(0x1e5a), 0x0000 },
+ { CCI_REG16(0x1df6), 0x0000 },
+ { CCI_REG16(0x1dfe), 0x0000 },
+ { CCI_REG16(0x1e36), 0x0000 },
+ { CCI_REG16(0x1e3e), 0x0000 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0x82ba), 0x3300 },
+ { CCI_REG16(0x82a2), 0x1400 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x427c), 0x2000 },
+ { CCI_REG16(0x4280), 0x1000 },
+ { CCI_REG16(0x4362), 0x0100 },
+ { CCI_REG16(0x43aa), 0x0000 },
+ { CCI_REG16(0x43ac), 0x0000 },
+ { CCI_REG16(0x43c6), 0x010a },
+ { CCI_REG16(0x43b4), 0x0000 },
+ { CCI_REG16(0x43b6), 0x0000 },
+ { CCI_REG16(0x4396), 0x0d00 },
+ { CCI_REG16(0x4398), 0x0e00 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xb322), 0x0101 },
+ { CCI_REG16(0xb324), 0x0100 },
+ { CCI_REG16(0xb330), 0x2828 },
+ { CCI_REG16(0xb34a), 0x2828 },
+ { CCI_REG16(0xb360), 0x2828 },
+ { CCI_REG16(0xfcfc), 0x2001 },
+ { CCI_REG16(0x4292), 0x0000 },
+ { CCI_REG16(0x4364), 0x0000 },
+ { CCI_REG16(0x4366), 0x0000 },
+ { CCI_REG16(0x4370), 0x0000 },
+ { CCI_REG16(0x4290), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x2002 },
+ { CCI_REG16(0x84c4), 0x0100 },
+ { CCI_REG16(0xfcfc), 0x2000 },
+ { CCI_REG16(0xd684), 0x80f3 },
+ { CCI_REG16(0xb268), 0x80f3 },
+ { CCI_REG16(0xf09a), 0x00ff },
+ { CCI_REG16(0xf2e0), 0x0000 },
+ { CCI_REG16(0xf372), 0x0000 },
+ { CCI_REG16(0xf0aa), 0xffff },
+ { CCI_REG16(0xf0ac), 0xffff },
+ { CCI_REG16(0xf2ea), 0x4000 },
+ { CCI_REG16(0xdada), 0x0001 },
+ { CCI_REG16(0xdb3c), 0x12d2 },
+ { CCI_REG16(0xdadc), 0x0000 },
+ { CCI_REG16(0xdb0c), 0x0000 },
+ { CCI_REG16(0xdb3e), 0x12d2 },
+ { CCI_REG16(0xdade), 0x4000 },
+ { CCI_REG16(0xdb0e), 0x0040 },
+ { CCI_REG16(0xdb40), 0x12d2 },
+ { CCI_REG16(0xdae0), 0xe001 },
+ { CCI_REG16(0xdb10), 0x0000 },
+ { CCI_REG16(0xdb42), 0x12d2 },
+ { CCI_REG16(0xdae2), 0x2003 },
+ { CCI_REG16(0xdb12), 0x00b0 },
+ { CCI_REG16(0xdb44), 0x12d2 },
+ { CCI_REG16(0xdae4), 0x8007 },
+ { CCI_REG16(0xdb14), 0x00d0 },
+ { CCI_REG16(0xdb46), 0x12d2 },
+ { CCI_REG16(0xdae6), 0x000b },
+ { CCI_REG16(0xdb16), 0x00f0 },
+ { CCI_REG16(0xdbcc), 0x0000 },
+ { CCI_REG16(0xdb6c), 0x0000 },
+ { CCI_REG16(0xdb9c), 0x0000 },
+ { CCI_REG16(0xdbce), 0x0000 },
+ { CCI_REG16(0xdb6e), 0x0000 },
+ { CCI_REG16(0xdb9e), 0x0000 },
+ { CCI_REG16(0xdbd0), 0x0000 },
+ { CCI_REG16(0xdb70), 0x0000 },
+ { CCI_REG16(0xdba0), 0x0000 },
+ { CCI_REG16(0xdbd2), 0x0000 },
+ { CCI_REG16(0xdb72), 0x0000 },
+ { CCI_REG16(0xdba2), 0x0000 },
+ { CCI_REG16(0xdbd4), 0x0000 },
+ { CCI_REG16(0xdb74), 0x0000 },
+ { CCI_REG16(0xdba4), 0x0000 },
+ { CCI_REG16(0xdbd6), 0x0000 },
+ { CCI_REG16(0xdb76), 0x0000 },
+ { CCI_REG16(0xdba6), 0x0000 },
+ { CCI_REG16(0xf370), 0x0203 },
+ { CCI_REG16(0xf3e4), 0x0301 },
+ { CCI_REG16(0xf3f4), 0x7310 },
+ { CCI_REG16(0xf3f6), 0x1f20 },
+ { CCI_REG16(0xf014), 0x0600 },
+ { CCI_REG16(0xb270), 0x8708 },
+ { CCI_REG16(0xb266), 0xc004 },
+ { CCI_REG16(0xd682), 0xc004 },
+ { CCI_REG16(0xbf16), 0x0baa },
+ { CCI_REG16(0xdc8c), 0x3f0b },
+ { CCI_REG16(0xfcfc), 0x4000 },
+ { CCI_REG16(0x0808), 0x0000 },
+ { CCI_REG16(0x0e00), 0x0003 },
+};
+
+static const struct s5kjn5_mode s5kjn5_modes[] = {
+ {
+ .width = 4096,
+ .height = 3072,
+ .hts = 5800,
+ .vts_min = 5296,
+ .exposure_margin = 12,
+ .regs = s5kjn5_4096x3072_regs,
+ .num_regs = ARRAY_SIZE(s5kjn5_4096x3072_regs),
+ },
+};
+
+struct s5kjn5 {
+ struct v4l2_subdev sd;
+ struct media_pad pad;
+ struct regmap *regmap;
+ struct clk *inclk;
+ struct gpio_desc *reset_gpio;
+ struct regulator_bulk_data supplies[ARRAY_SIZE(s5kjn5_supply_names)];
+ struct v4l2_ctrl_handler ctrl_handler;
+ struct v4l2_ctrl *link_freq;
+ struct v4l2_ctrl *hblank;
+ struct v4l2_ctrl *exposure;
+};
+
+static inline struct s5kjn5 *sd_to_s5kjn5(struct v4l2_subdev *sd)
+{
+ return container_of(sd, struct s5kjn5, sd);
+}
+
+static int s5kjn5_write_ops(struct s5kjn5 *s5kjn5,
+ const struct s5kjn5_init_op *ops, size_t num_ops)
+{
+ const struct s5kjn5_init_op *op;
+ int ret = 0;
+
+ for (op = ops; op < ops + num_ops; op++) {
+ if (op->burst)
+ ret = regmap_bulk_write(s5kjn5->regmap, op->burst_addr,
+ op->burst, op->burst_len);
+ else if (op->reg)
+ ret = cci_write(s5kjn5->regmap, op->reg, op->val, NULL);
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static int s5kjn5_write_init(struct s5kjn5 *s5kjn5)
+{
+ int ret;
+
+ ret = s5kjn5_write_ops(s5kjn5, s5kjn5_init_ops_1,
+ ARRAY_SIZE(s5kjn5_init_ops_1));
+ if (ret)
+ return ret;
+
+ /* Settling delay mandated by the vendor initialisation sequence. */
+ fsleep(5000);
+
+ return s5kjn5_write_ops(s5kjn5, s5kjn5_init_ops_2,
+ ARRAY_SIZE(s5kjn5_init_ops_2));
+}
+
+static int s5kjn5_power_on(struct device *dev)
+{
+ struct v4l2_subdev *sd = dev_get_drvdata(dev);
+ struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
+ int ret;
+
+ ret = regulator_bulk_enable(ARRAY_SIZE(s5kjn5_supply_names),
+ s5kjn5->supplies);
+ if (ret) {
+ dev_err(dev, "failed to enable regulators: %d\n", ret);
+ return ret;
+ }
+
+ gpiod_set_value_cansleep(s5kjn5->reset_gpio, 0);
+ usleep_range(8000, 10000);
+
+ ret = clk_prepare_enable(s5kjn5->inclk);
+ if (ret) {
+ dev_err(dev, "failed to enable clock: %d\n", ret);
+ gpiod_set_value_cansleep(s5kjn5->reset_gpio, 1);
+ regulator_bulk_disable(ARRAY_SIZE(s5kjn5_supply_names),
+ s5kjn5->supplies);
+ return ret;
+ }
+
+ usleep_range(10000, 12000);
+
+ return 0;
+}
+
+static int s5kjn5_power_off(struct device *dev)
+{
+ struct v4l2_subdev *sd = dev_get_drvdata(dev);
+ struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
+
+ clk_disable_unprepare(s5kjn5->inclk);
+ gpiod_set_value_cansleep(s5kjn5->reset_gpio, 1);
+ regulator_bulk_disable(ARRAY_SIZE(s5kjn5_supply_names),
+ s5kjn5->supplies);
+
+ return 0;
+}
+
+static int s5kjn5_check_id(struct s5kjn5 *s5kjn5)
+{
+ struct device *dev = s5kjn5->sd.dev;
+ u64 chip_id;
+ int ret;
+
+ ret = cci_read(s5kjn5->regmap, S5KJN5_REG_CHIP_ID, &chip_id, NULL);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to read chip ID\n");
+
+ if (chip_id != S5KJN5_CHIP_ID)
+ return dev_err_probe(dev, -ENODEV,
+ "unexpected chip ID 0x%04llx, expected 0x%04x\n",
+ chip_id, S5KJN5_CHIP_ID);
+
+ return 0;
+}
+
+static int s5kjn5_check_hwcfg(struct device *dev)
+{
+ struct fwnode_handle *fwnode = dev_fwnode(dev), *ep;
+ struct v4l2_fwnode_endpoint bus_cfg = {
+ .bus_type = V4L2_MBUS_CSI2_DPHY,
+ };
+ unsigned long freq_bitmap;
+ int ret;
+
+ if (!fwnode)
+ return -ENODEV;
+
+ ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
+ if (!ep)
+ return dev_err_probe(dev, -EINVAL, "no endpoint found\n");
+
+ ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
+ fwnode_handle_put(ep);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to parse endpoint\n");
+
+ if (bus_cfg.bus.mipi_csi2.num_data_lanes != S5KJN5_DATA_LANES) {
+ ret = dev_err_probe(dev, -EINVAL,
+ "only %u data lanes supported\n",
+ S5KJN5_DATA_LANES);
+ goto out;
+ }
+
+ ret = v4l2_link_freq_to_bitmap(dev, bus_cfg.link_frequencies,
+ bus_cfg.nr_of_link_frequencies,
+ s5kjn5_link_freqs,
+ ARRAY_SIZE(s5kjn5_link_freqs),
+ &freq_bitmap);
+
+out:
+ v4l2_fwnode_endpoint_free(&bus_cfg);
+
+ return ret;
+}
+
+static int s5kjn5_init(struct s5kjn5 *s5kjn5,
+ const struct s5kjn5_mode *mode)
+{
+ int ret;
+
+ ret = s5kjn5_write_init(s5kjn5);
+ if (ret)
+ return ret;
+
+ return cci_multi_reg_write(s5kjn5->regmap, mode->regs,
+ mode->num_regs, NULL);
+}
+
+static const char * const s5kjn5_test_pattern_menu[] = {
+ "Disabled",
+ "Solid Color",
+ "Color Bars",
+ "Fade To Grey Color Bars",
+ "PN9",
+};
+
+static int s5kjn5_s_ctrl(struct v4l2_ctrl *ctrl)
+{
+ struct s5kjn5 *s5kjn5 =
+ container_of(ctrl->handler, struct s5kjn5, ctrl_handler);
+ struct device *dev = s5kjn5->sd.dev;
+ const struct s5kjn5_mode *mode = &s5kjn5_modes[0];
+ u32 exposure_max;
+ int ret;
+
+ if (ctrl->id == V4L2_CID_VBLANK) {
+ exposure_max = mode->height + ctrl->val - mode->exposure_margin;
+ ret = __v4l2_ctrl_modify_range(s5kjn5->exposure,
+ s5kjn5->exposure->minimum,
+ exposure_max,
+ s5kjn5->exposure->step,
+ s5kjn5->exposure->default_value);
+ if (ret)
+ return ret;
+ }
+
+ if (!pm_runtime_get_if_active(dev))
+ return 0;
+
+ switch (ctrl->id) {
+ case V4L2_CID_EXPOSURE:
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_EXPOSURE,
+ ctrl->val, NULL);
+ break;
+
+ case V4L2_CID_ANALOGUE_GAIN:
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_AGAIN,
+ ctrl->val, NULL);
+ break;
+
+ case V4L2_CID_DIGITAL_GAIN:
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_DGAIN,
+ ctrl->val, NULL);
+ break;
+
+ case V4L2_CID_VBLANK:
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_VTS,
+ mode->height + ctrl->val, NULL);
+ break;
+
+ case V4L2_CID_TEST_PATTERN:
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_TEST_PATTERN,
+ ctrl->val, NULL);
+ break;
+
+ default:
+ ret = -EINVAL;
+ break;
+ }
+
+ pm_runtime_put_autosuspend(dev);
+
+ return ret;
+}
+
+static const struct v4l2_ctrl_ops s5kjn5_ctrl_ops = {
+ .s_ctrl = s5kjn5_s_ctrl,
+};
+
+static int s5kjn5_init_controls(struct s5kjn5 *s5kjn5)
+{
+ const struct s5kjn5_mode *mode = &s5kjn5_modes[0];
+ struct v4l2_ctrl_handler *hdlr = &s5kjn5->ctrl_handler;
+ struct v4l2_fwnode_device_properties props;
+ u32 vblank_min, vblank_def, vblank_max, hblank;
+ int ret;
+
+ ret = v4l2_fwnode_device_parse(s5kjn5->sd.dev, &props);
+ if (ret)
+ return ret;
+
+ v4l2_ctrl_handler_init(hdlr, 10);
+
+ s5kjn5->link_freq =
+ v4l2_ctrl_new_int_menu(hdlr, NULL, V4L2_CID_LINK_FREQ,
+ ARRAY_SIZE(s5kjn5_link_freqs) - 1, 0,
+ s5kjn5_link_freqs);
+
+ v4l2_ctrl_new_std(hdlr, &s5kjn5_ctrl_ops, V4L2_CID_PIXEL_RATE,
+ 0, s5kjn5_to_pixel_rate(0), 1,
+ s5kjn5_to_pixel_rate(0));
+
+ vblank_min = mode->vts_min - mode->height;
+ vblank_def = mode->vts_min - mode->height;
+ vblank_max = S5KJN5_VTS_MAX - mode->height;
+ v4l2_ctrl_new_std(hdlr, &s5kjn5_ctrl_ops, V4L2_CID_VBLANK,
+ vblank_min, vblank_max, 1, vblank_def);
+
+ hblank = mode->hts - mode->width;
+ s5kjn5->hblank =
+ v4l2_ctrl_new_std(hdlr, NULL, V4L2_CID_HBLANK,
+ hblank, hblank, 1, hblank);
+
+ s5kjn5->exposure =
+ v4l2_ctrl_new_std(hdlr, &s5kjn5_ctrl_ops, V4L2_CID_EXPOSURE,
+ S5KJN5_EXPOSURE_MIN,
+ mode->vts_min - mode->exposure_margin,
+ 1, S5KJN5_EXPOSURE_DEFAULT);
+
+ v4l2_ctrl_new_std(hdlr, &s5kjn5_ctrl_ops, V4L2_CID_ANALOGUE_GAIN,
+ S5KJN5_AGAIN_MIN, S5KJN5_AGAIN_MAX,
+ 1, S5KJN5_AGAIN_MIN);
+
+ v4l2_ctrl_new_std(hdlr, &s5kjn5_ctrl_ops, V4L2_CID_DIGITAL_GAIN,
+ S5KJN5_DGAIN_MIN, S5KJN5_DGAIN_MAX,
+ 1, S5KJN5_DGAIN_MIN);
+
+ v4l2_ctrl_new_std_menu_items(hdlr, &s5kjn5_ctrl_ops,
+ V4L2_CID_TEST_PATTERN,
+ ARRAY_SIZE(s5kjn5_test_pattern_menu) - 1,
+ 0, 0, s5kjn5_test_pattern_menu);
+
+ ret = v4l2_ctrl_new_fwnode_properties(hdlr, &s5kjn5_ctrl_ops, &props);
+ if (ret) {
+ v4l2_ctrl_handler_free(hdlr);
+ return ret;
+ }
+
+ if (hdlr->error) {
+ v4l2_ctrl_handler_free(hdlr);
+ return hdlr->error;
+ }
+
+ s5kjn5->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
+ s5kjn5->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
+
+ s5kjn5->sd.ctrl_handler = hdlr;
+
+ return 0;
+}
+
+static int s5kjn5_enable_streams(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ u32 pad, u64 streams_mask)
+{
+ struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
+ const struct s5kjn5_mode *mode = &s5kjn5_modes[0];
+ struct device *dev = sd->dev;
+ int ret;
+
+ ret = pm_runtime_resume_and_get(dev);
+ if (ret < 0)
+ return ret;
+
+ ret = s5kjn5_init(s5kjn5, mode);
+ if (ret) {
+ dev_err(dev, "failed to write init registers: %d\n", ret);
+ goto err_pm;
+ }
+
+ ret = __v4l2_ctrl_handler_setup(&s5kjn5->ctrl_handler);
+ if (ret)
+ goto err_pm;
+
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_STREAMING,
+ S5KJN5_STREAMING_ON, NULL);
+ if (ret) {
+ dev_err(dev, "failed to start streaming: %d\n", ret);
+ goto err_pm;
+ }
+
+ return 0;
+
+err_pm:
+ pm_runtime_put_autosuspend(dev);
+ return ret;
+}
+
+static int s5kjn5_disable_streams(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ u32 pad, u64 streams_mask)
+{
+ struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
+ struct device *dev = sd->dev;
+ u64 val;
+ int ret;
+ int i;
+
+ ret = cci_write(s5kjn5->regmap, S5KJN5_REG_STREAMING,
+ S5KJN5_STREAMING_OFF, NULL);
+ if (ret)
+ dev_warn(dev, "failed to stop streaming: %d\n", ret);
+
+ /* Poll frame count register until it reads standby */
+ for (i = 0; i < S5KJN5_STANDBY_POLL_ITERS; i++) {
+ usleep_range(5000, 6000);
+ ret = cci_read(s5kjn5->regmap, S5KJN5_REG_FRAME_COUNT,
+ &val, NULL);
+ if (!ret && val == S5KJN5_FRAME_COUNT_STANDBY)
+ break;
+ }
+ if (i == S5KJN5_STANDBY_POLL_ITERS)
+ dev_warn(dev, "timed out waiting for standby\n");
+
+ pm_runtime_put_autosuspend(dev);
+
+ return 0;
+}
+
+static int s5kjn5_enum_mbus_code(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ struct v4l2_subdev_mbus_code_enum *code)
+{
+ if (code->index != 0)
+ return -EINVAL;
+
+ code->code = MEDIA_BUS_FMT_SGBRG10_1X10;
+
+ return 0;
+}
+
+static int s5kjn5_enum_frame_size(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ struct v4l2_subdev_frame_size_enum *fse)
+{
+ if (fse->code != MEDIA_BUS_FMT_SGBRG10_1X10 ||
+ fse->index >= ARRAY_SIZE(s5kjn5_modes))
+ return -EINVAL;
+
+ fse->min_width = s5kjn5_modes[fse->index].width;
+ fse->max_width = s5kjn5_modes[fse->index].width;
+ fse->min_height = s5kjn5_modes[fse->index].height;
+ fse->max_height = s5kjn5_modes[fse->index].height;
+
+ return 0;
+}
+
+static void s5kjn5_fill_format(const struct s5kjn5_mode *mode,
+ struct v4l2_mbus_framefmt *fmt)
+{
+ fmt->width = mode->width;
+ fmt->height = mode->height;
+ fmt->code = MEDIA_BUS_FMT_SGBRG10_1X10;
+ fmt->field = V4L2_FIELD_NONE;
+ fmt->colorspace = V4L2_COLORSPACE_RAW;
+ fmt->ycbcr_enc = V4L2_YCBCR_ENC_DEFAULT;
+ fmt->quantization = V4L2_QUANTIZATION_DEFAULT;
+ fmt->xfer_func = V4L2_XFER_FUNC_NONE;
+}
+
+static int s5kjn5_set_fmt(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ struct v4l2_subdev_format *fmt)
+{
+ const struct s5kjn5_mode *mode = &s5kjn5_modes[0];
+ struct v4l2_mbus_framefmt *format;
+
+ s5kjn5_fill_format(mode, &fmt->format);
+
+ format = v4l2_subdev_state_get_format(state, 0);
+ *format = fmt->format;
+
+ return 0;
+}
+
+static int s5kjn5_get_selection(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state,
+ struct v4l2_subdev_selection *sel)
+{
+ switch (sel->target) {
+ case V4L2_SEL_TGT_CROP:
+ case V4L2_SEL_TGT_CROP_DEFAULT:
+ case V4L2_SEL_TGT_CROP_BOUNDS:
+ case V4L2_SEL_TGT_NATIVE_SIZE:
+ sel->r.left = 0;
+ sel->r.top = 0;
+ sel->r.width = S5KJN5_NATIVE_WIDTH;
+ sel->r.height = S5KJN5_NATIVE_HEIGHT;
+ return 0;
+ default:
+ return -EINVAL;
+ }
+}
+
+static int s5kjn5_init_state(struct v4l2_subdev *sd,
+ struct v4l2_subdev_state *state)
+{
+ struct v4l2_mbus_framefmt *fmt =
+ v4l2_subdev_state_get_format(state, 0);
+
+ s5kjn5_fill_format(&s5kjn5_modes[0], fmt);
+
+ return 0;
+}
+
+static const struct v4l2_subdev_video_ops s5kjn5_video_ops = {
+ .s_stream = v4l2_subdev_s_stream_helper,
+};
+
+static const struct v4l2_subdev_pad_ops s5kjn5_pad_ops = {
+ .enum_mbus_code = s5kjn5_enum_mbus_code,
+ .enum_frame_size = s5kjn5_enum_frame_size,
+ .get_fmt = v4l2_subdev_get_fmt,
+ .set_fmt = s5kjn5_set_fmt,
+ .get_selection = s5kjn5_get_selection,
+ .enable_streams = s5kjn5_enable_streams,
+ .disable_streams = s5kjn5_disable_streams,
+};
+
+static const struct v4l2_subdev_ops s5kjn5_subdev_ops = {
+ .video = &s5kjn5_video_ops,
+ .pad = &s5kjn5_pad_ops,
+};
+
+static const struct v4l2_subdev_internal_ops s5kjn5_internal_ops = {
+ .init_state = s5kjn5_init_state,
+};
+
+static int s5kjn5_probe(struct i2c_client *client)
+{
+ struct device *dev = &client->dev;
+ struct s5kjn5 *s5kjn5;
+ unsigned int i;
+ int ret;
+
+ s5kjn5 = devm_kzalloc(dev, sizeof(*s5kjn5), GFP_KERNEL);
+ if (!s5kjn5)
+ return -ENOMEM;
+
+ ret = s5kjn5_check_hwcfg(dev);
+ if (ret)
+ return ret;
+
+ v4l2_i2c_subdev_init(&s5kjn5->sd, client, &s5kjn5_subdev_ops);
+
+ s5kjn5->inclk = devm_v4l2_sensor_clk_get(dev, NULL);
+ if (IS_ERR(s5kjn5->inclk))
+ return dev_err_probe(dev, PTR_ERR(s5kjn5->inclk),
+ "failed to get clock\n");
+
+ if (clk_get_rate(s5kjn5->inclk) != S5KJN5_XVCLK_RATE)
+ return dev_err_probe(dev, -EINVAL,
+ "unsupported clock rate %lu Hz, expected %u Hz\n",
+ clk_get_rate(s5kjn5->inclk),
+ S5KJN5_XVCLK_RATE);
+
+ s5kjn5->reset_gpio = devm_gpiod_get_optional(dev, "reset",
+ GPIOD_OUT_HIGH);
+ if (IS_ERR(s5kjn5->reset_gpio))
+ return dev_err_probe(dev, PTR_ERR(s5kjn5->reset_gpio),
+ "failed to get reset GPIO\n");
+
+ for (i = 0; i < ARRAY_SIZE(s5kjn5_supply_names); i++)
+ s5kjn5->supplies[i].supply = s5kjn5_supply_names[i];
+
+ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(s5kjn5_supply_names),
+ s5kjn5->supplies);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "failed to get regulators\n");
+
+ s5kjn5->regmap = devm_cci_regmap_init_i2c(client, 16);
+ if (IS_ERR(s5kjn5->regmap))
+ return dev_err_probe(dev, PTR_ERR(s5kjn5->regmap),
+ "failed to init CCI regmap\n");
+
+ ret = s5kjn5_power_on(dev);
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to power on\n");
+
+ ret = s5kjn5_check_id(s5kjn5);
+ if (ret)
+ goto err_power_off;
+
+ ret = s5kjn5_init_controls(s5kjn5);
+ if (ret)
+ goto err_power_off;
+
+ s5kjn5->sd.internal_ops = &s5kjn5_internal_ops;
+ s5kjn5->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+ s5kjn5->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
+ s5kjn5->pad.flags = MEDIA_PAD_FL_SOURCE;
+
+ ret = media_entity_pads_init(&s5kjn5->sd.entity, 1, &s5kjn5->pad);
+ if (ret)
+ goto err_controls;
+
+ s5kjn5->sd.state_lock = s5kjn5->ctrl_handler.lock;
+
+ ret = v4l2_subdev_init_finalize(&s5kjn5->sd);
+ if (ret)
+ goto err_entity;
+
+ pm_runtime_set_active(dev);
+ pm_runtime_enable(dev);
+
+ ret = v4l2_async_register_subdev_sensor(&s5kjn5->sd);
+ if (ret) {
+ dev_err(dev, "failed to register subdev: %d\n", ret);
+ goto err_pm;
+ }
+
+ pm_runtime_set_autosuspend_delay(dev, 1000);
+ pm_runtime_use_autosuspend(dev);
+ pm_runtime_idle(dev);
+
+ dev_dbg(dev, "S5KJN5 sensor detected (chip ID 0x%04x)\n",
+ S5KJN5_CHIP_ID);
+
+ return 0;
+
+err_pm:
+ pm_runtime_disable(dev);
+ pm_runtime_set_suspended(dev);
+
+err_entity:
+ media_entity_cleanup(&s5kjn5->sd.entity);
+ v4l2_subdev_cleanup(&s5kjn5->sd);
+
+err_controls:
+ v4l2_ctrl_handler_free(&s5kjn5->ctrl_handler);
+
+err_power_off:
+ s5kjn5_power_off(dev);
+ return ret;
+}
+
+static void s5kjn5_remove(struct i2c_client *client)
+{
+ struct v4l2_subdev *sd = i2c_get_clientdata(client);
+ struct device *dev = &client->dev;
+
+ v4l2_async_unregister_subdev(sd);
+ v4l2_subdev_cleanup(sd);
+ v4l2_ctrl_handler_free(sd->ctrl_handler);
+ media_entity_cleanup(&sd->entity);
+
+ pm_runtime_dont_use_autosuspend(dev);
+ pm_runtime_disable(dev);
+
+ if (!pm_runtime_status_suspended(dev)) {
+ s5kjn5_power_off(dev);
+ pm_runtime_set_suspended(dev);
+ }
+}
+
+static const struct dev_pm_ops s5kjn5_pm_ops = {
+ SET_RUNTIME_PM_OPS(s5kjn5_power_off, s5kjn5_power_on, NULL)
+};
+
+static const struct of_device_id s5kjn5_of_match[] = {
+ { .compatible = "samsung,s5kjn5" },
+ { }
+};
+MODULE_DEVICE_TABLE(of, s5kjn5_of_match);
+
+static struct i2c_driver s5kjn5_i2c_driver = {
+ .driver = {
+ .name = "s5kjn5",
+ .pm = pm_ptr(&s5kjn5_pm_ops),
+ .of_match_table = s5kjn5_of_match,
+ },
+ .probe = s5kjn5_probe,
+ .remove = s5kjn5_remove,
+};
+
+module_i2c_driver(s5kjn5_i2c_driver);
+
+MODULE_AUTHOR("Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>");
+MODULE_DESCRIPTION("Samsung S5KJN5 50 MP 10-bit RAW sensor driver");
+MODULE_LICENSE("GPL");
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver
2026-09-14 11:10 ` [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver Wenmeng Liu
@ 2026-09-14 11:24 ` sashiko-bot
2026-09-23 11:11 ` Nihal Kumar Gupta
1 sibling, 0 replies; 6+ messages in thread
From: sashiko-bot @ 2026-09-14 11:24 UTC (permalink / raw)
To: Wenmeng Liu; +Cc: devicetree, media-ci, conor+dt, robh
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Incorrect ordering of clock and reset signals during power-on and power-off sequences.
- [Medium] Missing `pm_runtime_mark_last_busy()` before dropping the runtime PM reference defeats the autosuspend delay.
--
commit ba7e808a699f95cdf2ed0596c95aeb83fbeac746
Author: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
media: i2c: Add Samsung S5KJN5 image sensor driver
This commit adds a V4L2 sub-device driver for the Samsung S5KJN5, a
50 MP 10-bit RAW MIPI CSI-2 image sensor. The driver supports the
4096x3072 mode and exposes standard v4l2 controls.
> diff --git a/drivers/media/i2c/s5kjn5.c b/drivers/media/i2c/s5kjn5.c
> new file mode 100644
> index 0000000000000..edf824228bb6f
> --- /dev/null
> +++ b/drivers/media/i2c/s5kjn5.c
[ ... ]
> +static int s5kjn5_power_on(struct device *dev)
> +{
> + struct v4l2_subdev *sd = dev_get_drvdata(dev);
> + struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
> + int ret;
> +
> + ret = regulator_bulk_enable(ARRAY_SIZE(s5kjn5_supply_names),
> + s5kjn5->supplies);
> + if (ret) {
> + dev_err(dev, "failed to enable regulators: %d\n", ret);
> + return ret;
> + }
> +
> + gpiod_set_value_cansleep(s5kjn5->reset_gpio, 0);
> + usleep_range(8000, 10000);
> +
> + ret = clk_prepare_enable(s5kjn5->inclk);
[Severity: High]
Does this power-on sequence introduce a regression with hardware sequencing?
The reset line is de-asserted before the sensor clock is running. Transitioning
the reset signal without an active external clock violates the synchronous
reset requirements of the sensor's digital logic, which might leave the
internal state machine in an undefined or latch-up state.
> + if (ret) {
> + dev_err(dev, "failed to enable clock: %d\n", ret);
> + gpiod_set_value_cansleep(s5kjn5->reset_gpio, 1);
> + regulator_bulk_disable(ARRAY_SIZE(s5kjn5_supply_names),
> + s5kjn5->supplies);
> + return ret;
> + }
> +
> + usleep_range(10000, 12000);
> +
> + return 0;
> +}
> +
> +static int s5kjn5_power_off(struct device *dev)
> +{
> + struct v4l2_subdev *sd = dev_get_drvdata(dev);
> + struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
> +
> + clk_disable_unprepare(s5kjn5->inclk);
> + gpiod_set_value_cansleep(s5kjn5->reset_gpio, 1);
[Severity: High]
Can this sequence cause a hardware latch-up? The clock is killed before the
sensor is put back into hardware reset, which reverses the typical power-off
ordering and violates hardware sequencing rules.
> + regulator_bulk_disable(ARRAY_SIZE(s5kjn5_supply_names),
> + s5kjn5->supplies);
> +
> + return 0;
> +}
[ ... ]
> +static int s5kjn5_s_ctrl(struct v4l2_ctrl *ctrl)
> +{
> + struct s5kjn5 *s5kjn5 =
> + container_of(ctrl->handler, struct s5kjn5, ctrl_handler);
> + struct device *dev = s5kjn5->sd.dev;
> + const struct s5kjn5_mode *mode = &s5kjn5_modes[0];
> + u32 exposure_max;
> + int ret;
[ ... ]
> + switch (ctrl->id) {
> + case V4L2_CID_EXPOSURE:
> + ret = cci_write(s5kjn5->regmap, S5KJN5_REG_EXPOSURE,
> + ctrl->val, NULL);
> + break;
> +
> + case V4L2_CID_ANALOGUE_GAIN:
> + ret = cci_write(s5kjn5->regmap, S5KJN5_REG_AGAIN,
> + ctrl->val, NULL);
> + break;
[ ... ]
> + default:
> + ret = -EINVAL;
> + break;
> + }
> +
> + pm_runtime_put_autosuspend(dev);
[Severity: Medium]
Is a call to pm_runtime_mark_last_busy() missing before dropping the runtime
PM reference here?
Without marking the device as busy, the PM core evaluates the delay against a
stale last_busy timestamp (which was set when the device originally resumed).
This calculates that the delay has already expired and suspends the device
instantly, defeating the autosuspend optimization.
> +
> + return ret;
> +}
[ ... ]
> +static int s5kjn5_disable_streams(struct v4l2_subdev *sd,
> + struct v4l2_subdev_state *state,
> + u32 pad, u64 streams_mask)
> +{
> + struct s5kjn5 *s5kjn5 = sd_to_s5kjn5(sd);
> + struct device *dev = sd->dev;
> + u64 val;
> + int ret;
> + int i;
> +
> + ret = cci_write(s5kjn5->regmap, S5KJN5_REG_STREAMING,
> + S5KJN5_STREAMING_OFF, NULL);
> + if (ret)
> + dev_warn(dev, "failed to stop streaming: %d\n", ret);
> +
> + /* Poll frame count register until it reads standby */
> + for (i = 0; i < S5KJN5_STANDBY_POLL_ITERS; i++) {
> + usleep_range(5000, 6000);
> + ret = cci_read(s5kjn5->regmap, S5KJN5_REG_FRAME_COUNT,
> + &val, NULL);
> + if (!ret && val == S5KJN5_FRAME_COUNT_STANDBY)
> + break;
> + }
> + if (i == S5KJN5_STANDBY_POLL_ITERS)
> + dev_warn(dev, "timed out waiting for standby\n");
> +
> + pm_runtime_put_autosuspend(dev);
[Severity: Medium]
Similarly, does this stream disable path need to mark the device as busy?
Because pm_runtime_mark_last_busy() is omitted before
pm_runtime_put_autosuspend(), the sensor powers down immediately when streaming
stops instead of remaining active for the configured 1000ms autosuspend window.
This can cause unnecessary power cycling latency if the stream is restarted
shortly after.
> +
> + return 0;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260914-sk5jn5-v4-0-386e84cfb2b3@oss.qualcomm.com?part=2
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver
2026-09-14 11:10 ` [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver Wenmeng Liu
2026-09-14 11:24 ` sashiko-bot
@ 2026-09-23 11:11 ` Nihal Kumar Gupta
2026-09-28 7:58 ` Wenmeng Liu
1 sibling, 1 reply; 6+ messages in thread
From: Nihal Kumar Gupta @ 2026-09-23 11:11 UTC (permalink / raw)
To: Wenmeng Liu, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Sakari Ailus
Cc: linux-media, devicetree, linux-kernel, vladimir.zapolskiy
On 14-09-2026 16:40, Wenmeng Liu wrote:
> Add a V4L2 sub-device driver for the Samsung S5KJN5, a 50 MP 10-bit
> RAW MIPI CSI-2 image sensor. The driver supports the 4096x3072 mode and
> exposes the standard controls (exposure, gain, vblank/hblank, test
> pattern).
>
> Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
> ---
> MAINTAINERS | 1 +
> drivers/media/i2c/Kconfig | 11 +
> drivers/media/i2c/Makefile | 1 +
> drivers/media/i2c/s5kjn5.c | 2861 ++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 2874 insertions(+)
Hi Wenmeng,
This series fails to build against linux-next(20260922) after:
7eef49c16461 ("media: v4l2-subdev: Add struct v4l2_subdev_client_info pointer to pad ops")
s5kjn5_set_fmt() and s5kjn5_get_selection() need to be updated to
include the new 'const struct v4l2_subdev_client_info *ci' parameter.
---
Regards,
Nihal Kumar Gupta
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver
2026-09-23 11:11 ` Nihal Kumar Gupta
@ 2026-09-28 7:58 ` Wenmeng Liu
0 siblings, 0 replies; 6+ messages in thread
From: Wenmeng Liu @ 2026-09-28 7:58 UTC (permalink / raw)
To: Nihal Kumar Gupta, Mauro Carvalho Chehab, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Sakari Ailus
Cc: linux-media, devicetree, linux-kernel, vladimir.zapolskiy
On 9/23/2026 7:11 PM, Nihal Kumar Gupta wrote:
>
>
> On 14-09-2026 16:40, Wenmeng Liu wrote:
>> Add a V4L2 sub-device driver for the Samsung S5KJN5, a 50 MP 10-bit
>> RAW MIPI CSI-2 image sensor. The driver supports the 4096x3072 mode and
>> exposes the standard controls (exposure, gain, vblank/hblank, test
>> pattern).
>>
>> Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
>> ---
>> MAINTAINERS | 1 +
>> drivers/media/i2c/Kconfig | 11 +
>> drivers/media/i2c/Makefile | 1 +
>> drivers/media/i2c/s5kjn5.c | 2861 ++++++++++++++++++++++++++++++++++++++++++++
>> 4 files changed, 2874 insertions(+)
> Hi Wenmeng,
>
> This series fails to build against linux-next(20260922) after:
>
> 7eef49c16461 ("media: v4l2-subdev: Add struct v4l2_subdev_client_info pointer to pad ops")
>
> s5kjn5_set_fmt() and s5kjn5_get_selection() need to be updated to
> include the new 'const struct v4l2_subdev_client_info *ci' parameter.
>
> ---
> Regards,
> Nihal Kumar Gupta
Hi Nihal,
Thanks for point that out, new version has been posted:
https://lore.kernel.org/all/20260928-sk5jn5-v5-0-19aa0a0a68eb@oss.qualcomm.com/
Thanks,
Wenmeng
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-09-28 7:58 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-14 11:10 [PATCH v4 0/2] media: i2c: Add Samsung S5KJN5 image sensor Wenmeng Liu
2026-09-14 11:10 ` [PATCH v4 1/2] dt-bindings: " Wenmeng Liu
2026-09-14 11:10 ` [PATCH v4 2/2] media: i2c: Add Samsung S5KJN5 image sensor driver Wenmeng Liu
2026-09-14 11:24 ` sashiko-bot
2026-09-23 11:11 ` Nihal Kumar Gupta
2026-09-28 7:58 ` Wenmeng Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox