Merge tag 'MMI-S2SE32.28-28-4' of https://github.com/MotorolaMobilityLLC/kernel-msm into lineage-20
hawao push for android 12 * tag 'MMI-S2SE32.28-28-4' of https://github.com/MotorolaMobilityLLC/kernel-msm: (4348 commits) Hawaii+ OLED: sim1+sim2+sd fast plugGing cause phone hang kernel/config: hawao: usb: sim1+sim2+sd fast plugGing cause phone hang shmem becomes bigger and bigger when launch apps driver/power: Add debug logs Hawao: Fix NFC power consumption in sleep mode. devon:charger bring up lib/iov_iter: initialize "flags" in new pipe_buffer BACKPORT: dmabuf: fix use-after-free of dmabuf's file->f_inode kernel:add bc12 detect channel definition Revert "(CR): drm: mipi: Disable the MIPI DSI commands 0x2E and 0x3E" devon4g: camera flash bringup sctp: add param size validation for SCTP_PARAM_SET_PRIMARY sctp: validate chunk size in __rcv_asconf_lookup sctp: add size validation when walking chunks sctp: validate from_addr_param return aio: fix use-after-free due to missing POLLFREE handling aio: keep poll requests on waitqueue until completed signalfd: use wake_up_pollfree() binder: use wake_up_pollfree() wait: add wake_up_pollfree() FROMGIT: binder: fix test regression due to sender_euid change UPSTREAM: binder: use cred instead of task for getsecid BACKPORT: binder: use cred instead of task for selinux checks UPSTREAM: binder: use euid from cred instead of using task arm64/defconfig: add devon extra configs USB: gadget: bRequestType is a bitfield, not a enum USB: gadget: zero allocate endpoint 0 buffers USB: gadget: detect too-big endpoint 0 requests hawao: devconfig: enable CHACHA20 crypto configs rhode: devconfig: enable CHACHA20 crypto configs regulator: Force shutdown all regulators when system power off. arm64: defconfig: Flash compatible TZ: Distinguishes encrypted and unencrypted TZ logs interfaces. TZ: Fix build err Hawaii+OLED:remove CONFIG_QCOM_FSA4480_I2C defconfig: Disable SLAB_MERGE. arm64/config:Enable Zram writeback on hawao Enable LZ4 on Rhode4G and Hawao dts: rhode: remove CONFIG_QCOM_FSA4480_I2C mm: zram: fix build error when zram wb disabled mm : zram fix swapcached issue on Zram Writeback fs:proc:abort reclaim once process goes to foreground ip_gre: add validation for csum_start arm64/config:Enable Zram writeback on Rhode kernel:add charger termination definition rhode:kernel: add wt6670 get firmware num node kernel/config:hawao:remove FTS TP config to use module kernel/input:hawao:update to use TP module ko kernel: remove wt6670 isp macro definition for user version kernel/config:hawao: add new FTS config to fix build error input/touchscreen: add ft3519 source config input/ft3519: hawao touch driver bringup Revert "(CR) hawaii OLED: visionox ft3519 touch drvier bringup" kernel: add wt6670 macro definition to control i2c nack QC3P:add iio channel definition Rhode: define CONFIG_CAMERA_FLASH_PWM display: Modify LDO driver initialization voltage compatibility Hawao: NFC Bringup(4) - driver hawaii OLED: visionox ft3519 touch drvier bringup kernel: qc3p wt6760 isp download function kernel:add ADC_GPIO3_DIV3 adc channel display/config: Add LDO driver config into the kernel. display: Load the regulator driver directly into the kernel. kernel: use orderly_poweroff when usb plugged out tty:diag:Move tty_flip_buffer_push out of spinlock Revert "tty:revert the tty update from qcom for moto tty_diag driver" kernel:dwc3 delay extcon module registeration ANDROID: xt_quota2: set usersize in xt_match registration object ANDROID: xt_quota2: clear quota2_log message before sending ANDROID: xt_quota2: remove trailing junk which might have a digit in it arm/defconfig: add hawao extra config usb:diag:revert the f_diag update from qcom for moto tty_diag driver tty:revert the tty update from qcom for moto tty_diag driver Enable samsung NFC driver integrate samsung RN4V NFC driver Rhode4G: wide camera bring up kernel: add charger gki kernel: change spi gpio for i2c gpio for charger Remove gpio3 from reserve list for rhode4g arm/defconfig: add rhode extra config [PATCH] f2fs: flush data when enabling checkpoint back [PATCH] f2fs: flush data when enabling checkpoint back Revert "(CR) guamp: emmc add ffu" Removing debug config [PATCH] qseecom: Call INIT_WORK() before flush_work() guamp: emmc add ffu Caprip: modify the actuator noise reduction work flow. Caprip: modify the actuator noise reduction work flow. APP data lost after first R upgrade Porting of (CR) replace WARN with pr_debug for IPA api (CR) Make NCM driver compatible with windows disable CONFIG_SLUB_DEBUG for user builds disable CONFIG_DEBUG_PANIC_ON_OOM in userdebug builds Include inlinecrypt at config.gz to fix Q->R upgrade usb: add xhci-hw-lpm-disable dt property support kernel:ram overwritten by TZ logs to cause random panics Caprip: Add start/stop vibrating notification to actuator. arm64: defconfig: Actuator noise reduction. kernel: driver/vibrator: diff vol for long/short vib skip ipa assert for debug build (patch 2) skip ipa assert for debug build limit ion cache size Revert "(CR) power: Add wakeup source in battery historian logGing" power: print active wakeup source before suspend. alarmtimer: add debug to identify alarmtimers charger:driver:fix non power off issue for factory kill. arm64/defconfig: Capri: open nfc driver for Capri arm64/defconfig: disable debug fs on user build charger:support typec high 2A current at non-turbo product arm/defconfig: enable CONFIG_DEBUG_LIST on R soc: qcom: service-locator: enlarge timeout value arm/defconfig: Caprip: init kernel deconfig arm/defconfig: Capri: init kernel deconfig Revert "Revert "msm: media: uapi: Redefine NV12 format with different alignment"" Revert "msm: media: uapi: Redefine NV12 format with different alignment" clear SDAM for new battery profile loading. disable DEBUG_PANIC_ON_OOM on 3G ram device driver:qg:enale QG_DEBUG_SOC. Charge: fix slab out of bounds risk charge: qc2.0 adapter charge slow charge: Handle QC2.0 charger vbus rise 12V BCL: Enable charge bcl feature arm: setup: support mem= memory limit arm: call idle notifiers in CPU idle charger:improve micro-b input current to 1.9A per HW Capri bring up kernel:distinguish type-c and microb cdp input setting disable SPLIT_RSS_COUNTING to fix zero RSS issue charger:add battery test mode support for cebu. spi: disable_depth > 0 when pm runtime get sync driver/spi: spi driver suspend changes kernel: panel_notifier: Add new panel notify event type mmc:host:sdhci:Fix host->claimer NULL pointer problem Change ION fill mark from 100M to 16M to reduce the Lost RAM arm/defconfig: cebu: init kernel deconfig NFC VEN pin startup and shutdown sequence disable watermark boost charge:Config DCP 2A charge current tune memory configs charger:limit typec high to medium when hvdcp disabled charger:support 2A dcp charger arm64/defconfig: enable external usb camera power: reset: Use warm reset for dload mode Update kernel config of userdebug on Guam/GuamP to improve performance charger:duplicated apsd detection at pmi632 expose ssr_reason to ss_ramdump SD: print SD interrupt log charger:SW_ICL do not used at moto charger:factory image charGing soc over 75% usb audio: Let the usb sound card index from 1 kernel:USB DRP connect debug accessory test charge: config: config batt NTC for bornr NA Kernel: add sys node for panel supplier gpu/drm: Create panelRegDA sysfs to expose panel's reg pwrkey: change printk level to output to console Reboot: trigger warm reset when receive hw_warmreset cmd disable CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS for sts test Revert (CR): power: smb5: Clear HDC AICL arm/defconfig: borneo: init kernel deconfig guam serials: remove kernel config for PASR Revert "mm, vmstat: hide /proc/pagetypeinfo from normal users" arm/defconfig: guam: init kernel deconfig arm/defconfig: add 32bit debug config defconfig.mk: add arch specific debug enable psi for guam guamp Revert "defconfig: disable MEMCG for bengal 32" Fix QC rebase issue for dual role sysfs access issue ion: display ion total size in debufs node ion: dmabuf improve debugfs kernel:support huawei p10 5A cable bengal:Enable dual role usb interface smb5:Add dual role class support in smb5 usb:Add dual role class support sdcardfs: don't depend on reserved_mb to check free space sdcardfs: check the free space before creating files sdcardfs: copy inode size while getting attributes remove nfc function for guam charger:allow APSD re-run at factory usb detection CONFIG_FPR_FPC disable for rebase fingerprint fix defconfig.mk: Don't force make defconfig gitignore: ignore dts link guamp: arm64/dtsi enable regulator_fixed_voltage power: Add wakeup source in battery historian logGing arm64/defconfig: enable softlockup panic for debug arm64/defconfig : enable NFC kernel:add OCP charger current limitation guam: add touch module support Revert "(CR): config: disable CONFIG_PANIC_ON_REFCOUNT_ERROR" arm64/defconfig: disable debug config config: disable CONFIG_PANIC_ON_REFCOUNT_ERROR arm64/configs: sm4250: Enable USB console tty: msm_geni_serial: Support the match() callback printk: Keep boot console on if enabled arm64/config: support UAS of usb storage arm64/defconfig: enable usbnet drivers usb:configfs:Set udc_name NULL if attach failed usb/dwc3: msm: Enable all Debug Logs gadget: bcdUSB version back to 2.0 when not SuperSpeed usb: configfs: synchronize the secure and udc_name state usb: configfs: skip unregister gadget in secure usb: gadget: f_mtp: Return error if count is negative usb: gadget: storage: Support READ_TOC for MacOS usb: configfs: Implement secure attribute usb: configfs: Reset the use_os_desc flag usb: mass_storage: Add support for SC_REBOOT usb: f_mtp: Handle OS descriptors only when bound config:remove unused smb1355 config guam: input add touch class support arm64/config: enable DIAG_OVER_TTY drivers: tty: add tty diag module char: diag: add write done sync function panel_notify: add api for touch state guam: defconfig: enable panel notifications video: Add panel_notifier framework drm: mipi: disable Elvss dim of HBM for MIPI DSI Add new macro MIPI_DSI_MSG_READ gpu/drm: Create sysfs to expose panel vendor infor drm: mipi: Disable the MIPI DSI commands 0x2E and 0x3E drm/dsi: Implement DCS set disp brightness 2bytes guam: input add drm support defconfig: bengal: enable pstore power: Add function to show active wakelocks power: suspend: Save snapshot of gpio, vreg when suspend PM/Suspend: Print wall time at suspend entry and exit - Do not unload prov TZ app. add system restart warm and panic mode printk: increase log buffer size to 2k qpnp-power-on: Print system timestamp on Power key event regulator: core: Add sysfs node for debug pinctrl: msm: Add sysfs node for debug watchdog_v2: export watchdog trigger pinctrl: pinctrl-msm: do not dump unallocated GPIOs of: conditional status property arm64/dt add kpanic modules kernel:moto charger/battery driver enable config:battery 10k ntc enable guamp: input add touch support input add touch support kernel:JK50 NTC 10K report wrong temp arm/defconfig: update debug option defconfig: enable CONFIG_MEMCG config defconfig: bengal: Add moto defconfigs msm-poweroff: Store restart reason power: pmic-voter: Export Interfaces Do not build moto config while building MSI kernel/config: Add Moto ext_config feature soc: qcom: kconfig opt to build moto dtbs msm: kgsl: Zap performance counters across context switches msm: kgsl: Add a sysfs node to control performance counter reads soc: qcom: socinfo: Add soc information for KhajeP and KhajeQ spi: spi-msm-geni: Put device to suspend if PM status is active cnss2: Handle event processing after shutdown cfg80211: Add support to advertize OCV support i2c: i2c-msm-v2: Set frequency parameters to INT and validate drivers: thermal: validate cdev sysfs state request before using it USB: f_fs: Fix disconnect check during ongoing IO msm: diag: fix copyright diag: Validate the dci client before sending dci packet drivers: soc: qcom: Initialize blocking notifier as per lockdep usb: gadget: u_audio: fix race condition on endpoint stop usb: gadget: u_audio: Free requests only after callback defconfig: Enable usb peripheral audio on SXR2130 msm: ADSPRPC: Fix to avoid Use after free in fastrpc_init_process clk: qcom: vdd-level: Update the vdd level for CX on Khaje msm: ipa3: Fix to validate the NAT table entries during NAT table init msm: synx: fix copyright clk: qcom: gpucc: Update the vdd level for CX on Khaje diag: Ensure dci entry is valid before sending the packet usb: pd: Process request message as soon as it is received mmc: sdhci-msm: Update the MGPI SW check to avoid irq timeout msm: kgsl: Perform cache flush on the pages obtained using get_user_pages() dfc: reset tx queue clk: qcom: gpucc: Add support for higher frequency for Khaje msm: ipa3: fix to cleanup the dma allocation clk: qcom: vdd-level: Update the VDD levels for Bengal/Khaje include: qcom,rpm-smd-regulator.h: Add SUPER_TURBO corner usb: gadget: qdss: Don't clear debug_inface_enabled upon unbind msm: adsprpc: Handle UAF in fastrpc debugfs read usb: gadget: f_hid: Fix unbind issues usb: gadget: f_uvc: Fix unbind issues msm: synx: remove synx handle details from logging clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI mmc: sdhci-msm: Ensure SD card power isn't ON when card removed msm: kgsl: Fix gpuaddr_in_range() to check upper bound clk: qcom: clk-alpha-pll: Update the steps to slew the Lucid PLL spi: spi-msm-geni: Protect from register access in suspend state spi: spi-msm-geni: Keep device to suspend if PM call fails regulator: qcom_pm8008-regulator: Avoid deadlock in OCP handling usb: gadget: f_uac1: Add support for UAC1 function tzlog: update struct to get normal and fatal diag logs firmware: qcom: Remove garbage characters from qsee log firmware: qcom: add enlarged qsee log support firmware: qcom: encrypted tz and qsee log support input: misc: qcom-power-on: Add support to log KPDPWR status tzlog: update struct to get normal and fatal diag logs firmware: qcom: Remove garbage characters from qsee log firmware: qcom: add enlarged qsee log support firmware: qcom: encrypted tz and qsee log support fs: crypto: Maintain reference count for class keys usb: pd: always log when state machine work is queued leds: qti-tri-led: remove LED_KEEP_TRIGGER flag usb: pd: add usbpd_dbg() in pd_send_msg() diag: Update log and event mask code ranges usb: gadget: Clear string index for RMNET drivers: usb: enable SET_REPORT through EP0 feature clk: qcom: debugcc: Remove gcc_pcnoc_mpu_cfg_ahb_clk for QM215 clk: qcom: debugcc: Remove im_sleep/xo_div4 for QM215 af_unix: fix garbage collect vs MSG_PEEK net: split out functions related to registering inflight socket files uapi: sound: add bt external sink delay parameter mhi: core: Increase RDDM timeout to 350ms msm: npu: remove asynchronous network execution support usb: max-3421: Prevent corruption of freed memory mmc: host: Add recovery_finish crypto vops seq_file: disallow extremely large seq buffer allocations dfc: hold wakelock while powersave timer is running diag: Avoid possible out of bound access while sending masks diag: Sanitize non-hdlc pkt length against buffer capacity diag: Allow DCI packets to be copied separately msm: gsi: Stop Channel support when in Flow Control State msm: kgsl: Signal fence only if last fence refcount was not put media: v4l2: Allow ioctl type of "U" for video devices like usb camera msm: adsprpc: Handle UAF in process shell memory cnss2: Check if firmware asserts before power off for CBC usb: gadget: cdev: Add single packet and dynamic buffer support for Rx path net: qrtr: Use radix_tree_iter_delete to delete tx flow ipa: Null persistent pointers after free net: qrtr: Cleanup flow control during DEL proc qdss_bridge: handle usb write done event net: qrtr: Cleanup flow control during remote socket release leds: qpnp-flash-v2: Add support for dynamic torch current update thermal: Update copyright info for ADC_TM driver net: qrtr: Converting DEL_PROC command to BYE command defconfig: Enable SPMI TEMP ALARM driver for SPF targets msm: ipa3: Fix to NULL terminate the header pointer in proc header table usb: dwc3: Prevent deadlock when wakeup happens through pwr event irq thermal: Read raw values for ADC_TM calibration channels qdss_bridge: fix stuck issue when driver remove media: uvcvideo: Use cached memory for USB transfers defconfig: Enable Novatek NT36xxx Touch for tron target cnss2: Dump PCIE SOC scratch registers along with mhi reg dumps ANDROID: mm: use raw seqcount variants in vm_write_* msm: kgsl: Update the IFPC power up reglist msm: ipa3: Add wait queue for the adpl msm: ipa3: Fix to unlock mutex before return cnss2: Update bound checks for sbl reg dumps to SRAM mem range cnss2: Fix the pbl log sram start address for QCA6490 defconfig: arm: msm: 8937-Turn on coresight configs arm: msm: Add support for coresight etr for 32 bit soc: qcom: memory_dump: Support ETB/ETR register dump defconfig: arm64: msm: 8937-Turn on coresight configs drivers: thermal: Update a variable type in QMI encode logic BACKPORT: dma-buf: Move dma_buf_release() from fops to dentry_ops power: smb1398-charger: Toggle UVLO for Slave CP on USB removal msm: npu: handle system shutdown/reboot event properly dma-mapping-fast: Fix iova address leak with non-zero scatterlist offset net: qrtr: Change error logging in callback defconfig: Enable PMIC related configs for MSM8937_32 defconfig: Enable PMIC related configs for MSM8937_64 defconfig: Enable Charger/LED/RTC configs for MSM8937_32go power: linear-charger: Report the correct battery status at SOC=0 power: charger/fg: Add charger/fg/bms drivers for QM215 defconfig: Enable ADC thermal and SPMI configs for SPF targets thermal: Modify qpnp_adc_tm driver for IIO framework thermal: qpnp-adc: Add snapshot of qpnp-adc-tm driver msm: ipa3: Queue nop desc again if it fails diag: Drop packets to avoid memory exhaustion msm-ipa: fix use-after-free of rt_tbl net: qualcomm: rmnet: enable support for cksumv3 serial: msm_geni_serial: Avoid port pointer access for earlyconsole case rpmsg: glink: Change error logging to avoid throttling USB: gadget: f_uvc: Enable more controls for CT and PU serial: msm_geni_serial: Reduce stale delay added in stop_rx_sequencer msm: kgsl: Add timeline traces msm: kgsl: Add software timelines serial: msm_geni_serial: Reduce stale delay added in stop_rx_sequencer usb: f_mtp: Limit MTP Tx req length to 16k for ChipIdea fuse: give wakeup hints to the scheduler wait: add wake_up_sync() msm: ipa: Fix to free up all pending EOB pages msm: kgsl: Add the user API definition for timelines Add support for new HSP version usb: dwc3: dwc3-msm: optimize perf vote work i2c: i2c-qcom-geni: Change the high and low time for SCL net: qrtr: fix a kernel-infoleak in qrtr_recvmsg() tty: Fix ->session locking msm: ipa3: increasing the uC interrupt timeout value msm: kgsl: Fix out of bound write in adreno_profile_submit_time diag: Update log and event mask code ranges soc: qcom: Set QOS only to silver cluster dwc3-msm: Move override usb speed functionality outside edev check cnss2: Update board data file name for certain RF chip ID platform: qpnp-revid: Add REVID support for PM8010 regulator: qcom_pm8008-regulator: add support for PMIC PM8010 regulator: qcom_pm8008: allow multiple PM8008 instances with unique names block: pm: Fix possible unbalanced nr_pending usb: f_mtp: Don't handle OS descriptors from MTP driver power: supply: qpnp-smb5: specify different ICL for QC2 9V/12V level phy: msm: usb: Check VBUS state before accessing registers in suspend phy: msm: usb: Fail suspend if psy_type is USB or USB_CDP USB: phy: msm: Apply DP pulse for CDP during bootup from sm_work msm: adsprpc: Allocate buffer taking NULL byte into consideration clk: qcom: debugcc: Remove the gcc_camss_camnoc clocks fbdev: msm: Avoid runtime sus/res for DP/HDMI uapi: Add UAPI headers for slatecom_interface driver soc: qcom: smsm: Add wakeup capable flags to SMSM IRQ f2fs: don't sleep while grabing nat_tree_lock Ignore -106 error while opening channel byte-cntr: Don't write csr register when byte-cntr is disabled arm64: defconfig: Set qrtr wakeup for lito net: qrtr: Make wakeup timeout configurable mhi: core: Avoid race condition mhi channel prepare and M0 event msm: synx: acquire ref of synx handle in each function msm: ipa3: Fix to handle zero length frag skb packet cnss_utils: Update the copyright years of file to 2017, 2019-2021 FM: mutex changes modified Revert "qseecom: Add shmbrdige to allocate memory" Revert "ANDROID: net: ipv4: sysfs_net_ipv4: Add sysfs-based knobs for controlling TCP window size" Revert "RFC: ANDROID: net: ipv4: sysfs_net_ipv4: Fix TCP window size controlling knobs" ANDROID: xt_qtaguid: fix UAF race coresight: byte-cntr: Add ETR status check in bypass notifier clk: qcom: debugcc: Remove the gcc_camss_camnoc clocks usb: f_fs: Avoid invalid pointer access in ffs_fs_get_tree serial: msm_geni_serial: Enable SW flow on in runtime suspend defconfig: msm: Enable RPM SMD cooling device driver for KHAJE defconfig: Enable CONFIG_ION_SYSTEM_HEAP for bengal f2fs: fix the periodic wakeups of discard thread f2fs: allow to change discard policy based on cached discard cmds coresight: byte-cnter: limit error log output coresight: byte-cnter: Add ETR status check in bypass notifier msm: synx: fix synx_release_core race condition irqchip: mpm: Add mpm mapping for Khaje f2fs: change to use rwsem for cp_mutex cnss2: Assert on FW memory allocation failure msm: kgsl: Keep the context alive until its fences signal soc: qcom: secure_buffer: Fix the parameter passing to dmac_flush_range cnss_utils: Increase unsafe channel max num for 6G clk: qcom: gpucc: Update voltage fmax table for GPU clock for KHAJE msm: ipa3: Enable hardbyte limit for WAN consumer pipe dma-mapping-fast: Fix sg-list length calculation in fast_smmu_unmap_sg() qseecom: Add shmbrdige to allocate memory msm: kgsl: Use worker to put refcount on mem entry usb: phy: qusb: Add wrapper function for phy reset usb: pd: Clear vdm_tx if SVDM message is sent on SOP' drivers: thermal: virtual-sensor: Add new virtual sensor for MSM8917 defconfig: Enable CONFIG_ION_SYSTEM_HEAP for bengal futex: Handle faults correctly for PI futexes f2fs: fix the periodic wakeups of discard thread f2fs: allow to change discard policy based on cached discard cmds futex: Simplify fixup_pi_state_owner() futex: Provide and use pi_state_update_owner() usb: phy: Reset PHY while disabling dpdm regulator futex: Replace pointless printk in fixup_owner() soc: qcom: smem: Update size of legacy partition USB: diag: Add check for ctxt in usb_diag_request_size() driver: Fix compilation error with new sdclang 12 msm: ipa3: Changes to check disconnect in progress while sending data msm: adsprpc: Protect maps using map mutex USB: f_diag: Report Max request size as 16k for ChipIdea defconfig: Enable thermal emergency poweroff delay mmc: sdhci-msm: Switch to required pad voltage for vbias bypass mmc: sdhci-msm: Add vbias bypass specific hw WA flag Revert "mmc: sdhci-msm: Add support to vote for vdd io parent regulator" defconfig: kona: Add CONFIG_AQFWD for RB5 board clk: qcom: gpucc-khaje: Remove NOM_L1 fmax corner mmc: sdhci: Avoid dumping registers when SD card removed FM: Fix for no sound issue in FM Audio usb: gadget: Do not disconnect unregistered dev HID: add HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE for Gamevice devices defconfig: kona: Make configs required to pass CTS tests mandatory UPSTREAM: HID: playstation: Add DualSense player LED support UPSTREAM: HID: playstation: Add microphone mute support for DualSense UPSTREAM: HID: playstation: Add initial DualSense lightbar support UPSTREAM: HID: playstation: Fix unused variable in ps_battery_get_property UPSTREAM: HID: playstation: Fix array size comparison (off-by-one) BACKPORT: HID: playstation: Report DualSense hardware and firmware version UPSTREAM: HID: playstation: Add DualSense accelerometer and gyroscope BACKPORT: HID: playstation: Add DualSense classic rumble support msm: adsprpc: Lock list before removing node msm: pcie: Add ASM2806 PCIe device and vendor id TREAM: HID: playstation: Track devices in list UPSTREAM: HID: playstation: Add DualSense touchpad support UPSTREAM: HID: playstation: Add DualSense battery support UPSTREAM: HID: playstation: Add DualSense Bluetooth support UPSTREAM: HID: playstation: Use DualSense MAC address as unique identifier defconfig: arm64: msm: Enable CTI_SAVE_DISABLE for SDM660 UPSTREAM: HID: playstation: Initial DualSense USB support defconfig: Enable smb1394 driver for khaje coresight-tmc-etr: remove mem_lock when call usb_qdss_close soc: qcom: socinfo: Add support for kona iot soc-id defconfig: sdm660: Add defconfig changes for camera usb: f_qdss: Flush connect_work in qdss close clk: qcom: gpucc: Update the post div ops for GPUCC PLL for KHAJE clk: qcom: clk-alpha-pll: Update implementation for Zonda PLL coresight: tmc: fix spinlock bad magic/usb_qdss_close scsi: ufs-qcom: fix the issue of get wrong ufs clk status from sysfs node futex: Ensure the correct return value from futex_lock_pi() defconfig: arm: msm: Enable debugcc config for SDM439 dt-bindings: Add gpr header required for AR on kona clk: qcom: gpucc: Update the post div ops for GPUCC PLL for KHAJE clk: qcom: clk-alpha-pll: Update implementation for Zonda PLL drivers: thermal: Add support for RPM SMD cooling device diag: Avoid reallocating if buffer supports hdlc max pkt size mhi: core: Fix find_last_bit() usage diag: Update log and event mask code ranges drivers: rpmh: Always bug_on() upon timeout in rpmh_write_batch() clk: qcom: mdss: Fix flicker issue at early boot of kernel drivers: can: mcp25xxfd: Remove return 0 for void function Revert "kbuild: force to build vmlinux if CONFIG_MODVERSION=y" msm: ipa3: Enabling the HOLB on USB consumer pipe for APQ target soc: qcom: dcc: Avoid dcc_sram_writel overflow qxr-stdalonevwr: changes for oracle mic bias soc: qcom: dcc: Avoid huge memory allcation defconfig: msm8937_64: Update the defconfigs soc: qcom: dcc: Use sscanf instead of strlcpy power: qpnp-qg: Fix a DT property name mmc: host: OTA upgrade scenario support for multi fs combination drivers: cpuidle: lpm-levels: Correct missing list initialize serial: msm_geni_serial: Reset UART error code to default during shutdown serial: msm_geni_serial: Add Workqueue to dump the registers cnss2: Add code to do PCIe L2 suspend during shutdown pinctrl: Update reserved gpio list for Khaje config: enable dcc driver soc: qcom: dcc: Add snapshot of qcom-dcc driver serial: msm_geni_serial: Bailout from suspend if RX data is pending diag: Update log and event mask code ranges usb: f_fs: Free descriptors in func_unbind clk: qcom: alpha-pll: Update Alpha PLL width for Zonda PLL usb: gadget: f_rndis: Add 'wceis' flag to indicate 'Wireless' RNDIS clk: qcom: khaje: Update clock changes for GCC/GPUCC/DISPCC clk: qcom: cpu: Add support to L2 PC latency for SDM429/39 clk: qcom: cpu-sdm: Add cpu clock driver for SDM439 dt-bindings: clock: Add support for CPUCC clock ids for SDM439 clk: qcom: Add LPM Latency support for CPU clocks clk: qcom: clk-pll: Add support for SPM event in PLL serial: msm_geni_serial: Reduce wait for transfer delay usb: f_fs: Avoid use-after-free of ffs_data include: uapi: Add support for 128x32 alignment of NV12 defconfig: Enable refgen regulator driver for khaje clk: qcom: rcg2: Force enable the RCG before update for GFX mhi: core: Notify all mhi client's for PCIe link down recovery power: smblite: Fix max_limit_ma for smblite msm: ipa3: Fix to prevent Integer Overflow dcc_v2: Control the cti trigger of each link list individually msm: kgsl: Fix memory leak for anonymous buffers defconfig: Enable remaining defconfigs clk: qcom: debugcc: Add cpucc debugcc support for SDM439 clk: qcom: gcc: Correct the frequencies in freq_tbl for SDM439 clk: qcom: gcc: Add GPLL6 fixed factor support for qm215 cnss2: Add code to notify mhi about link down defconfig: disable per-cgroup pressure tracking defconfig: arm64: msm: Enable MSM_DEBUG_LAR_UNLOCK for msm8937 defconfig: arm: msm: Enable MSM_DEBUG_LAR_UNLOCK for msm8937 soc: mem_dump: Enable MSM_DEBUG_LAR_UNLOCK for MSM8937 defconfig: sdm660: Add missing coresight configs From bbfaa7d36c1eb465f120f2a3dfe25c1fe022195d Mon Sep 17 00:00:00 2001 From: KaiChieh Chuang <kaichieh.chuang@mediatek.com> Date: Thu, 7 Mar 2019 07:51:09 +0800 Subject: [PATCH] ASoC: dpcm: prevent snd_soc_dpcm use after free soc: qcom: Return correct error code when program_key fails fails msm: ADSPRPC: Fix deadlock during SSR soc: qcom: bam_dmux: Skip disconnect call on bootup usb: dwc3: Use pwr_evt_irq to wakeup if dp/dm directly connected to GIC BACKPORT: cgroup: make per-cgroup pressure stall tracking configurable usb: dwc3-msm: Enable pwr_evt_irq for wakeup after LPM is done power: qpnp-qg: Add support to clear soh upon first profile load msm: kgsl: Make sure gpu-speed-bin-vectors has the correct size msm: kgsl: Add multiple fuses based speed bin Change the subprocess argument to fix the build issue include: uapi: Add QBG UAPI headers defconfig: Enable AW2016 LED driver for khaje clk: qcom: gcc: Add halt check for MSS clocks for SDM660 msm: adsprpc: Handle UAF in process shell memory msm: camera: Add gpio based flash driver support leds: aw2016: update breath sysfs node name Use environment variable to find unifdef tool kernel_headers: Explicitly run headers_install under 'sh' dt-bindings: msm: Add bindings for flash type clk: qcom: mmcc: Change halt to halt_voted for SDM660 msm: kgsl: Keep private intact until last refcount is put clk: qcom: khaje: Update freq_tbl and pll configurations defconfig: Enable power delivery on Khaje coresight-tmc-etr: Fix deadlock issue while switching mode defconfig: Enable memory cgroup config leds: add initial driver for AW2016 LED device pinctrl: Update PINCTRL macro definition for Khaje input: touchscreen: nt36xxx: Add Chip id and firmware ANDROID: Incremental fs: Set credentials before reading/writing pinctrl: Add wakeup GPIO register and bit information for khaje defconfig: khaje: Enable khaje pinctrl pinctrl: msm: add range of reserved gpio for Khaje defconfig: disable debug configs ANDROID: Incremental fs: fix up attempt to copy structures with READ/WRITE_ONCE mmc: cqhci: Handle cqhci crypto configurations correctly disp: uapi: drm: Add fsc format modifier Revert "clk: qcom: Add enable_safe_config for gfx3d_clk_src" mhi: core: Prevent doorbell with invalid tre msm: adsprpc: Remove bad ioctl log pinctrl: qcom: Add support for Khaje SoC pin control dt-bindings: msm: Add bindings for flash type msm: ipa: Fix array out of bound and use after NULL check msm: ipa: Fix to check only reset IPA stats can have data as NULL msm: ipa: Fix pointer checked for NULL may be used msm: kgsl: Remove sysfs entries after releasing memory msm: kgsl: Remove debugfs directory inside lock leds: led-class: Retain the latest user brightness request leds: led-class: add support for max_brightness store mmc: core: Add at least 3 mclk cycle delay before next command after ACMD41 FM: Reduce high scan time soc: qcom: Add check to handle out of bound access defconfig: Enable CONFIG_MSM_TZ_LOG for 8937-perf HID: make arrays usage and value to be the same md: dm-default-key: Override dun value for selected bios defconfig: khaje: Add support for clock controllers clk: qcom: debugcc: Add support for Debugcc for KHAJE fbdev: msm: Avoid race condition while iommu mapping from DSI flow md: dm-default-key: Fix IV with set_dun flag defined cnss2: Log SW_CTRL GPIO value if PCIe link training fails diag: Update log and event mask code ranges camera: smmu: fix for incorrect populated sids msm: npu: Use spinlock for ipc write to avoid context switch msm: kgsl: Fix nr_removed calculation while reducing pools Avoid fatal error if ICE registers are not defined rpmsg: qcom_smd: Return error if receive callback is not present clk: qcom: dispcc: Add support for dispcc driver for KHAJE phy-msm-usb: Add mutex for protecting msm_otg_reset wil6210: Drop unicast sub frame if part of a multicast amsdu clk: qcom: gpucc: Add Graphics Clock controller for KHAJE clk: qcom: gcc-khaje: Add GCC support for KHAJE dt-bindings: clock: gcc-khaje: Add support for USB3 MUX and BCR msm: ipa3: Fix to change the tag process timeout value in cleanup usb: dt-bindings: Add USB QMP PHY registers definition for Khaje power: supply: smb1398-charger: disable WIN_OV deglitch for SMB1394 serial: msm_geni_serial: Add ioctl for sending uart error codes to BT host defconfig: Enable SDM429 configs mmc: cmdq_hci: Notify sdhci for enhanced strobe mmc: sdhci-msm: Skip PWRSAVE_DLL setting for sdcc minor verion 0x4D clk: qcom: Add enable_safe_config for gfx3d_clk_src fbdev: msm: Increment commit count during null commit msm: mdss: clear fences in ESD panel dead scenario defconfig: Add HSUSB PHY configurations to Khaje defconfig: Enable SDM429 configs diag: Add debug logs while reading masks into userspace tty: serial: msm: Add suspend resume support defconfig: Enable config CONFIG_UTS_NS for msm8937_32 f_uac2: increase number of requests to 32 for UAC2 defconfig: Enable SDM429 configs USB: dwc3: gadget: Queue data for 16 micro frames ahead in future USB: uvc: Fix video quality issues for streaming video over USB USB: dwc3: gadget: Increase TX fifo size for isochronous endpoint power: smb1398: Add support for SMB1394 clk: qcom: mdss: fix blank / un-blank issue for DSI 12nm pll msm: camera: Add reset logic for snps phy msm: ipa: Fix considering prefetch buf size when mapping usb_bam: Set default BAM type as DWC3 if not specified dt-bindings: clock: Add support for KHAJE clock ids msm: drm: uapi: add rounded corner uapi USB: gadget: f_uvc: Enable required controls for CT and PU vidc_3x: Change to avoid unloading firmware msm: camera: Update SDM439 csiphy driver ipa: Remove overwrite copy Add support for new comanche 1.3 soc ID wil6210: check integrity of received AMSDU packets wil6210: Drop plaintext frames on secure network wil6210: AP should not forward eapol packets netfilter: nf_conntrack_h323: lost .data_len definition for Q.931/ipv6 vidc_3x: Use static table governor for bus voting usb: f_qdss: Avoid wait_for_completion if qdss_disable is called msm: ipa2: free the skb defconfig: Enable ARCH_KHAJE msm: Add initial support for Khaje in Kconfig platform soc: qcom: socinfo: Add soc information for khaje defconfig: Enable config CONFIG_DEBUG_FS for msm8937_64 clk: qcom: clk-alpha-pll: Add support for FSM legacy mode sysfs: ufs-qcom: Add sysfs entries for flashpvl scsi: ufs-qcom: Add one vendor specific sysfs group msm: ipa3: Fix to copy num of rules from user space defconfig: remove CONFIG_SECURITY_PERF_EVENTS_RESTRICT msm: kgsl: Fix snapshot collection for ib1 input: qti-haptics: ensure valid pointer when calling kfree msm: kgsl: Avoid flooding kernel log with invalid ioctl errors rpmsg: qcom_smd: Add check for remote state in send api msm: kgsl: Flush mem workqueue and retry if failed to find SVM region msm: camera: Update csiphy data rate icnss2: Add support for MHI state info soc: qcom: ssr: Enable the irqs before powering up subsystems icnss2: Add new ipc context to log smp2p related logs diag: Update log and msg mask code ranges ARM: defconfig: Enable config for msm8937_32go usb: gadget: f_cdev: Fix use after free of port in f_cdev defconfig: arm64: Enable CONFIG_HID_NINTENDO for QM215 defconfig: arm: Enable CONFIG_HID_NINTENDO for QM215 defconfig: Enable config for msm8937_32 fbdev: msm: Handle rotator init failure correctly tty: Fix ->pgrp locking in tiocspgrp() max31760: add support for additional registers Revert "ANDROID: security,perf: Allow further restriction of perf_event_open" USB: composite: Increase the IN endpoint buffer allocation USB: f_fs: Avoid NULL pointer dereference during epfile_io() USB: gadget: f_fs: Allocate extra buffer for IN endpoint USB: f_serial/f_acm: Increase the IN endpoint buffer allocation USB: f_fs: Increase the IN endpoint buffer allocation leds: qpnp-flash-v2: Add support to control flash ramp time msm: vidc_3x: Correct the arguments type to align with format string msm: vidc_3x: correct the flags set for bus mode defconfig: msm8937_32: Disable BUILD_ARM64_APPENDED_DTB_IMAGE flag defconfig: msm8937_64: Disable BUILD_ARM64_APPENDED_DTB_IMAGE flag soc: qcom: pil: Reuse carveout region for mdt header clk: qcom: gcc: Change rate max values for SDM439 defconfig: msm8937_32go: Disable BUILD_ARM64_APPENDED_DTB_IMAGE flag qseecom: Update correct parameters before sending to smcinvoke msm: ADSPRPC: Add extra checks for Unsigned request msm: camera: QM215 delay during power up sequence config: enable rmnet_data, msm_rmnet_bam driver msm: kgsl: Add A504 GPU support for SDM429 defconfig: Enable MSM8937 and SDM439 config defconfig: Enable SDM439 config defconfig: Enable MSM8937 and SDM439 config defconfig: Enable default-key driver for msm8937_32 defconfig: Enable default-key driver for msm8937_64 defconfig: Add Radio_IRIS related config parameter defconfig: Add Radio_IRIS related config parameter cnss2: Add CNSS_BUS_EVENT to report bus info cnss2: Add update_uevent API to notify CNSS event rpmsg: qcom_smd: Ensure ordering of channel info updates defconfig: Enable WCNSS configs soc: qcom: bam_dmux: Abort open/close cmd during SSR diag: Use valid data_source for a valid token Add support for new HSP version mmc: sdio: Retune sdio after resume diag: Copy length and buffer locally to send to userspace client diag: Update log mask code ranges config: enable new rmnet_data driver regulator: qpnp-lcdb: Add n_voltages property for LCDB regulators spi: spi-geni-qcom: Set IOEB for MHI on SPI RX only case diag: Prevent out of bound write while sending dci pkt to remote drivers: rpmsg: fix to avoid dump stack in rpm-smd driver msm: kgsl: Enable content protection for A505 GPU serial: msm_geni_serial: Bypass Flow control lines from termios defconfig: Enable config for msm8937_64 iommu/arm-smmu: add option to enable halt/resume of SMMU config: enable new rmnet_data driver usb: gadget: Add snapshot of USB RMNET Function driver extcon: Initialize blocking notifier while registering clk: qcom: gcc: Add GCC driver node support for SDM429 icnss: Avoid qmi register/unregister in case of qmi failure icnss2: Avoid qmi register/unregister in case of qmi failure tcp: adjust rto_base in retransmits_timed_out() tcp: retry more conservatively on local congestion tcp: create a helper to model exponential backoff tcp: always set retrans_stamp on recovery tcp: address problems caused by EDT misshaps cnss2: Add sysfs support for configuring qtimer sync interval iommu/arm-smmu: Allocate non-coherent memory for secure pagetables defconfig: msm: Enable dm-snapshot for msm8937_32go defconfig: msm: Enable dm-snapshot for msm8937_32 defconfig: msm: Enable dm-snapshot for msm8937_64 clk: qcom: clk-pll: Round off req_rate in determine rate include: uapi: Add charger specific headers for QM215 clk: qcom: smd-rpm: Add RPM-SMD clock support for SDM429 defconfig: Enable USB BAM and SMD configs mhi: dev: netdev: Set the mac header to 0 for skbs msm: adsprpc: overflow vulnerability by race condition in adsprpc driver defconfig: Enable USB BAM and SMD configs defconfig: Enable default-key driver for msm8937_32go signal: Avoid corrupting si_pid and si_uid in do_notify_parent defconfig: Enable MDSS PLL for msm8937 defconfig: Initial defconfig files for MSM8937_64 ice: add return value for functions where ICE is disabled cnss2: Check for BT Enable GPIO in QCA6390 soc: qcom: Enable MSM_TZ_SMMU msm8937 usb: gadget: Setup DMA ops for OTG's gadget devices fbdev: msm: Enable mdss rotator driver defconfig: Enable MDSS PLL config for msm8937_32 defconfig: Add Radio_IRIS related config parameter cnss2: Use unified API to get RDDM and recovery timeouts cnss2: Add new API to get QMI related timeouts cnss2: Add support to populate device memory information iommu: Update function for ARM_MSM_SECURE io pagetable type Don't use gpio_free() for output gpios clk: qcom: gcc: Add gcc-mdss driver node support for QM215 RPMSG driver changes for FM in msm-4.19 defconfig: Enable USB BAM configs defconfig: Initial defconfig files for MSM8937_32 cnss2: Add CNSS wrapper function for msm_pcie_reg_dump() clk: qcom: gcc: Add GPLL3 derived frequencies for qm215 iio: spmi-vadc: Add option to specify scale-fn-type in devicetree iio: adc: spmi-vadc: Add adc support for SPF targets cfg80211: Adjust 6 GHz frequency to channel conversion iommu: Do not set COHERENT flag for secure pagetable allocation soc: qcom: smp2p: Add proper retrigger detection drivers: soc: qcom: Fix compilation errors clk: qcom: mdss: Update VCO Clk enums for mdss-dsi-28lpm dt-bindings: clock: Add mdss-28nm-pll-clk for legacy targets drivers: soc: qcom: Add bam dmux smem state handling net: ethernet: Add snapshot of RMNET BAM driver scsi: ufs: Fix IOCTL error checking for input buffer clk: qcom: mdss: fix blank / unblank for DSI 28nm pll soc: qcom: Add support for MSM_TZ_SMMU iommu/arm-smmu: Do not write to slave side protected context banks net/sched: fix race between deactivation and dequeue for NOLOCK qdisc uio: msm_sharedmem: By pass failure for hyp_assign_phys defconfig: enable PSI config for MSM8937_32go spmi: spmi-pmic-arb-debug: replace ioremap_resource with ioremap qcom-geni-se: Avoid dumping of GENI registers in console dm verity: skip verity work on I/O errors when system is shutting down Return Immediately if failed to set to reset gpio state msm: adsprpc: Clean DMA handles maps in case of error diag: Prevent possible out of bound copy to userspace ARM: decompressor: avoid speculative prefetch from protected regions power: smb5-lib: Fix race conditions for typec power role msm: mdss: update the DSI 12nm PHY programming sequence msm: mdss: update the power down sequence for DSI 12nm PHY msm: ice: Fix stack-out-of-bound erros on kasan builds clk: qcom: debugcc: Add cpucc debugcc support for QM215 msm: ipa: Fix use-after-free in ipa3_alloc_counter_id msm: ipa: correct the pointer in idr for FnR stats counter fbdev: msm: update event callback function to perform ESD check ANDROID: xt_qtaguid: Remove tag_entry from process list on untag clk: qcom: mdss: update dsi 12nm clock driver msm: ipa: fix race condition on PM vote on sys pipes msm: ipa3: Fix to null pointer access radio: iris: Add snapshot of iris FM radio support defconfig: Add WCNSS related config parameter wcnss: Update pm wake api's for 4.19 kernel qtee_shmbridge: update copyright diag: Update event and log mask code ranges arm-smmu: add bitmap for secure context banks iommu/arm-smmu: override writel_relaxed in smmu global address space qseecom: Add flush_work based on flag icnss2: Add handler for SMMU faults wcnss: Add wcnss snapshot to msm-4.19 mm: cma: Print correct request pages defconfig: Add clock controller support for QM215 clk: qcom: cpu-sdm: Add cpu clock driver for SDM dt-bindings: iio: Add scale function for QM215 batt therm platform: msm: Add USB BAM support to ChipIdea/RMNET leds: vibrator: Add snapshot of vibrator driver tty: serial: msm_geni_serial: Resolve race btw stop rx and cancel rx msm: kgsl: Access map_count only if entry is successfully allocated tty: serial: msm_geni_serial: Fix timeout for Rx abort defconfig: Enable chipidea USB controller configs msm: sde: Update rotator OT settings for sdm660 msm: mdss: dsi: set backlight handle to NULL in error case clk: qcom: mdss: Add check to read the gdsc status msm: npu: Don't send interrupt if command has been consumed msm: ipa: Send actual DL flt rule length to Q6 sde: rotator: use shared lock while accessing vbif clk: qcom: clk-pll: Add support for HF PLL Ops clk: qcom: Add enable/disable to clk_regmap_mux_div_ops clk: qcom: Update parent map to use parent_map struct qseecom: Update the error val check ARM: qcom: add board config support for sdm439 and sdm429 ARM: qcom: Add board config support for msm8937 Set the default slot for Full Disk Encryption key to 31 msm: ipa: Enable wdi3 API in ipa3 config iio: ch101: Return -ENODEV when get expander GPIO failed USB: EHCI: Add MSM Host Controller driver usb: gadget: Add snapshot of ChipIdea driver usb: phy: Add snapshot of PHY msm usb driver qdss_bridge: fix kfree issue rpmsg: glink: do not break from interrupt handler msm: kgsl: Set correct values for SMMU protect register for A3xx clk: qcom: clk-debug: Add support to dump GDSC registers usb: dwc3: gadget: Prevent double free scenario for cancelled_list diag: Enable graceful transfer of transport diag: Enable diag over rpmsg communication for adsp drivers: char: Fix compilation error for smd pkt driver defconfig: msm: Enable smd pkt driver for QM215/SDM429/439 clk: qcom: mdss: update mdss-dsi-28lpm clk names rtc: rtc-pm8xxx: add support for PM8916 RTC msm: mdss: Fix race condition while iommu mapping from DSI flow defconfig: enable MDSS PLL config for MSM8937_32go msm: ipa: fix potential race condition ioctls dt-bindings: clock: Add support for CPUCC clock ids for QM215 Add support for new versions for BT chip smcinvoke: Update the correct parameters and result from qseecom misc: add qrc ioctl functions misc: add qrc_core and qrc_uart diag: Sanitize the mempools with pool data size check socinfo: Add socinfo support for sdm450 socinfo: Add socinfo support for msm8953 ARM: qcom: Add board config support for sdm450 ARM: qcom: Add board config support for msm8953 usb: dwc3: Enable parkmode for Gen1 controllers msm: camera: Fix for HFR120 crash while msm: gsi: Using kzalloc instead of devm_kzalloc clk: qcom: debugcc: Add debugcc support for QM215 clk: qcom: gcc: Add support for GCC clock driver usb: f_diag: Replace ERROR with pr_err clk: qcom: mdss: add dsi phy 12nm clock dt-bindings: clock: Add 12nm clock device tree bindings rpmsg: qcom_smd: Add NO_SUSPEND flag for smd edge irq rpmsg: qcom_smd: Read data of size equal to fifo size rpmsg: qcom_smd: Read data of size greater than fifo size rpmsg: qcom_smd: Add ipc logging for smd driver msm: kgsl: Change start variable type to int in kgsl_iommu_add_global rpmsg: smd: Signal the TX channel that smd driver read data rpmsg: qcom_smd: Add GET/SET signal support rpmsg: qcom_smd: increase bounce buffer size drivers: rpmsg: Add smd driver module at post core init kona_defconfig: Enable hidraw config usb: misc: nb7vpq904m: update suspend and resume function msm: kgsl: Use pid struct to find the process to reclaim mm: process_reclaim: pass pid struct instead of tgid msm: kgsl: Change vma->vm_file to shmem file mm: process_reclaim: skip target_vma iio: qcom-rradc: Update logic to monitor health of RRADC peripheral cfg80211: export regulatory_hint_user() API msm: mdss: update MDSS DSI ULPS configuration fbdev: msm: call pxl clk unprepare during suspend msm: mdss: add support to handle LP_RX_TO/BTA_TO errors for DSI 12nm PHY msm: mdss: perform DSI PHY s/w reset for 12nm PHY during unblank msm: mdss: update the MDSS DSI ULPS exit sequence msm: mdss: add support to program of HSTX drivers for DSI 12nm PHY msm: mdss: update DSI ULPS entry/exit sequence msm: mdss: add support for DSI 12nm PHY in DSI driver net: qrtr: Excessive logging casuing boot failure defconfig: msm: enable thermal efuse driver for kona iot drivers: thermal: qcom: Add driver to modify thermal zone based on efuse mmc: core: Set cqe_enabled flag correctly serial: msm_geni_serial: Fix false warning for reset failure Kconfig: enable default config of cpu freq qcom for msm8953 msm: Add initial support for sdm450 Kconfig platform msm: Add initial support for msm8953 Kconfig platform Revert "cnss2: Dump mhi debug regs on receiving mhi WAKE event cb" msm: pcie: Restore BME for RC after link_down recovery on SBR msm: ADSPRPC: Substitute vfs check with flags icnss: Allow register/unregister driver execution in serial manner drivers: char: reset signal support for smd channels drivers: char: add stream like read support crypto: Fix possible stack out-of-bound error drivers: irqchip: qcom: Add MSM8953 pin data for MPM defconfig: Enable EXT4 configs drivers: iio: enable compile for TDK sensor power: smb2: Enable read/writing of Type-C Rp value usb: gadget: f_mass_storage: Remove runtime async resume drivers: iio: add Makefile and Kconfig for TDK chirp sensor backlight: qcom-wled: Add "qcom,sync-dly" device tree property usb: dwc3: Issue ENDTRANSFER cmd on ep0 unconditionally coresight: disable the path when enable source link fail qcom: fg-memif: correct timeout condition for memory grant power: qpnp-fg-gen3: Add a property to reset FG BCL device power_supply: Add FG_RESET_CLOCK property qseecom: Check error when allocating coherent buffer defconfig: Enable CPR Regulator for msm8937go diag: Acquire spinlock for list delete operation rpm-smd: Remove redundant spinlocks which are not required regulator: qpnp-lcdb: Disable step voltage ramp for PM8150L V3 power: smb5-lib: Query POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN defconfig: Enable Incremental FS support for msm8937_32go media/dvb: Deregister dma buffers fom shmbridge msm: kgsl: Show max gpu temperature USB: pd: Add support for enabling PD2.0 only as source usb: gadget: Clear transfer started flag if endxfer cmd times out backlight: qcom-spmi-wled: Change the SYNC toggle sequence USB: pd: Restart host mode in high speed if no usb3 & dp concurrency defconfig: Initial defconfig files for MSM8937_32go TDK-Robotics-RB5 drivers source code files diag: Update event and log mask code latest range clk: qcom: smd-rpm: Add RPM-SMD clock support for QM215 fs: crypto: Add support for legacy pfk based FBE fastrpc : fastrpc porting for kernel 4.19 SPF targets qdss_bridge: fix memory leak issue bindings: clock: qcom: Add support for clock IDs for QM215 drivers: char: msm_smd_pkt: Return error in case driver is not ready kernel: driver: Added support msm_smd_pkt driver dt-bindings: clock: Add support for GCC clock ids for SDM429 wigig_sensing: treat data ready as deep sleep exit when needed usb: dwc3: gadget: Replace dev with its parent sysdev in ep_disable usb: dwc3: gadget: Check controller status with endpoint enable/disable coresight: Make coresight functions as inline cnss2: WAR to trigger self-recovery for link recover callback net: qrtr: Excessive logging casuing boot failure pinctrl: Add support for msm8917 pinctrl pinctrl: Add support for msm8937 pinctrl msm: pcie : Extend link recovery for config space access failure cnss_prealloc: Add a 128kB to prealloc pool rpmsg: qcom_smd: allow smd create device if remote state is closing usb: pd: Add support to disable pps capability nl80211: add error messages to nl80211_parse_chandef() cnss2: Increase prealloc table to satisfy latest driver requirement power: smb5-lib: Add additional check to exit charge-termination WA cnss2: Dump mhi debug registers on receiving mhi WAKE event cb msm:ADSPRPC :Fix to avoid Use after free in fastrpc_internal_munmap qseecom: Add boundary checks between two subsequent fields diag: Read from USB without holding spinlock serial:msm_geni_serial: Handling the cts counter in uart driver arm64: fix bootloader_memory_limit usb: phy: qusb2: Update tune value for host mode coresight: cti: Solve boot up issue cnss2: retry mhi suspend in case packets are pending in MHI layer clk: qcom: mdss: Enable mdss 28lpm pll driver msm: pcie : Notify client driver on reading FF's msm: kgsl: Use pid struct to find the process to reclaim mm: process_reclaim: pass pid struct instead of tgid msm: kgsl: Change vma->vm_file to shmem file qcom: step-chg-jeita: Add support for jeita fcc scaling mm: process_reclaim: skip target_vma mhi: core: Check PCIe link status before accessing MHI registers power: qpnp-smb5: Add DT option to enable JEITA-ARB handling power: smb5-lib: Improve the charge-termination WA handling msm: pci: print PCIE LTSSM state at DRV suspend and resume msm: kgsl: Deregister gpu address on memdesc_sg_virt failure diag: Handle drops for diag over rpmsg diag: Enable diag over rpmsg communication for modem diag: Enable diag over rpmsg communication for wcnss usb: gadget: gsi: Ensure the doorbell is blocked before suspend drivers: irqchip: qcom: Add MSM8937 pin data for MPM ARM: qcom: Add board config support for qm215 soc: qcom: socinfo: Add supprot for QM215 QRD soc-id soc: qcom: socinfo: Add support for msm8917 soc-id soc: qcom: socinfo: add support for sdm429 and sdm439 soc: qcom: socinfo: Add support for msm8937 soc-id arm/arm64: Kconfig: Add support for qm215 ARM: qcom: Add board config support for msm8917 arm64: Kconfig: Add ARCH_SDM439 and ARCH_SDM429 support arm64: Kconfig: Add support for msm8937 on msm-4.9 msm: adsprpc: null pointer check for sctx regulator: qpnp-lcdb: fix race between SC interrupt and lcdb enable msm: kgsl: Protect the memdesc->gpuaddr in SVM use cases msm: kgsl: Stop using memdesc->usermem net: sch_generic: fix the missing new qdisc assignment usb: gadget: composite: Add spinlock protection for usb string descriptor msm: kgsl: add condition to check gpuhtw_llc support icnss: Add code to send qdss mode and sysfs interface for qdss icnss: Add code to downdload qdss trace config leds: qpnp-flash-v2: Fix out-of-bound array access mm: skip speculative path for non-anonymous COW faults ARM: msm: Add board config support for 32 bit bengal apq iot cnss2: Add code to fix a print error in update timestamp api icnss2: change to avoid device crash if RF card is not present mmc: sdhci-msm: read this reg IPCAT_MINOR_MASK to sdhc host pci: msm: Add support for linkdown recovery on hot reset net: qrtr: print error case for qrtr receive spi: spi-geni-qcom: Calculate transfer timeout dynamically spi: spi-geni-qcom: Configure DFS index and clk before doing set rate cnss2: Add delay for pci link training retries Revert "msm: kgsl: Add GPUCC register dumps to A6xx GPU snapshot" cnss2: Add code to handle idle-restart failure gracefully icnss2: Clear SMP2P data during SSR Revert "msm: kgsl: Add GPUCC register dumps to A6xx GPU snapshot" net: qualcomm: rmnet: memset before sending genl response diag: Add support for querying diagid for wpss subsystem wil6210: add ability to help debug tx latency regulator: cpr: add snapshot of cpr-regulator driver scsi: ufshcd: Fix double release of hba walt: Add window rollover trace event msm: kgsl: Correct the refcount on current process PID USB: gadget: Add support for superspeed plus for UAC2 & UVC serial: msm_geni_serial: Perform Abort sequence for cancel failure serial: msm_geni_serial: Correct start rx sequence serial: msm_geni_serial: Pull RFR before stop_rx for uart Revert "nl80211: fix non-split wiphy information" qseecom: use legacy command for slateapp USB: f_uac2: Update terminal types as mic and speaker defconfig: kona: Enable USB UVC drivers usb: gadget: f_uvc: Fix video streaming quality issues usb: gadget: f_uvc: Fix crash on disconnect/connect during streaming msm: npu: Prevent unpaired power vote/unvote via sysfs node qdss_bridge: fix use-after-free is on cdev_put defconfig: set CONFIG_HZ = 250 for Bengal USB: uvc_video: Check for return value before halt bulk endpoint USB: configfs: Clear deactivation flag in configfs_composite_unbind() msm: ADSPRPC: Add check to avoid out of bound scenario uapi: ipa: Support uc header proc ctx for DSCP insertion usb: dwc3: core: Destroy ipc log context on remove msm: ipa: add check to see if pm client is not NULL cnss2: Fix KW issues for pointer check and variable init ANDROID: vfs: d_canonical_path for stacked FS msm: ipa3: Add change to increase timeout value defconfig: arm64: msm: enable CONFIG_RB5_GPIOS_ENABLE msm: driver: Add driver to enable RB5 GPIOs msm: ADSPRPC: Reset debug buffer allocation check flag power: smb1355: Extend minoff-time and dead-time for SMB1355 defconfig: arm64: msm: enable CONFIG_RB5_FAN_CONTROLLER msm: fan: Add driver to control fan on RB5 HID: qvr: Remove device pointer on disconnect usb: gadget: uvc: Update frame size as per frame type usb: gadget: f_uvc: Fix incorrect frame indexing usb: gadget: uvc: Add support for UVC 1.5 usb: gadget: Add support for UVC function f2fs: prepare a waiter before entering io_schedule f2fs: fix deadlock between quota writes and checkpoint cnss2: Add api to get pci reg dump for hang data power: smb1398-charger: Toggle UVLO-config on USB removal and shutdown msm: ipa3: Add support PM api in ipav3 fs: crypto: support IV_INO_LBLK_32 for legacy (V1) format msm: ipa3: Fix to unmap LOW LAT consumer pipe buffers msm: pcie: Dump PCIe registers for hang event trace: Fix race in trace_open and buffer resize call msm: ipa4: Add change to stop netdev msm: fbdev: dp: send video notiification after audio teardown msm: kgsl: Poll a6x crashdumper register memory for status usb: dwc3-msm: Rectify 64 bit dma address programming for GSI msm: ADSPRPC: Enable ram dumps collection f2fs: should avoid inode eviction in synchronous path i3c: i3c-master-qcom-geni: Add HW and FW version read support msm: ipa3: Add check to validate rule_cnt i3c: i3c-master-qcom-geni: Manage driver suspend in late PM stage net: qrtr: Use cyclic idr allocator for port assignment mmc: core: change judgement for card busy detection msm: ADSPRPC: Handle third party applications msm:ipa4: Fix race condition msm: kgsl: Check for gmu prealloc failure only in case of prealloc request msm: ipa: Use kvfree instead of kfree scsi : ufs-qcom: Add provision to set qcom specific supplies in LPM fbdev: msm: update fb_release sequence mhi: core: Increase RSC credit to 10 HID: qvr: wake up after acknowledgment from viewer icnss: Update FW_INIT_DONE QMI indication with hang event params wil6210: add max_mcs attribute cnss2: Check link status before setting wlaon_pwr_ctrl registers defconfig: arm64: msm: Enable USB RMNET & RNDIS using IPA over BAM2BAM msm: kgsl: Add apb_pclk to the clock list and increase max clock count usb: gadget: Add snapshot of USB RMNET Function driver drivers: soc: qcom: Add usb bam changes usb: gadget: f_qc_rndis: Add RNDIS support using IPA over BAM2BAM serial: msm_geni_serial: Add enable/disable of dma irq bits serial: msm_geni_serial: Don't queue the rx dma buffer in stop rx msm: kgsl: Allow I/O coherency on imported buffers if we can drivers: phy: ufs: Remove the condition check to calibrate UFS Phy Reverting usb changes defconfig: Sync with Android-4.19 configs clk: qcom: gcc: Update the halt flags for clocks on SDM660 power: qpnp-qg: Expose CHARGE_COUNTER_SHADOW power supply property cnss2: Check for BT Enable GPIO in QCA6490 & QCA6390 icnss2: Avoid race between soc wake release threads icnss2: Add code for SSR dump collection feature for moselle nl80211: fix NL80211_ATTR_HE_6GHZ_CAPABILITY usage cfg80211: Indicate support 6GHz band in kernel cfg80211: treat 6 GHz channels as valid regardless of capability cfg80211: require HE capabilities for 6 GHz band cfg80211: reject HT/VHT capabilities on 6 GHz band cfg80211: add and expose HE 6 GHz band capabilities cfg80211: handle 6 GHz capability of new station ieee80211: add HE ext EIDs and 6 GHz capability defines ieee80211: add code to obtain and parse 6 GHz operation field cfg80211: add a helper to identify 6 GHz PSCs cfg80211: adapt to new channelization of the 6GHz band cfg80211: fix 6 GHz frequencies to kHz ieee80211: update HE IEs to D4.0 spec mac80211: update HE IEs to D3.3 mac80211: update HE operation fields to D3.0 ieee80211: remove redundant leading zeroes iwlwifi: split HE capabilities between AP and STA netlink: add ethernet address policy types netlink: add NLA_REJECT policy type wireless: align to draft 11ax D3.0 mac80211: Add he_capa debugfs entry cfg80211: express channels with a KHz component cfg80211: Add support for 60GHz band channels 5 and 6 cfg80211: apply same mandatory rate flags for 5GHz and 6GHz cfg80211: ibss: use 11a mandatory rates for 6GHz band operation clk: qcom: gpucc: Add support for new clock frequency for Lagoon soc: qcom: minidump: Change the way to locate log_buf qcom-cpufreq: Removing lmh-dcvs parsing in ready callback usb: dwc3: msm: allow suspend in host mode icnss2: Add support for host triggered recovery Bluetooth: Implement a minimum off-time for AON discharge issue defconfig: sdm660: Enable CONFIG_HID_NINTENDO for sdm660 defconfig: For support api_30 kernel changes defconfig: Sync with Android-4.19 configs defconfig: Disable CRYPTO_MD4 config defconfig: Enable VETH config msm:adsprpc: Prevent use after free in fastrpc_set_process_info Revert "ANDROID: Kbuild, LLVMLinux: allow overriding clang target triple" Correct the FM port numbers for Chk 3.x net/ipv4: always honour route mtu during forwarding usb: dwc3: Ensure blocking_sync waits until host mode starts or stops usb: dwc3: gadget: Fix double add due to cleanup_cancelled_request ANDROID: fuse: Add support for d_canonical_path ANDROID: vfs: add d_canonical_path for stacked filesystem support clk: qcom: clk-debug: Add support for debug clock API's cfg80211: use same IR permissive rules for 6GHz band cfg80211: add 6GHz in code handling array with NUM_NL80211_BANDS entries cfg80211: extend ieee80211_operating_class_to_band() for 6GHz cfg80211: util: add 6GHz channel to freq conversion and vice versa cfg80211: add 6GHz UNII band definitions nl80211: add 6GHz band definition to enum nl80211_band ANDROID: Temporarily disable XFRM_USER_COMPAT filtering msm: ipa3: Add debug logs to check unregister netdev completion time Revert "clk: Evict unregistered clks from parent caches" ANDROID: GKI: Enable DEBUG_INFO_DWARF4 timekeeping/vsyscall: Prevent math overflow in BOOTTIME update UPSTREAM: mm/sl[uo]b: export __kmalloc_track(_node)_caller BACKPORT: xfrm/compat: Translate 32-bit user_policy from sockptr BACKPORT: xfrm/compat: Add 32=>64-bit messages translator UPSTREAM: xfrm/compat: Attach xfrm dumps to 64=>32 bit translator UPSTREAM: xfrm/compat: Add 64=>32-bit messages translator BACKPORT: xfrm: Provide API to register translator module ANDROID: Publish uncompressed Image on aarch64 FROMLIST: crypto: arm64/poly1305-neon - reorder PAC authentication with SP update UPSTREAM: crypto: arm64/chacha - fix chacha_4block_xor_neon() for big endian UPSTREAM: crypto: arm64/chacha - fix hchacha_block_neon() for big endian msm: ipa: fix the use-after-free on qmi framework in ssr scenario fscrypt: Handle support for v1 encryption policy ANDROID: GKI: update the ABI xml spi: spi_qsd: Add ipc logging for spi driver qbt_handler: Memset userspace struct to zero drivers: soc: qcom: Port bam dmux driver drivers: soc: qcom: Add bam dmux driver support msm: kgsl: Compare pid pointer instead of TGID for a new process power: qpnp-smb5: Update legacy cable detection logic in bootup spi: spi_qsd: Add Shared EE property check for spi soc: qcom: Correct the module description for llcc-orchid usb: dwc3: core: Add ipc logs when sg lists are used icnss2: Send power save enter/exit via SMP2P ANDROID: clang: update to 11.0.5 FROMLIST: arm64: link with -z norelro regardless of CONFIG_RELOCATABLE defconfig: Enable CONFIG_LEGACY_ENERGY_MODEL_DT for sdm660 scsi: ufs: Increase fDeviceInit flag poll time to 5sec msm: pcie: update with link power on check for user PCIe resume scsi: ufs: Fix ufshcd_hold dead loop issue if error recovery is handing defconfig: arm64: msm: enable CONFIG_FORCE_ALLOC_FROM_DMA_ZONE ANDROID: GKI: enable CONFIG_WIREGUARD UPSTREAM: wireguard: peerlookup: take lock before checking hash in replace operation UPSTREAM: wireguard: noise: take lock when removing handshake entry from table UPSTREAM: wireguard: queueing: make use of ip_tunnel_parse_protocol UPSTREAM: net: ip_tunnel: add header_ops for layer 3 devices UPSTREAM: wireguard: receive: account for napi_gro_receive never returning GRO_DROP UPSTREAM: wireguard: device: avoid circular netns references UPSTREAM: wireguard: noise: do not assign initiation time in if condition UPSTREAM: wireguard: noise: separate receive counter from send counter UPSTREAM: wireguard: queueing: preserve flow hash across packet scrubbing UPSTREAM: wireguard: noise: read preshared key while taking lock UPSTREAM: wireguard: selftests: use newer iproute2 for gcc-10 UPSTREAM: wireguard: send/receive: use explicit unlikely branch instead of implicit coalescing UPSTREAM: wireguard: selftests: initalize ipv6 members to NULL to squelch clang warning UPSTREAM: wireguard: send/receive: cond_resched() when processing worker ringbuffers UPSTREAM: wireguard: socket: remove errant restriction on looping to self UPSTREAM: wireguard: selftests: use normal kernel stack size on ppc64 UPSTREAM: wireguard: receive: use tunnel helpers for decapsulating ECN markings UPSTREAM: wireguard: queueing: cleanup ptr_ring in error path of packet_queue_init UPSTREAM: wireguard: send: remove errant newline from packet_encrypt_worker UPSTREAM: wireguard: noise: error out precomputed DH during handshake rather than config UPSTREAM: wireguard: receive: remove dead code from default packet type case UPSTREAM: wireguard: queueing: account for skb->protocol==0 UPSTREAM: wireguard: selftests: remove duplicated include <sys/types.h> UPSTREAM: wireguard: socket: remove extra call to synchronize_net UPSTREAM: wireguard: send: account for mtu=0 devices UPSTREAM: wireguard: receive: reset last_under_load to zero UPSTREAM: wireguard: selftests: reduce complexity and fix make races UPSTREAM: wireguard: device: use icmp_ndo_send helper UPSTREAM: wireguard: selftests: tie socket waiting to target pid UPSTREAM: wireguard: selftests: ensure non-addition of peers with failed precomputation UPSTREAM: wireguard: noise: reject peers with low order public keys UPSTREAM: wireguard: allowedips: fix use-after-free in root_remove_peer_lists UPSTREAM: net: skbuff: disambiguate argument and member for skb_list_walk_safe helper UPSTREAM: net: introduce skb_list_walk_safe for skb segment walking UPSTREAM: wireguard: socket: mark skbs as not on list when receiving via gro UPSTREAM: wireguard: queueing: do not account for pfmemalloc when clearing skb header UPSTREAM: wireguard: selftests: remove ancient kernel compatibility code UPSTREAM: wireguard: allowedips: use kfree_rcu() instead of call_rcu() UPSTREAM: wireguard: main: remove unused include <linux/version.h> UPSTREAM: wireguard: global: fix spelling mistakes in comments UPSTREAM: wireguard: Kconfig: select parent dependency for crypto UPSTREAM: wireguard: selftests: import harness makefile for test suite UPSTREAM: net: WireGuard secure network tunnel UPSTREAM: timekeeping: Boot should be boottime for coarse ns accessor UPSTREAM: timekeeping: Add missing _ns functions for coarse accessors UPSTREAM: icmp: introduce helper for nat'd source address in network device context UPSTREAM: crypto: poly1305-x86_64 - Use XORL r32,32 UPSTREAM: crypto: curve25519-x86_64 - Use XORL r32,32 UPSTREAM: crypto: arm/poly1305 - Add prototype for poly1305_blocks_neon UPSTREAM: crypto: arm/curve25519 - include <linux/scatterlist.h> UPSTREAM: crypto: x86/curve25519 - Remove unused carry variables UPSTREAM: crypto: x86/chacha-sse3 - use unaligned loads for state array UPSTREAM: crypto: lib/chacha20poly1305 - Add missing function declaration UPSTREAM: crypto: arch/lib - limit simd usage to 4k chunks UPSTREAM: crypto: arm[64]/poly1305 - add artifact to .gitignore files UPSTREAM: crypto: x86/curve25519 - leave r12 as spare register UPSTREAM: crypto: x86/curve25519 - replace with formally verified implementation UPSTREAM: crypto: arm64/chacha - correctly walk through blocks UPSTREAM: crypto: x86/curve25519 - support assemblers with no adx support UPSTREAM: crypto: chacha20poly1305 - prevent integer overflow on large input UPSTREAM: crypto: Kconfig - allow tests to be disabled when manager is disabled UPSTREAM: crypto: arm/chacha - fix build failured when kernel mode NEON is disabled UPSTREAM: crypto: x86/poly1305 - emit does base conversion itself UPSTREAM: crypto: chacha20poly1305 - add back missing test vectors and test chunking UPSTREAM: crypto: x86/poly1305 - fix .gitignore typo UPSTREAM: crypto: curve25519 - Fix selftest build error UPSTREAM: crypto: {arm,arm64,mips}/poly1305 - remove redundant non-reduction from emit UPSTREAM: crypto: x86/poly1305 - wire up faster implementations for kernel UPSTREAM: crypto: x86/poly1305 - import unmodified cryptogams implementation UPSTREAM: crypto: poly1305 - add new 32 and 64-bit generic versions UPSTREAM: crypto: lib/curve25519 - re-add selftests UPSTREAM: crypto: arm/curve25519 - add arch-specific key generation function UPSTREAM: crypto: chacha - fix warning message in header file UPSTREAM: crypto: arch - conditionalize crypto api in arch glue for lib code UPSTREAM: crypto: lib/chacha20poly1305 - use chacha20_crypt() UPSTREAM: crypto: x86/chacha - only unregister algorithms if registered UPSTREAM: crypto: chacha_generic - remove unnecessary setkey() functions UPSTREAM: crypto: lib/chacha20poly1305 - reimplement crypt_from_sg() routine UPSTREAM: crypto: chacha20poly1305 - import construction and selftest from Zinc UPSTREAM: crypto: arm/curve25519 - wire up NEON implementation UPSTREAM: crypto: arm/curve25519 - import Bernstein and Schwabe's Curve25519 ARM implementation UPSTREAM: crypto: curve25519 - x86_64 library and KPP implementations UPSTREAM: crypto: lib/curve25519 - work around Clang stack spilling issue UPSTREAM: crypto: curve25519 - implement generic KPP driver UPSTREAM: crypto: curve25519 - add kpp selftest UPSTREAM: crypto: curve25519 - generic C library implementations UPSTREAM: crypto: blake2s - x86_64 SIMD implementation UPSTREAM: crypto: blake2s - implement generic shash driver UPSTREAM: crypto: testmgr - add test cases for Blake2s UPSTREAM: crypto: blake2s - generic C library implementation and selftest UPSTREAM: crypto: mips/poly1305 - incorporate OpenSSL/CRYPTOGAMS optimized implementation UPSTREAM: crypto: arm/poly1305 - incorporate OpenSSL/CRYPTOGAMS NEON implementation i3c: i3c-master-qcom-geni: Handle timeout for DMA FSM reset UPSTREAM: crypto: arm64/poly1305 - incorporate OpenSSL/CRYPTOGAMS NEON implementation i3c: i3c-master-qcom-geni: Save master device info to debug list UPSTREAM: crypto: x86/poly1305 - expose existing driver as poly1305 library UPSTREAM: crypto: x86/poly1305 - depend on generic library not generic shash UPSTREAM: crypto: poly1305 - expose init/update/final library interface UPSTREAM: crypto: x86/poly1305 - unify Poly1305 state struct with generic code UPSTREAM: crypto: poly1305 - move core routines into a separate library UPSTREAM: crypto: chacha - unexport chacha_generic routines UPSTREAM: crypto: mips/chacha - wire up accelerated 32r2 code from Zinc UPSTREAM: crypto: mips/chacha - import 32r2 ChaCha code from Zinc UPSTREAM: crypto: arm/chacha - expose ARM ChaCha routine as library function UPSTREAM: crypto: arm/chacha - remove dependency on generic ChaCha driver UPSTREAM: crypto: arm/chacha - import Eric Biggers's scalar accelerated ChaCha code UPSTREAM: crypto: arm64/chacha - expose arm64 ChaCha routine as library function UPSTREAM: crypto: arm64/chacha - depend on generic chacha library instead of crypto driver UPSTREAM: crypto: arm64/chacha - use combined SIMD/ALU routine for more speed UPSTREAM: crypto: arm64/chacha - optimize for arbitrary length inputs UPSTREAM: crypto: x86/chacha - expose SIMD ChaCha routine as library function UPSTREAM: crypto: x86/chacha - depend on generic chacha library instead of crypto driver UPSTREAM: crypto: chacha - move existing library code into lib/crypto UPSTREAM: crypto: lib - tidy up lib/crypto Kconfig and Makefile UPSTREAM: crypto: chacha - constify ctx and iv arguments UPSTREAM: crypto: x86/poly1305 - Clear key material from stack in SSE2 variant i3c: i3c-master-qcom-geni: Log error if DMA mode fails defcong: sdm660 : Adding support to IPA driver msm: ipa: Add ipa rm support for ipa_v2 UPSTREAM: crypto: xchacha20 - fix comments for test vectors UPSTREAM: crypto: xchacha - add test vector from XChaCha20 draft RFC UPSTREAM: crypto: arm64/chacha - add XChaCha12 support UPSTREAM: crypto: arm64/chacha20 - refactor to allow varying number of rounds UPSTREAM: crypto: arm64/chacha20 - add XChaCha20 support UPSTREAM: crypto: x86/chacha - avoid sleeping under kernel_fpu_begin() UPSTREAM: crypto: x86/chacha - yield the FPU occasionally UPSTREAM: crypto: x86/chacha - add XChaCha12 support UPSTREAM: crypto: x86/chacha20 - refactor to allow varying number of rounds UPSTREAM: crypto: x86/chacha20 - add XChaCha20 support UPSTREAM: crypto: x86/chacha20 - Add a 4-block AVX-512VL variant UPSTREAM: crypto: x86/chacha20 - Add a 2-block AVX-512VL variant UPSTREAM: crypto: x86/chacha20 - Add a 8-block AVX-512VL variant UPSTREAM: crypto: x86/chacha20 - Add a 4-block AVX2 variant UPSTREAM: crypto: x86/chacha20 - Add a 2-block AVX2 variant UPSTREAM: crypto: x86/chacha20 - Use larger block functions more aggressively UPSTREAM: crypto: x86/chacha20 - Support partial lengths in 8-block AVX2 variant UPSTREAM: crypto: x86/chacha20 - Support partial lengths in 4-block SSSE3 variant UPSTREAM: crypto: x86/chacha20 - Support partial lengths in 1-block SSSE3 variant msm: ipa3: Add low-level IPA client support net: support __alloc_skb to always use GFP_DMA msm: ipa2: Add changes compatible to kernel-4.19 msm: ipa2: Add change to fix ipa padding msm: ipa: Add Kconfig changes of IPA2 driver msm: ipa2: Add changes compatible to kernel-4.14 i3c: i3c-master-qcom-geni: Fix DMA and FIFO mode timeout scenario ANDROID: GKI: Enable CONFIG_USB_ANNOUNCE_NEW_DEVICES msm: ipa: Add support of IPA2 driver scsi: ufs: reomove Rst_N pulling up action in ufshcd_resume() serial: msm_geni_serial: Add new UART IPC log file in DMA mode serial: msm_geni_serial: Add delay for rx invalid transfer msm_geni_serial: Add ioctl for adding new IPC log in uart msm: kgsl: Don't allow re-importing memory owned by KGSL serial: msm_geni_serial: memset RX buffer to Zero icnss2: Avoid race between SOC WAKE REQ/RESP ANDROID: GKI: Enable CONFIG_X86_X2APIC i3c: i3c-master-qcom-geni: Manage probe time resources fbdev: msm: disable cpu sync during dma_buf_map_attachment scsi: ufs: Add back a missing sanity check to ufshcd_read_desc_param() icnss: check SKIP_QMI test bit for exported qmi messages ANDROID: move builds to use gas prebuilts i3c: i3c-master-qcom-geni: Force the xfer mode as DMA mode msm: ipa3: Fix to use proper clock timer i3c: i3c-master-qcom-geni: Fix IBI and Hot join related issues msm: ipa3: Add change to not reset HOLB timer UPSTREAM: binder: fix UAF when releasing todo list cnss2: Add support for PCIE gen switch FROMLIST: arm64: vdso32: Allow ld.lld to properly link the VDSO mmc: core: Fix clk scaling when card max freq below 50MHz msm: ipa3: Send enable force clear only for producer pipe sched/tune: Fix improper accounting of tasks usb: dwc3: Stop active transfer on control endpoints Add support for block disk encryption mmc: host: Use right parameter for ext4 plus eMMC mmc: host: reprogram the key to cover the invalid config case Fix OTA issue with vts fixes for new fbe framework msm: kgsl: Remove dev_err() from fenced write loop uapi: sound: Fix compilation error defconfig: msm: Enable FS related configs for Android R net:sockev: hold file reference till the sock event is sent net_sched: Add flow control support to prio qdisc msm: camera: Fix for memory leak defconfig: kona: Enable dm-crypt driver soc: qcom: Fix memcpy operations in ramdump_read md: dm-default-key: Use system sector size for SDHCI devices defconfig: msm: Enable CONFIG_STATIC_USERMODEHELPER for bengal_32 fdt: Update CRC check for rng-seed usb: phy: snps: Enable auto resume feature only in host mode msm: ipa: Fix rndis client disconnection gracefully icnss: reject idle restart if wlan driver unregistered soc: qcom: Add LLCC driver for Orchid icnss2: Decrement soc wake ref count fbdev: msm: remove mappings before iommu detach clk: qcom: mdss: Update dfps data struct for FB targets usb: pd: Register typec partner in case AAA is connected binder: update low_latency selection for binder transactions sched/walt: Improve the scheduler msm: kgsl: Use regulator_is_enabled api when gpu-quirk-cx-gdsc is defined icnss2: Send enter power save after driver suspend mmc: host: Update HS400 timing mode before performing tuning defconfig: Enable CONFIG_UTS_NS for sdm660 trace: f2fs: Fix kasan slab-out-of-bounds ANDROID: use arm-linux-androidkernel- for CROSS_COMPILE_COMPAT ANDROID: build.config.common: enable LLVM=1 NFC: Add support for core init command icnss2: Fix race condition during SOC wake req/release msm: kgsl: Don't wait for room in context queue when context is invalidated dt-bindings: msm: Add bindings for MP limit fuse support fbdev: msm: set smmu cb domain attached during probe defconfig: enable SDE rotator mm/Kconfig: forcing allocators to return ZONE_DMA32 memory power: smb5: Fix LPD flag for PMI632 ANDROID: GKI: prevent removal of monitored symbols firmware: qcom: Fix hyp_log issue soc: qcom: Fix smcinvoke_obj->fd assignment drm: increase max limit of drm open count to 128 scsi: ufs: Fix unexpected values get from ufshcd_read_desc_param() usb: gadget: Don't giveback request if ep command times out icnss2: Avoid calibration during SSR of WCN6750 ANDROID: Refresh ABI.xmls with libabigail 1.8.0-98bbf30d edac: improve gold CPU cache way parsing msm: kgsl: Update clk_set_rate() sequence for bimc_gpu_clk scsi: ufs: Fix ufs power down/on specs violation in suspend/resume path defconfig: msm: Enable CONFIG_STATIC_USERMODEHELPER for bengal_32 fdt: Update CRC check for rng-seed defconfig: Enable blk-crypto-fallback to handle sw crypto request md: dm-default-key: Use system sector size for SDHCI devices msm: sde: rotator: enable sde rotator msm: pcie: provide client the ability to control PCIe target_link_speed qcom: qpnp-fg-gen3: Continue fg_gen3_probe() when !DEBUG_FS dcc_v2: fix 1 write 1 read register configuration fail issue leds: qpnp-flash-v2: Acquire the bms_psy handle at runtime regulator: qpnp-labibb: Don't handle LAB_VREG_OK in TTW mode for pmi8998 regulator: qpnp-labibb: Add sysfs class to enable/disable the irq regulator: qpnp-lcdb: Disable the SC irq only for PM660L V1.1 and below regulator: qpnp-lcdb: Add sysfs class to enable/disable the irq cnss2: Enable self-recovery only when host driver detects linkdown ANDROID: drop KERNEL_DIR setting in build.config.common cnss2: Release qmi handle after server exit UPSTREAM: driver core: Avoid deferred probe due to fw_devlink_pause/resume() UPSTREAM: driver core: Rename dev_links_info.defer_sync to defer_hook UPSTREAM: driver core: Don't do deferred probe in parallel with kernel_init thread msm: cvp: Avoid releasing non-existent ARP buffer cnss_utils: Update wlfw power save enter/exit qmi message msm: mink: Fix copy_to_user issue crypto: Fix possible stack out of bound error mhi: core: Extend mhi_device_get_sync_atomic() for panic cases cnss2: Log a message after assert/de-assert WLAN_EN GPIO cnss2: Assert when power on retry reaches maximum usb: dwc3: gadget: Properly handle failed kick_transfer f2fs: remove blk_plugging in block_operations power: smblite-lib: Reduce the ICL immediately when flash is active qseecom: Propagate correct return value from TZ mmc: Remove unused code ANDROID: Refresh ABI.xmls with libabigail 1.8.0-1dca710a irqchip: gic-v3: Add support to get pending irqs serial: msm_geni_serial: Don't use WARN_ON for console uart mmc: core: Fix issue of no clk scaling upon previous scaling failure power: smb1390: Fix taper condition for VPH configuration cnss2: Change to add prints on link down callback dm-crypt: Skip encryption if bio is fscrypto or blk-crypto encrypted power: smblite-lib/smb5-lib: Add partner registration for microusb otg clk: qcom: rpmh: Update new clocks support on LitoMagnus arm: dma-mapping.c: add cpu sync in map_sg and unmap_sg defconfig: Enable blk-crypto-fallback to handle sw crypto request dt-bindings: clock: qcom: Add support for RPMH clocks msm: ipa4: fix the unclock gsi IPA register access clk: qcom: Add BIMC logging support during kernel panic dt-bindings: clock: Add support for BIMC clock usb: core: Don't wait for completion of urbs msm: kgsl: Enable process reclaim for A610 fuse: fix page dereference after free msm: media: uapi: Redefine NV12 format with different alignment sched/walt: Fix a potential accounting issue during window size change UPSTREAM: arm64: vdso: Build vDSO with -ffixed-x18 mhi: core: Add checks for bhie offsets ANDROID: KMI symbol lists: migrate section name usb: phy: qusb: Set the voltage to regulator according to soc capacity cnss2: Collect shadow registers for RDDM scenario mm: slub: Add debugfs interface to capture slub allocs owner msm: kgsl: Don't skip gmufw preallocations during firmware read icnss2: Export API to host driver to exit power save msm: ipa: stay in NAPI mode when default pipe has low credits vidc_3x: Fix crash in user build msm: mink: Fix copy_to_user issue msm: ipa: update the iommu mapping for WDI rings mmc: Port changes for supporting SDIO functionality to 4.19 kernel ANDROID: ABI: refresh with latest libabigail 94f5d4ae ... Conflicts: .gitignore Documentation/arm64/tagged-address-abi.rst Makefile android/abi_gki_aarch64 android/abi_gki_aarch64.xml android/abi_gki_aarch64_cuttlefish android/abi_gki_aarch64_qcom arch/Kconfig arch/arm/Kconfig arch/arm/configs/vendor/msm8937-perf_defconfig arch/arm/configs/vendor/msm8937_32go-perf_defconfig arch/arm/configs/vendor/msm8937_32go_defconfig arch/arm/configs/vendor/msm8937_defconfig arch/arm/crypto/curve25519-core.S arch/arm/crypto/poly1305-glue.c arch/arm64/Kconfig arch/arm64/boot/dts/vendor/bindings/bus/ti-sysc.txt arch/arm64/boot/dts/vendor/bindings/display/mediatek/mediatek,dpi.txt arch/arm64/boot/dts/vendor/bindings/iio/multiplexer/io-channel-mux.txt arch/arm64/boot/dts/vendor/bindings/net/fsl-fman.txt arch/arm64/boot/dts/vendor/bindings/sound/wm8994.txt arch/arm64/boot/dts/vendor/bindings/usb/dwc3.txt arch/arm64/configs/gki_defconfig arch/arm64/configs/vendor/bengal-perf_defconfig arch/arm64/configs/vendor/bengal_defconfig arch/arm64/configs/vendor/kona-perf_defconfig arch/arm64/configs/vendor/kona_defconfig arch/arm64/configs/vendor/lito-perf_defconfig arch/arm64/configs/vendor/lito_defconfig arch/arm64/configs/vendor/sdm660-perf_defconfig arch/arm64/configs/vendor/sdm660_defconfig arch/arm64/crypto/poly1305-glue.c arch/arm64/include/asm/alternative.h arch/arm64/include/asm/cpucaps.h arch/arm64/include/asm/cputype.h arch/arm64/include/asm/lse.h arch/arm64/include/asm/vdso/compat_barrier.h arch/arm64/include/asm/vdso/compat_gettimeofday.h arch/arm64/kernel/asm-offsets.c arch/arm64/kernel/cpu_errata.c arch/arm64/kernel/vdso.c arch/arm64/kernel/vdso/Makefile arch/arm64/kernel/vdso32/Makefile arch/arm64/mm/mmu.c arch/mips/crypto/Makefile arch/mips/crypto/poly1305-glue.c arch/mips/vdso/Makefile arch/x86/configs/gki_defconfig arch/x86/crypto/Makefile arch/x86/crypto/blake2s-glue.c arch/x86/crypto/poly1305_glue.c arch/x86/include/asm/vgtod.h arch/x86/kernel/cpu/common.c build.config.aarch64 build.config.common build.config.gki_kasan build.config.x86_64 crypto/Kconfig crypto/Makefile crypto/blake2s_generic.c crypto/testmgr.c crypto/testmgr.h drivers/android/binder_internal.h drivers/android/binderfs.c drivers/base/core.c drivers/base/power/wakeup_stats.c drivers/block/loop.c drivers/char/Kconfig drivers/char/adsprpc.c drivers/char/diag/diagfwd_peripheral.c drivers/char/random.c drivers/clk/qcom/clk-debug.c drivers/crypto/msm/qcedev.c drivers/devfreq/governor_gpubw_mon.c drivers/dma-buf/dma-buf.c drivers/firmware/qcom/tz_log.c drivers/gpu/drm/drm_connector.c drivers/gpu/drm/drm_mipi_dsi.c drivers/gpu/drm/drm_prime.c drivers/gpu/drm/virtio/virtgpu_ioctl.c drivers/gpu/msm/adreno_debugfs.c drivers/gpu/msm/kgsl.c drivers/gpu/msm/kgsl_device.h drivers/gpu/msm/kgsl_drawobj.c drivers/gpu/msm/kgsl_pool.c drivers/gpu/msm/kgsl_pwrctrl.c drivers/gpu/msm/kgsl_pwrctrl.h drivers/gpu/msm/kgsl_reclaim.c drivers/gpu/msm/kgsl_sharedmem.c drivers/gpu/msm/kgsl_timeline.c drivers/hid/hid-ids.h drivers/hid/hid-quirks.c drivers/hwtracing/coresight/coresight-etm-perf.c drivers/hwtracing/coresight/coresight-etm4x.c drivers/hwtracing/coresight/coresight-etm4x.h drivers/hwtracing/coresight/coresight-tmc-etr.c drivers/i2c/busses/i2c-qcom-geni.c drivers/md/dm-crypt.c drivers/md/dm-table.c drivers/md/dm-verity-target.c drivers/media/platform/msm/sde/rotator/sde_rotator_sync.c drivers/media/platform/msm/synx/synx.c drivers/media/platform/msm/synx/synx_debugfs.c drivers/media/platform/msm/synx/synx_util.c drivers/misc/Kconfig drivers/misc/Makefile drivers/misc/qseecom.c drivers/mmc/core/Kconfig drivers/mmc/core/block.c drivers/mmc/host/cqhci-crypto-qti.c drivers/mmc/host/sdhci-msm.c drivers/mmc/host/sdhci.c drivers/net/Kconfig drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c drivers/net/wireguard/Makefile drivers/net/wireguard/allowedips.c drivers/net/wireguard/allowedips.h drivers/net/wireguard/device.c drivers/net/wireguard/device.h drivers/net/wireguard/main.c drivers/net/wireguard/peer.c drivers/net/wireguard/peer.h drivers/net/wireguard/queueing.c drivers/net/wireguard/queueing.h drivers/net/wireguard/ratelimiter.c drivers/net/wireguard/receive.c drivers/net/wireguard/selftest/allowedips.c drivers/net/wireguard/send.c drivers/net/wireguard/socket.c drivers/net/wireless/cnss2/pci.c drivers/net/wireless/mac80211_hwsim.c drivers/of/platform.c drivers/of/property.c drivers/pinctrl/qcom/pinctrl-khaje.c drivers/platform/msm/ipa/ipa_v3/ipa.c drivers/platform/msm/ipa/ipa_v3/ipa_client.c drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c drivers/power/supply/power_supply_sysfs.c drivers/power/supply/qcom/Makefile drivers/power/supply/qcom/qg-reg.h drivers/power/supply/qcom/qpnp-qg.c drivers/power/supply/qcom/qpnp-smb5.c drivers/power/supply/qcom/smb1398-charger.c drivers/power/supply/qcom/smb5-lib.c drivers/scsi/ufs/ufshcd-crypto.c drivers/soc/qcom/crypto-qti-tz.c drivers/soc/qcom/icnss2/qmi.c drivers/soc/qcom/icnss_private.h drivers/soc/qcom/qmi_rmnet.c drivers/soc/qcom/qmi_rmnet_i.h drivers/soc/qcom/smcinvoke.c drivers/soc/qcom/socinfo.c drivers/soc/qcom/subsys-pil-tz.c drivers/spi/spi-geni-qcom.c drivers/staging/android/ion/ion.c drivers/tty/serial/msm_geni_serial.c drivers/usb/dwc3/dwc3-msm.c drivers/usb/dwc3/gadget.c drivers/usb/dwc3/gadget.h drivers/usb/gadget/composite.c drivers/usb/gadget/function/f_fs.c drivers/usb/gadget/function/f_hid.c drivers/usb/gadget/function/f_uac1.c drivers/usb/misc/ssusb-redriver-nb7vpq904m.c drivers/usb/musb/Kconfig drivers/usb/musb/mediatek.c drivers/usb/pd/policy_engine.c drivers/usb/phy/phy-msm-qusb.c drivers/usb/typec/bus.c drivers/usb/typec/mux.c drivers/video/fbdev/msm/mdss_sync.c fs/crypto/fscrypt_private.h fs/crypto/inline_crypt.c fs/crypto/keysetup.c fs/crypto/policy.c fs/ext4/dir.c fs/ext4/ext4.h fs/ext4/hash.c fs/ext4/namei.c fs/ext4/page-io.c fs/f2fs/super.c fs/incfs/data_mgmt.h fs/incfs/main.c fs/incfs/vfs.c include/crypto/blake2s.h include/crypto/chacha.h include/crypto/internal/blake2s.h include/crypto/internal/poly1305.h include/crypto/poly1305.h include/drm/drm_mipi_dsi.h include/linux/android_kabi.h include/linux/bits.h include/linux/diagchar.h include/linux/dma-buf.h include/linux/icmpv6.h include/linux/ipv6.h include/linux/page-flags-layout.h include/linux/power_supply.h include/linux/random.h include/linux/sched.h include/linux/usb/gadget.h include/net/icmp.h include/net/ndisc.h include/net/sock.h include/soc/qcom/icnss.h include/soc/qcom/socinfo.h include/trace/events/f2fs.h include/trace/events/random.h include/uapi/linux/android/binderfs.h include/uapi/linux/v4l2-controls.h include/uapi/linux/virtio_ids.h include/uapi/media/msm_camsensor_sdk.h include/uapi/media/msm_media_info.h include/vdso/bits.h include/vdso/datapage.h kernel/bpf/helpers.c kernel/cgroup/cgroup.c kernel/fork.c kernel/futex.c kernel/panic.c kernel/power/wakelock.c kernel/sched/core.c kernel/sched/cpufreq_schedutil.c kernel/sched/sched.h kernel/sched/topology.c kernel/sched/walt.h kernel/time/vsyscall.c lib/Kconfig.kasan lib/crypto/Kconfig lib/crypto/Makefile lib/crypto/blake2s-generic.c lib/crypto/blake2s-selftest.c lib/crypto/blake2s.c lib/crypto/poly1305-donna32.c lib/crypto/poly1305-donna64.c lib/crypto/poly1305.c lib/strnlen_user.c lib/test_meminit.c lib/test_stackinit.c mm/kasan/common.c mm/page_alloc.c mm/page_io.c net/core/filter.c net/ipv4/icmp.c net/ipv6/ip6_icmp.c net/sctp/input.c net/unix/scm.c net/wireless/core.c net/xfrm/xfrm_compat.c net/xfrm/xfrm_state.c net/xfrm/xfrm_user.c scripts/adjust_autoksyms.sh scripts/generate_initcall_order.pl scripts/setlocalversion scripts/tools-support-relr.sh security/Kconfig.hardening security/selinux/hooks.c security/selinux/include/classmap.h security/selinux/include/security.h security/selinux/nlmsgtab.c security/selinux/ss/mls.c security/selinux/ss/policydb.c security/selinux/ss/policydb.h security/selinux/ss/services.c tools/testing/selftests/wireguard/netns.sh tools/testing/selftests/wireguard/qemu/kernel.config Change-Id: I5992ee11f94595fd75ea4cf60b15fe7eee0f28ad
This commit is contained in:
commit
726f1d1d73
213 changed files with 47208 additions and 265 deletions
|
@ -33,9 +33,8 @@ $(warning Forcing kernel header generation only for '$(TARGET_KERNEL_HEADER_ARCH
|
|||
KERNEL_HEADER_ARCH := $(TARGET_KERNEL_HEADER_ARCH)
|
||||
endif
|
||||
|
||||
KERNEL_HEADER_DEFCONFIG := $(strip $(KERNEL_HEADER_DEFCONFIG))
|
||||
ifeq ($(KERNEL_HEADER_DEFCONFIG),)
|
||||
KERNEL_HEADER_DEFCONFIG := $(KERNEL_DEFCONFIG)
|
||||
ifeq ($(shell echo $(KERNEL_DEFCONFIG) | grep vendor),)
|
||||
KERNEL_DEFCONFIG := vendor/$(KERNEL_DEFCONFIG)
|
||||
endif
|
||||
|
||||
# Force 32-bit binder IPC for 64bit kernel with 32bit userspace
|
||||
|
@ -145,18 +144,38 @@ fi
|
|||
endef
|
||||
|
||||
ifneq ($(KERNEL_LEGACY_DIR),true)
|
||||
$(KERNEL_USR): $(KERNEL_HEADERS_INSTALL)
|
||||
$(KERNEL_USR): | $(KERNEL_HEADERS_INSTALL)
|
||||
rm -rf $(KERNEL_SYMLINK)
|
||||
ln -s kernel/$(TARGET_KERNEL) $(KERNEL_SYMLINK)
|
||||
|
||||
$(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_USR)
|
||||
$(TARGET_PREBUILT_INT_KERNEL): | $(KERNEL_USR)
|
||||
endif
|
||||
|
||||
include $(TARGET_KERNEL_SOURCE)/defconfig.mk
|
||||
|
||||
KERNEL_HEADER_DEFCONFIG := $(strip $(KERNEL_HEADER_DEFCONFIG))
|
||||
ifeq ($(KERNEL_HEADER_DEFCONFIG),)
|
||||
KERNEL_HEADER_DEFCONFIG := $(TARGET_DEFCONFIG)
|
||||
endif
|
||||
|
||||
# Make the kernel config
|
||||
# $1 output dir
|
||||
# $2 kernel config filepath
|
||||
# $3 defconfig
|
||||
# $4 kernel source
|
||||
# $5 kernel make env
|
||||
# $6 kernel architecture
|
||||
# $7 cross compile sub-command
|
||||
# $8 make command
|
||||
define do-kernel-config
|
||||
( cp $(3) $(2) && $(8) -C $(4) O=$(1) $(5) ARCH=$(6) CROSS_COMPILE=$(7) $(9) defoldconfig ) || ( rm -f $(2) && false )
|
||||
endef
|
||||
|
||||
$(KERNEL_OUT):
|
||||
mkdir -p $(KERNEL_OUT)
|
||||
|
||||
$(KERNEL_CONFIG): $(KERNEL_OUT)
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_DEFCONFIG)
|
||||
$(KERNEL_CONFIG): $(TARGET_DEFCONFIG) | $(KERNEL_OUT)
|
||||
$(call do-kernel-config,$(BUILD_ROOT_LOC)$(KERNEL_OUT),$@,$(TARGET_DEFCONFIG),$(TARGET_KERNEL_SOURCE),$(KERNEL_MAKE_ENV),$(KERNEL_ARCH),$(KERNEL_CROSS_COMPILE),$(MAKE),$(real_cc))
|
||||
$(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
|
||||
echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
|
||||
echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
|
||||
|
@ -164,8 +183,8 @@ $(KERNEL_CONFIG): $(KERNEL_OUT)
|
|||
|
||||
ifeq ($(TARGET_KERNEL_APPEND_DTB), true)
|
||||
TARGET_PREBUILT_INT_KERNEL_IMAGE := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image
|
||||
$(TARGET_PREBUILT_INT_KERNEL_IMAGE): $(KERNEL_USR)
|
||||
$(TARGET_PREBUILT_INT_KERNEL_IMAGE): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
|
||||
$(TARGET_PREBUILT_INT_KERNEL_IMAGE):| $(KERNEL_USR)
|
||||
$(TARGET_PREBUILT_INT_KERNEL_IMAGE): | $(KERNEL_OUT) $(KERNEL_CONFIG) $(KERNEL_HEADERS_INSTALL)
|
||||
$(hide) echo "Building kernel modules..."
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) Image
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) modules
|
||||
|
@ -173,13 +192,13 @@ $(TARGET_PREBUILT_INT_KERNEL_IMAGE): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
|
|||
$(mv-modules)
|
||||
$(clean-module-folder)
|
||||
|
||||
$(TARGET_PREBUILT_INT_KERNEL): $(TARGET_PREBUILT_INT_KERNEL_IMAGE)
|
||||
$(TARGET_PREBUILT_INT_KERNEL): | $(TARGET_PREBUILT_INT_KERNEL_IMAGE)
|
||||
$(hide) echo "Building kernel..."
|
||||
$(hide) rm -rf $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS)
|
||||
else
|
||||
TARGET_PREBUILT_INT_KERNEL_IMAGE := $(TARGET_PREBUILT_INT_KERNEL)
|
||||
$(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
|
||||
$(TARGET_PREBUILT_INT_KERNEL): | $(KERNEL_OUT) $(KERNEL_CONFIG) $(KERNEL_HEADERS_INSTALL)
|
||||
$(hide) echo "Building kernel..."
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS)
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) modules
|
||||
|
@ -188,10 +207,10 @@ $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
|
|||
$(clean-module-folder)
|
||||
endif
|
||||
|
||||
$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT)
|
||||
$(KERNEL_HEADERS_INSTALL): | $(KERNEL_OUT)
|
||||
$(hide) if [ ! -z "$(KERNEL_HEADER_DEFCONFIG)" ]; then \
|
||||
rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_HEADER_DEFCONFIG); \
|
||||
$(call do-kernel-config,$(BUILD_ROOT_LOC)$(KERNEL_OUT),$(KERNEL_CONFIG),$(KERNEL_HEADER_DEFCONFIG),$(TARGET_KERNEL_SOURCE),$(KERNEL_MAKE_ENV),$(KERNEL_ARCH),$(KERNEL_CROSS_COMPILE),$(MAKE),$(real_cc)); \
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) headers_install;\
|
||||
if [ -d "$(KERNEL_HEADERS_INSTALL)/include/bringup_headers" ]; then \
|
||||
cp -Rf $(KERNEL_HEADERS_INSTALL)/include/bringup_headers/* $(KERNEL_HEADERS_INSTALL)/include/ ;\
|
||||
|
@ -200,7 +219,7 @@ $(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT)
|
|||
$(hide) if [ "$(KERNEL_HEADER_DEFCONFIG)" != "$(KERNEL_DEFCONFIG)" ]; then \
|
||||
echo "Used a different defconfig for header generation"; \
|
||||
rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \
|
||||
$(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_DEFCONFIG); fi
|
||||
$(call do-kernel-config,$(BUILD_ROOT_LOC)$(KERNEL_OUT),$(KERNEL_CONFIG),$(TARGET_DEFCONFIG),$(TARGET_KERNEL_SOURCE),$(KERNEL_MAKE_ENV),$(KERNEL_ARCH),$(KERNEL_CROSS_COMPILE),$(MAKE),$(real_cc)); fi
|
||||
$(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
|
||||
echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
|
||||
echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
|
||||
|
|
|
@ -18,6 +18,8 @@ CONFIG_IKCONFIG=y
|
|||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_LOG_CPU_MAX_BUF_SHIFT=17
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
CONFIG_CPUSETS=y
|
||||
|
|
2
arch/arm/configs/vendor/bengal_defconfig
vendored
2
arch/arm/configs/vendor/bengal_defconfig
vendored
|
@ -19,6 +19,8 @@ CONFIG_IKCONFIG=y
|
|||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_LOG_CPU_MAX_BUF_SHIFT=17
|
||||
CONFIG_MEMCG=y
|
||||
CONFIG_MEMCG_SWAP=y
|
||||
CONFIG_BLK_CGROUP=y
|
||||
CONFIG_DEBUG_BLK_CGROUP=y
|
||||
CONFIG_CGROUP_FREEZER=y
|
||||
|
|
1
arch/arm/configs/vendor/ext_config
vendored
Symbolic link
1
arch/arm/configs/vendor/ext_config
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../arm64/configs/vendor/ext_config
|
|
@ -87,12 +87,14 @@ void arch_cpu_idle_enter(void)
|
|||
#ifdef CONFIG_PL310_ERRATA_769419
|
||||
wmb();
|
||||
#endif
|
||||
idle_notifier_call_chain(IDLE_START);
|
||||
}
|
||||
|
||||
void arch_cpu_idle_exit(void)
|
||||
{
|
||||
idle_notifier_call_chain(IDLE_END);
|
||||
ledtrig_cpu(CPU_LED_IDLE_END);
|
||||
idle_notifier_call_chain(IDLE_END);
|
||||
}
|
||||
|
||||
void __show_regs(struct pt_regs *regs)
|
||||
|
|
|
@ -835,6 +835,8 @@ static int __init early_mem(char *p)
|
|||
u64 size;
|
||||
u64 start;
|
||||
char *endp;
|
||||
struct memblock_region *r;
|
||||
phys_addr_t region_end;
|
||||
|
||||
/*
|
||||
* If the user specifies memory size, we
|
||||
|
@ -843,8 +845,8 @@ static int __init early_mem(char *p)
|
|||
*/
|
||||
if (usermem == 0) {
|
||||
usermem = 1;
|
||||
memblock_remove(memblock_start_of_DRAM(),
|
||||
memblock_end_of_DRAM() - memblock_start_of_DRAM());
|
||||
//memblock_remove(memblock_start_of_DRAM(),
|
||||
// memblock_end_of_DRAM() - memblock_start_of_DRAM() + 1);
|
||||
}
|
||||
|
||||
start = PHYS_OFFSET;
|
||||
|
@ -852,7 +854,16 @@ static int __init early_mem(char *p)
|
|||
if (*endp == '@')
|
||||
start = memparse(endp + 1, NULL);
|
||||
|
||||
arm_add_memory(start, size);
|
||||
for_each_memblock(memory, r) {
|
||||
region_end = r->base - 1 + r->size;
|
||||
}
|
||||
//memblock_mem_limit_remove_map(size);
|
||||
memblock_cap_memory_range(0, start + size);
|
||||
for_each_memblock(memory, r) {
|
||||
region_end = r->base - 1 + r->size;
|
||||
}
|
||||
//arm_add_memory(start, size);
|
||||
//memblock_remove(0x7e280000, 0x80000000 - 0x7e280000);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1696,3 +1696,21 @@ source "arch/arm64/kvm/Kconfig"
|
|||
if CRYPTO
|
||||
source "arch/arm64/crypto/Kconfig"
|
||||
endif
|
||||
|
||||
config AF_NOISE_ELIMINATION
|
||||
bool "For elimnating AF resonance noise"
|
||||
default n
|
||||
help
|
||||
Enable it only for produts that suffering AF resonance noise.
|
||||
|
||||
config CAMERA_FLASH_PWM
|
||||
bool "control flash"
|
||||
default n
|
||||
help
|
||||
Enable it only for produts that control flash.
|
||||
|
||||
config CAMERA_FLASH_IIC_COMPATIBLE
|
||||
bool "auto select iic flash suppliers"
|
||||
default n
|
||||
help
|
||||
Enable it, this is automatically selected flash supplers.
|
||||
|
|
|
@ -532,7 +532,7 @@ CONFIG_QCOM_APCS_IPC=y
|
|||
CONFIG_IOMMU_IO_PGTABLE_FAST=y
|
||||
CONFIG_ARM_SMMU=y
|
||||
CONFIG_QCOM_LAZY_MAPPING=y
|
||||
CONFIG_IOMMU_DEBUG=y
|
||||
# CONFIG_IOMMU_DEBUG is not set
|
||||
CONFIG_IOMMU_TESTS=y
|
||||
CONFIG_RPMSG_CHAR=y
|
||||
CONFIG_RPMSG_QCOM_GLINK_RPM=y
|
||||
|
@ -663,7 +663,7 @@ CONFIG_MAGIC_SYSRQ=y
|
|||
CONFIG_PANIC_TIMEOUT=5
|
||||
CONFIG_SCHEDSTATS=y
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
CONFIG_DEBUG_LIST=y
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
CONFIG_IPC_LOGGING=y
|
||||
CONFIG_CORESIGHT=y
|
||||
CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y
|
||||
|
@ -677,3 +677,4 @@ CONFIG_CORESIGHT_HWEVENT=y
|
|||
CONFIG_CORESIGHT_DUMMY=y
|
||||
CONFIG_CORESIGHT_REMOTE_ETM=y
|
||||
CONFIG_CORESIGHT_TGU=y
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
|
|
19
arch/arm64/configs/vendor/ext_config/borneo-default.config
vendored
Normal file
19
arch/arm64/configs/vendor/ext_config/borneo-default.config
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_BORNEO_DTB=y
|
||||
# CONFIG_BAT_NTC_10K is not set
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
41
arch/arm64/configs/vendor/ext_config/capri-default.config
vendored
Normal file
41
arch/arm64/configs/vendor/ext_config/capri-default.config
vendored
Normal file
|
@ -0,0 +1,41 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_CAPRI_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
CONFIG_NFC_NQ=y
|
||||
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_DEBUG_LIST=y
|
42
arch/arm64/configs/vendor/ext_config/caprip-default.config
vendored
Normal file
42
arch/arm64/configs/vendor/ext_config/caprip-default.config
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_CAPRIP_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
CONFIG_NFC_NQ=y
|
||||
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_AF_NOISE_ELIMINATION=y
|
42
arch/arm64/configs/vendor/ext_config/cebu-default.config
vendored
Normal file
42
arch/arm64/configs/vendor/ext_config/cebu-default.config
vendored
Normal file
|
@ -0,0 +1,42 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_CEBU_DTB=y
|
||||
# CONFIG_BAT_NTC_10K is not set
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
CONFIG_NFC_NQ=y
|
||||
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
|
||||
|
57
arch/arm64/configs/vendor/ext_config/debug-bengal-arm.config
vendored
Normal file
57
arch/arm64/configs/vendor/ext_config/debug-bengal-arm.config
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_AT803X_PHY=y
|
||||
CONFIG_BACKLIGHT_GENERIC=m
|
||||
CONFIG_BRIDGE_EBT_ARPREPLY=y
|
||||
CONFIG_BRIDGE_EBT_DNAT=y
|
||||
CONFIG_BRIDGE_EBT_SNAT=y
|
||||
CONFIG_BRIDGE_EBT_T_FILTER=y
|
||||
CONFIG_BRIDGE_EBT_T_NAT=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_CFG80211_INTERNAL_REGDB=y
|
||||
CONFIG_DEBUG_OBJECTS_FREE=y
|
||||
CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
|
||||
CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
|
||||
CONFIG_DEBUG_OBJECTS_TIMERS=y
|
||||
CONFIG_DEBUG_OBJECTS_WORK=y
|
||||
CONFIG_DEBUG_OBJECTS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
CONFIG_EFIVAR_FS=y
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EXTCON_USB_GPIO=y
|
||||
CONFIG_HIDRAW=y
|
||||
CONFIG_INPUT_EVBUG=m
|
||||
CONFIG_INPUT_GPIO=y
|
||||
CONFIG_INPUT_KEYRESET=y
|
||||
CONFIG_INPUT_TABLET=y
|
||||
CONFIG_MEDIA_RADIO_SUPPORT=y
|
||||
# CONFIG_MSM_JTAGV8 is not set
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_PANIC_ON_OOPS=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_PTP_1588_CLOCK=y
|
||||
CONFIG_QCOM_CPUSS_DUMP=y
|
||||
CONFIG_SOC_CAMERA_PLATFORM=y
|
||||
CONFIG_SOC_CAMERA=y
|
||||
CONFIG_SPI_DEBUG=y
|
||||
CONFIG_SPI_QUP=y
|
||||
CONFIG_SPMI_MSM_PMIC_ARB_DEBUG=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_UFS_FAULT_INJECTION=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_XZ_DEC=y
|
||||
|
||||
|
24
arch/arm64/configs/vendor/ext_config/debug-bengal-arm64.config
vendored
Normal file
24
arch/arm64/configs/vendor/ext_config/debug-bengal-arm64.config
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_ARM64_STRICT_BREAK_BEFORE_MAKE=y
|
||||
CONFIG_EDAC_CORTEX_ARM64_DBE_IRQ_ONLY=y
|
||||
CONFIG_EDAC_CORTEX_ARM64_PANIC_ON_UE=y
|
||||
CONFIG_EDAC_CORTEX_ARM64=y
|
||||
CONFIG_FUNCTION_TRACER=y
|
||||
CONFIG_PAGE_POISONING=y
|
||||
CONFIG_PRINT_VMEMLAYOUT=y
|
||||
CONFIG_SCSI_UFSHCD_CMD_LOGGING=y
|
||||
CONFIG_KPROBES=y
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-borneo.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-borneo.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-capri.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-capri.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-caprip.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-caprip.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-cebu.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-cebu.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-devon.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-devon.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-guam.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-guam.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
17
arch/arm64/configs/vendor/ext_config/debug-bengal-guamna.config
vendored
Normal file
17
arch/arm64/configs/vendor/ext_config/debug-bengal-guamna.config
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
||||
# CONFIG_DEBUG_PANIC_ON_OOM is not set
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-guamp.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-guamp.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-hawao.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-hawao.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
16
arch/arm64/configs/vendor/ext_config/debug-bengal-rhode.config
vendored
Normal file
16
arch/arm64/configs/vendor/ext_config/debug-bengal-rhode.config
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
|
88
arch/arm64/configs/vendor/ext_config/debug-bengal.config
vendored
Normal file
88
arch/arm64/configs/vendor/ext_config/debug-bengal.config
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_LKDTM=m
|
||||
CONFIG_ATOMIC64_SELFTEST=m
|
||||
CONFIG_LOCK_TORTURE_TEST=m
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_TEST_USER_COPY is no set
|
||||
CONFIG_DEBUG_BLK_CGROUP=y
|
||||
# CONFIG_CGROUP_DEBUG is not set
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
CONFIG_PM_DEBUG=y
|
||||
# CONFIG_CLEANCACHE is not set
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
# CONFIG_CMA_ALLOW_WRITE_DEBUGFS is not set
|
||||
CONFIG_L2TP_DEBUGFS=y
|
||||
CONFIG_SERIAL_MSM_GENI_CONSOLE=y
|
||||
CONFIG_TTY_PRINTK=y
|
||||
CONFIG_MMC_IPC_LOGGING=y
|
||||
CONFIG_EDAC=y
|
||||
CONFIG_QCOM_GPI_DMA_DEBUG=y
|
||||
CONFIG_IOMMU_TLBSYNC_DEBUG=y
|
||||
CONFIG_ARM_SMMU_TESTBUS_DUMP=y
|
||||
CONFIG_MSM_CORE_HANG_DETECT=y
|
||||
CONFIG_MSM_GLADIATOR_HANG_DETECT=y
|
||||
CONFIG_MSM_GLADIATOR_ERP=y
|
||||
CONFIG_PANIC_ON_GLADIATOR_ERROR=y
|
||||
CONFIG_ICNSS_DEBUG=y
|
||||
CONFIG_F2FS_CHECK_FS=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
# CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS is not set
|
||||
CONFIG_DEBUG_MODULE_LOAD_INFO=y
|
||||
# CONFIG_PAGE_OWNER is not set
|
||||
CONFIG_DEBUG_SECTION_MISMATCH=y
|
||||
# CONFIG_DEBUG_PAGEALLOC is not set
|
||||
# CONFIG_DEBUG_PANIC_ON_OOM is not set
|
||||
# CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT is not set
|
||||
CONFIG_PAGE_POISONING=y
|
||||
# CONFIG_PAGE_POISONING_ENABLE_DEFAULT is not set
|
||||
# CONFIG_DEBUG_KMEMLEAK is not set
|
||||
CONFIG_DEBUG_STACK_USAGE=y
|
||||
CONFIG_DEBUG_MEMORY_INIT=y
|
||||
CONFIG_SOFTLOCKUP_DETECTOR=y
|
||||
CONFIG_WQ_WATCHDOG=y
|
||||
CONFIG_PANIC_ON_SCHED_BUG=y
|
||||
CONFIG_PANIC_ON_RT_THROTTLING=y
|
||||
CONFIG_SCHED_STACK_END_CHECK=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_ATOMIC_SLEEP=y
|
||||
CONFIG_DEBUG_SG=y
|
||||
CONFIG_DEBUG_NOTIFIERS=y
|
||||
CONFIG_DEBUG_CREDENTIALS=y
|
||||
CONFIG_FAULT_INJECTION=y
|
||||
CONFIG_FAIL_PAGE_ALLOC=y
|
||||
CONFIG_FAULT_INJECTION_DEBUG_FS=y
|
||||
CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y
|
||||
CONFIG_QCOM_RTB=y
|
||||
CONFIG_QCOM_RTB_SEPARATE_CPUS=y
|
||||
# CONFIG_PREEMPTIRQ_EVENTS is not set
|
||||
CONFIG_IRQSOFF_TRACER=y
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
CONFIG_BLK_DEV_IO_TRACE=y
|
||||
CONFIG_MEMTEST=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_BUG_ON_DATA_CORRUPTION=y
|
||||
CONFIG_PANIC_ON_DATA_CORRUPTION=y
|
||||
CONFIG_PID_IN_CONTEXTIDR=y
|
||||
CONFIG_CORESIGHT_SOURCE_ETM4X=y
|
||||
CONFIG_SUSPEND_DEBUG=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_THERMAL_EMULATION=y
|
||||
# CONFIG_MODULE_SIG is not set
|
||||
CONFIG_CRYPTO_SHA512=y
|
||||
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
|
59
arch/arm64/configs/vendor/ext_config/devon-default.config
vendored
Normal file
59
arch/arm64/configs/vendor/ext_config/devon-default.config
vendored
Normal file
|
@ -0,0 +1,59 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_DEVON_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_TOUCHSCREEN_FTS is not set
|
||||
# CONFIG_TOUCHSCREEN_NT36XXX is not set
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_AF_NOISE_ELIMINATION=y
|
||||
#
|
||||
#[Samsung NFC] Add config by Edith
|
||||
#
|
||||
CONFIG_NFC=y
|
||||
CONFIG_SEC_NFC=y
|
||||
CONFIG_SEC_NFC_PRODUCT_N5=y
|
||||
CONFIG_SEC_NFC_IF_I2C=y
|
||||
# CONFIG_SEC_NFC_GPIO_CLK is not set
|
||||
# CONFIG_SEC_NFC_PMIC_LDO is not set
|
||||
# CONFIG_SEC_NFC_DEDICATED_CLK is not set
|
||||
# CONFIG_SEC_ESE_COLDRESET is not set
|
||||
CONFIG_ZRAM_WRITEBACK=y
|
||||
CONFIG_CAMERA_FLASH_PWM=y
|
||||
CONFIG_CRYPTO_LZ4=y
|
||||
# CONFIG_QCOM_FSA4480_I2C is not set
|
||||
CONFIG_CAMERA_FLASH_IIC_COMPATIBLE=y
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=y
|
20
arch/arm64/configs/vendor/ext_config/factory-bengal.config
vendored
Normal file
20
arch/arm64/configs/vendor/ext_config/factory-bengal.config
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
#CONFIG_DEVMEM is not set
|
||||
CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=y
|
||||
CONFIG_SUSPEND_DEBUG=y
|
||||
CONFIG_QCOM_I2C_NACK_ERR_WA_FAC=y
|
||||
|
39
arch/arm64/configs/vendor/ext_config/guam-default.config
vendored
Normal file
39
arch/arm64/configs/vendor/ext_config/guam-default.config
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_GUAM_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
19
arch/arm64/configs/vendor/ext_config/guamna-default.config
vendored
Normal file
19
arch/arm64/configs/vendor/ext_config/guamna-default.config
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_GUAMNA_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
21
arch/arm64/configs/vendor/ext_config/guamp-default.config
vendored
Normal file
21
arch/arm64/configs/vendor/ext_config/guamp-default.config
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_GUAMP_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
CONFIG_NFC_NQ=y
|
||||
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
|
60
arch/arm64/configs/vendor/ext_config/hawao-default.config
vendored
Normal file
60
arch/arm64/configs/vendor/ext_config/hawao-default.config
vendored
Normal file
|
@ -0,0 +1,60 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_HAWAO_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_TOUCHSCREEN_FTS is not set
|
||||
# CONFIG_TOUCHSCREEN_NT36XXX is not set
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_AF_NOISE_ELIMINATION=y
|
||||
#
|
||||
#[Samsung NFC] Add config by Edith
|
||||
#
|
||||
CONFIG_NFC=y
|
||||
CONFIG_SEC_NFC=y
|
||||
CONFIG_SEC_NFC_PRODUCT_N5=y
|
||||
CONFIG_SEC_NFC_IF_I2C=y
|
||||
# CONFIG_SEC_NFC_GPIO_CLK is not set
|
||||
# CONFIG_SEC_NFC_PMIC_LDO is not set
|
||||
# CONFIG_SEC_NFC_DEDICATED_CLK is not set
|
||||
# CONFIG_SEC_ESE_COLDRESET is not set
|
||||
CONFIG_ZRAM_WRITEBACK=y
|
||||
CONFIG_CRYPTO_LZ4=y
|
||||
# CONFIG_QCOM_FSA4480_I2C is not set
|
||||
CONFIG_CAMERA_FLASH_IIC_COMPATIBLE=y
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=y
|
||||
#Add this for hawao longer the sd dedoune time
|
||||
CONFIG_SD_INSERT_DEBOUNCE_DELAY_LONGER=y
|
69
arch/arm64/configs/vendor/ext_config/moto-bengal.config
vendored
Normal file
69
arch/arm64/configs/vendor/ext_config/moto-bengal.config
vendored
Normal file
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_MMI_DEVICE_DTBS=y
|
||||
CONFIG_PSTORE=y
|
||||
CONFIG_PSTORE_CONSOLE=y
|
||||
CONFIG_PSTORE_RAM=y
|
||||
CONFIG_PSTORE_PMSG=y
|
||||
# CONFIG_PSTORE_DEFLATE_COMPRESS is not set
|
||||
CONFIG_HZ_300=y
|
||||
# CONFIG_CGROUP_DEBUG is not set
|
||||
CONFIG_SERIAL_MSM_GENI_CONSOLE=y
|
||||
CONFIG_BUILD_ARM64_DT_OVERLAY=y
|
||||
CONFIG_DIAG_OVER_TTY=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_USB_UAS=y
|
||||
CONFIG_USB_CONFIGFS_ACM=y
|
||||
CONFIG_U_SERIAL_CONSOLE=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
# CONFIG_CORESIGHT is not set
|
||||
# CONFIG_CORESIGHT_LINK_AND_SINK_TMC is not set
|
||||
# CONFIG_CORESIGHT_DYNAMIC_REPLICATOR is not set
|
||||
# CONFIG_CORESIGHT_STM is not set
|
||||
# CONFIG_CORESIGHT_CTI is not set
|
||||
# CONFIG_CORESIGHT_CTI_SAVE_DISABLE is not set
|
||||
# CONFIG_CORESIGHT_TPDA is not set
|
||||
# CONFIG_CORESIGHT_TPDM is not set
|
||||
# CONFIG_CORESIGHT_HWEVENT is not set
|
||||
# CONFIG_CORESIGHT_DUMMY is not set
|
||||
# CONFIG_CORESIGHT_REMOTE_ETM is not set
|
||||
# CONFIG_CORESIGHT_TGU is not set
|
||||
# CONFIG_NFC_NQ is not set
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
# CONFIG_EXT4_USE_FOR_EXT2 is not set
|
||||
# CONFIG_EXT4_USE_FOR_EXT3 is not set
|
||||
# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_REFLASH is not set
|
||||
# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY is not set
|
||||
# CONFIG_TOUCHSCREEN_ST is not set
|
||||
# CONFIG_TOUCHSCREEN_SYNAPTICS_DSX is not set
|
||||
# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM is not set
|
||||
# CONFIG_FPR_FPC is not set
|
||||
CONFIG_DUAL_ROLE_USB_INTF=y
|
||||
# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
|
||||
CONFIG_PSI=y
|
||||
# CONFIG_MEMORY_HOTPLUG is not set
|
||||
# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set
|
||||
# CONFIG_MEMORY_HOTPLUG_MOVABLE_NODE is not set
|
||||
# CONFIG_MEMORY_HOTREMOVE is not set
|
||||
# CONFIG_OVERRIDE_MEMORY_LIMIT is not set
|
||||
# CONFIG_HOTPLUG_SIZE_BITS is not set
|
||||
# CONFIG_QCOM_MEM_OFFLINE is not set
|
||||
CONFIG_MEDIA_USB_SUPPORT=y
|
||||
CONFIG_USB_VIDEO_CLASS=y
|
||||
# CONFIG_ZRAM_DEDUP is not set
|
||||
CONFIG_ION_POOL_FILL_MARK=16
|
||||
CONFIG_DEBUG_BUGVERBOSE=n
|
||||
# CONFIG_SLAB_MERGE_DEFAULT is not set
|
50
arch/arm64/configs/vendor/ext_config/rhode-default.config
vendored
Normal file
50
arch/arm64/configs/vendor/ext_config/rhode-default.config
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
#
|
||||
# Please avoid changing the Qualcomm defconfig files and use this file to
|
||||
# add any Motorola-specific configuration changes that are applicable to
|
||||
# userdebug, eng, and user builds.
|
||||
#
|
||||
# After building, a list of all of the config files that are used can be found
|
||||
# at the top of:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/mapphone_defconfig
|
||||
#
|
||||
# The actual output of the kernel configuration system can be found at:
|
||||
# out/target/product/$(PRODUCT)/obj/KERNEL_OBJ/.config
|
||||
#
|
||||
# You can check the .config file to verify that your configuration option is
|
||||
# being set as expected.
|
||||
#
|
||||
CONFIG_RHODE_DTB=y
|
||||
CONFIG_BAT_NTC_10K=y
|
||||
CONFIG_PANEL_NOTIFICATIONS=y
|
||||
# CONFIG_SMB1355_SLAVE_CHARGER is not set
|
||||
# Android R compatibility requirements
|
||||
CONFIG_ANDROID_BINDERFS=y
|
||||
CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_DM_SNAPSHOT=y
|
||||
CONFIG_FS_VERITY=y
|
||||
CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
|
||||
# CONFIG_FW_CACHE is not set
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
# CONFIG_PM_AUTOSLEEP is not set
|
||||
# CONFIG_RT_GROUP_SCHED is not set
|
||||
CONFIG_STATIC_USERMODEHELPER=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_VETH=y
|
||||
CONFIG_ARM64_SW_TTBR0_PAN=y
|
||||
# DISALLOW_CONFIG_IKHEADERS_IS_N
|
||||
CONFIG_IKHEADERS=y
|
||||
CONFIG_EXT4_FS_POSIX_ACL=y
|
||||
CONFIG_DEBUG_LIST=y
|
||||
CONFIG_AF_NOISE_ELIMINATION=y
|
||||
CONFIG_NFC=y
|
||||
CONFIG_SEC_NFC=y
|
||||
CONFIG_SEC_NFC_PRODUCT_N5=y
|
||||
CONFIG_SEC_NFC_IF_I2C=y
|
||||
CONFIG_REGULATOR_WL2868C=y
|
||||
CONFIG_CAMERA_FLASH_PWM=y
|
||||
CONFIG_ZRAM_WRITEBACK=y
|
||||
# CONFIG_QCOM_FSA4480_I2C is not set
|
||||
CONFIG_CRYPTO_LZ4=y
|
||||
CONFIG_CRYPTO_CHACHA20POLY1305=y
|
62
defconfig.mk
Normal file
62
defconfig.mk
Normal file
|
@ -0,0 +1,62 @@
|
|||
DEFCONFIGSRC := $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs
|
||||
LJAPDEFCONFIGSRC := ${DEFCONFIGSRC}/vendor/ext_config
|
||||
DEFCONFIG_BASENAME := $(subst -perf,,$(subst _defconfig,,$(notdir $(KERNEL_DEFCONFIG))))
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS := $(DEFCONFIGSRC)/$(KERNEL_DEFCONFIG) $(LJAPDEFCONFIGSRC)/moto-$(DEFCONFIG_BASENAME).config
|
||||
TARGET_DEFCONFIG := $(KERNEL_OUT)/mapphone_defconfig
|
||||
KERNEL_DEBUG_DEFCONFIG := $(LJAPDEFCONFIGSRC)/debug-$(DEFCONFIG_BASENAME).config
|
||||
KERNEL_DEBUG_ARCH_DEFCONFIG := $(LJAPDEFCONFIGSRC)/debug-$(DEFCONFIG_BASENAME)-$(KERNEL_ARCH).config
|
||||
PRODUCT_KERNEL_DEBUG_DEFCONFIG := $(LJAPDEFCONFIGSRC)/$(PRODUCT_DEBUG_DEFCONFIG)
|
||||
FACTORY_DEFCONFIG := $(LJAPDEFCONFIGSRC)/factory-$(DEFCONFIG_BASENAME).config
|
||||
KERNEL_DEBUG_FS_DEFCONFIG := ${DEFCONFIGSRC}/vendor/debugfs.config
|
||||
|
||||
# add debug config file for non-user build
|
||||
ifneq ($(TARGET_BUILD_VARIANT), user)
|
||||
ifneq ($(TARGET_NO_KERNEL_DEBUG), true)
|
||||
|
||||
ifneq ($(wildcard $(KERNEL_DEBUG_DEFCONFIG)),)
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS += $(KERNEL_DEBUG_DEFCONFIG)
|
||||
|
||||
# add arch arm/arm64 debug config
|
||||
ifneq ($(wildcard $(KERNEL_DEBUG_ARCH_DEFCONFIG)),)
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS += $(KERNEL_DEBUG_ARCH_DEFCONFIG)
|
||||
endif
|
||||
|
||||
# Add a product-specific debug defconfig, too
|
||||
ifneq ($(wildcard $(PRODUCT_KERNEL_DEBUG_DEFCONFIG)),)
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS += $(PRODUCT_KERNEL_DEBUG_DEFCONFIG)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_FACTORY_DEFCONFIG), true)
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS += $(FACTORY_DEFCONFIG)
|
||||
endif
|
||||
|
||||
# append all additional configs
|
||||
ifneq ($(KERNEL_EXTRA_CONFIG),)
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS += $(KERNEL_EXTRA_CONFIG:%=$(LJAPDEFCONFIGSRC)/%.config)
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_BUILD_VARIANT), user)
|
||||
ifeq (true,$(call math_gt_or_eq,$(SHIPPING_API_LEVEL),30))
|
||||
# disable debug fs
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS += $(KERNEL_DEBUG_FS_DEFCONFIG)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
define do-make-defconfig
|
||||
$(hide) mkdir -p $(dir $(1))
|
||||
( perl -le 'print "# This file was automatically generated from:\n#\t" . join("\n#\t", @ARGV) . "\n"' $(2) && cat $(2) ) > $(1) || ( rm -f $(1) && false )
|
||||
endef
|
||||
|
||||
#When building MSI, moto config does not really take effect
|
||||
ifneq ($(findstring msi, $(TARGET_PRODUCT)),)
|
||||
PRODUCT_SPECIFIC_DEFCONFIGS := $(DEFCONFIGSRC)/$(KERNEL_DEFCONFIG)
|
||||
endif
|
||||
#
|
||||
# make combined defconfig file
|
||||
#---------------------------------------
|
||||
$(TARGET_DEFCONFIG): $(PRODUCT_SPECIFIC_DEFCONFIGS)
|
||||
$(call do-make-defconfig,$@,$(PRODUCT_SPECIFIC_DEFCONFIGS))
|
|
@ -438,7 +438,7 @@ static pm_callback_t pm_noirq_op(const struct dev_pm_ops *ops, pm_message_t stat
|
|||
|
||||
static void pm_dev_dbg(struct device *dev, pm_message_t state, const char *info)
|
||||
{
|
||||
dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event),
|
||||
dev_info(dev, "%s%s%s\n", info, pm_verb(state.event),
|
||||
((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
|
||||
", may wakeup" : "");
|
||||
}
|
||||
|
@ -464,7 +464,7 @@ static void dpm_show_time(ktime_t starttime, pm_message_t state, int error,
|
|||
if (usecs == 0)
|
||||
usecs = 1;
|
||||
|
||||
pm_pr_dbg("%s%s%s of devices %s after %ld.%03ld msecs\n",
|
||||
pr_info("%s%s%s of devices %s after %ld.%03ld msecs\n",
|
||||
info ?: "", info ? " " : "", pm_verb(state.event),
|
||||
error ? "aborted" : "complete",
|
||||
usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC);
|
||||
|
|
|
@ -861,7 +861,7 @@ void pm_print_active_wakeup_sources(void)
|
|||
srcuidx = srcu_read_lock(&wakeup_srcu);
|
||||
list_for_each_entry_rcu(ws, &wakeup_sources, entry) {
|
||||
if (ws->active) {
|
||||
pr_debug("active wakeup source: %s\n", ws->name);
|
||||
pr_info("active wakeup source: %s\n", ws->name);
|
||||
active = 1;
|
||||
} else if (!active &&
|
||||
(!last_activity_ws ||
|
||||
|
@ -872,7 +872,7 @@ void pm_print_active_wakeup_sources(void)
|
|||
}
|
||||
|
||||
if (!active && last_activity_ws)
|
||||
pr_debug("last active wakeup source: %s\n",
|
||||
pr_info("last active wakeup source: %s\n",
|
||||
last_activity_ws->name);
|
||||
srcu_read_unlock(&wakeup_srcu, srcuidx);
|
||||
}
|
||||
|
@ -1158,6 +1158,33 @@ static const struct seq_operations wakeup_sources_stats_seq_ops = {
|
|||
.show = wakeup_sources_stats_seq_show,
|
||||
};
|
||||
|
||||
int wakelock_dump_active_info(char *buf, int size)
|
||||
{
|
||||
struct wakeup_source *ws;
|
||||
unsigned long flags;
|
||||
char *p = buf;
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(ws, &wakeup_sources, entry) {
|
||||
spin_lock_irqsave(&ws->lock, flags);
|
||||
if (ws->active) {
|
||||
if (time_after(ws->timer_expires, jiffies)) {
|
||||
long timeout = ws->timer_expires - jiffies;
|
||||
|
||||
p += snprintf(p, size - (p - buf),
|
||||
" (active)[%s], time left %d (msecs)\n",
|
||||
ws->name, jiffies_to_msecs(timeout));
|
||||
} else /* active */
|
||||
p += snprintf(p, size - (p - buf),
|
||||
" (active)[%s]\n", ws->name);
|
||||
}
|
||||
spin_unlock_irqrestore(&ws->lock, flags);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
return p - buf;
|
||||
}
|
||||
|
||||
static int wakeup_sources_stats_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open_private(file, &wakeup_sources_stats_seq_ops, sizeof(int));
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/genhd.h>
|
||||
#include <linux/highmem.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/swap.h>
|
||||
#include <linux/backing-dev.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
@ -1751,6 +1752,27 @@ static void zram_slot_free_notify(struct block_device *bdev,
|
|||
zram_slot_unlock(zram, index);
|
||||
}
|
||||
|
||||
/* Moto lulei1: check sync_io state on swap entry,
|
||||
* return 0 on wb page, else return 1.
|
||||
*/
|
||||
#ifdef CONFIG_ZRAM_WRITEBACK
|
||||
static int zram_ioctl(struct block_device *bdev, fmode_t mode,
|
||||
unsigned int cmd, unsigned long index)
|
||||
{
|
||||
struct zram *zram;
|
||||
int has_sync_io = 1;
|
||||
|
||||
if (cmd != SWP_SYNCHRONOUS_IO) return -EINVAL;
|
||||
|
||||
zram = bdev->bd_disk->private_data;
|
||||
zram_slot_lock(zram, index);
|
||||
has_sync_io = zram_test_flag(zram, index, ZRAM_WB) ? 0 : 1;
|
||||
zram_slot_unlock(zram, index);
|
||||
|
||||
return has_sync_io;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int zram_rw_page(struct block_device *bdev, sector_t sector,
|
||||
struct page *page, unsigned int op)
|
||||
{
|
||||
|
@ -1943,6 +1965,9 @@ static int zram_open(struct block_device *bdev, fmode_t mode)
|
|||
static const struct block_device_operations zram_devops = {
|
||||
.open = zram_open,
|
||||
.swap_slot_free_notify = zram_slot_free_notify,
|
||||
#ifdef CONFIG_ZRAM_WRITEBACK
|
||||
.ioctl = zram_ioctl,
|
||||
#endif
|
||||
.rw_page = zram_rw_page,
|
||||
.owner = THIS_MODULE
|
||||
};
|
||||
|
|
|
@ -36,4 +36,11 @@ config DIAGFWD_BRIDGE_CODE
|
|||
over MHI or SMUX to communicate with the remote processors and
|
||||
receive/send diag traffic to remote processors.
|
||||
|
||||
config DIAG_OVER_TTY
|
||||
bool "Enable DIAG traffic to go over a tty to userspace"
|
||||
depends on ARCH_QCOM && DIAG_OVER_USB
|
||||
default n
|
||||
help
|
||||
This feature helps segregate code required for DIAG traffic to go over a TTY to userspace.
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -352,7 +352,8 @@ static void usb_read_done_work_fn(struct work_struct *work)
|
|||
}
|
||||
|
||||
static void diag_usb_write_done(struct diag_usb_info *ch,
|
||||
struct diag_request *req)
|
||||
struct diag_request *req,
|
||||
int sync)
|
||||
{
|
||||
int ctxt = 0;
|
||||
int len = 0;
|
||||
|
@ -362,14 +363,15 @@ static void diag_usb_write_done(struct diag_usb_info *ch,
|
|||
|
||||
if (!ch || !req)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&ch->write_lock, flags);
|
||||
if (!sync)
|
||||
spin_lock_irqsave(&ch->write_lock, flags);
|
||||
ch->write_cnt++;
|
||||
entry = diag_usb_buf_tbl_get(ch, req->context);
|
||||
if (!entry) {
|
||||
pr_err_ratelimited("diag: In %s, unable to find entry %pK in the table\n",
|
||||
__func__, req->context);
|
||||
spin_unlock_irqrestore(&ch->write_lock, flags);
|
||||
if (!sync)
|
||||
spin_unlock_irqrestore(&ch->write_lock, flags);
|
||||
return;
|
||||
}
|
||||
if (atomic_read(&entry->ref_count) != 0) {
|
||||
|
@ -377,7 +379,8 @@ static void diag_usb_write_done(struct diag_usb_info *ch,
|
|||
atomic_read(&entry->ref_count));
|
||||
diag_ws_on_copy_complete(DIAG_WS_MUX);
|
||||
diagmem_free(driver, req, ch->mempool);
|
||||
spin_unlock_irqrestore(&ch->write_lock, flags);
|
||||
if (!sync)
|
||||
spin_unlock_irqrestore(&ch->write_lock, flags);
|
||||
return;
|
||||
}
|
||||
DIAG_LOG(DIAG_DEBUG_MUX, "full write_done\n");
|
||||
|
@ -394,7 +397,8 @@ static void diag_usb_write_done(struct diag_usb_info *ch,
|
|||
len = 0;
|
||||
ctxt = 0;
|
||||
diagmem_free(driver, req, ch->mempool);
|
||||
spin_unlock_irqrestore(&ch->write_lock, flags);
|
||||
if(!sync)
|
||||
spin_unlock_irqrestore(&ch->write_lock, flags);
|
||||
}
|
||||
|
||||
static void diag_usb_notifier(void *priv, unsigned int event,
|
||||
|
@ -439,7 +443,10 @@ static void diag_usb_notifier(void *priv, unsigned int event,
|
|||
&usb_info->read_done_work);
|
||||
break;
|
||||
case USB_DIAG_WRITE_DONE:
|
||||
diag_usb_write_done(usb_info, d_req);
|
||||
diag_usb_write_done(usb_info, d_req, 0);
|
||||
break;
|
||||
case USB_DIAG_WRITE_DONE_SYNC:
|
||||
diag_usb_write_done(usb_info, d_req, 1);
|
||||
break;
|
||||
default:
|
||||
pr_err_ratelimited("diag: Unknown event from USB diag\n");
|
||||
|
|
|
@ -466,6 +466,9 @@ static long dma_buf_ioctl(struct file *file,
|
|||
case DMA_BUF_SET_NAME_B:
|
||||
return dma_buf_set_name(dmabuf, (const char __user *)arg);
|
||||
|
||||
case DMA_BUF_IOCTL_IMPORT_BUF_ADD_BY_MOTO:
|
||||
dmabuf->ops->import_buf_add_by_moto(dmabuf);
|
||||
return 0;
|
||||
default:
|
||||
return -ENOTTY;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
config MSM_TZ_LOG
|
||||
tristate "MSM Trust Zone (TZ) Log Driver"
|
||||
depends on DEBUG_FS
|
||||
help
|
||||
This option enables a driver with a debugfs interface for messages
|
||||
produced by the Secure code (Trust zone). These messages provide
|
||||
|
|
|
@ -23,6 +23,13 @@
|
|||
#include <soc/qcom/qseecomi.h>
|
||||
#include <soc/qcom/qtee_shmbridge.h>
|
||||
|
||||
|
||||
#ifndef CONFIG_DEBUG_FS
|
||||
#include <linux/proc_fs.h>
|
||||
static struct proc_dir_entry *tzdbg_root;
|
||||
#define TZDBG_ROOT_DIR "tzdbg"
|
||||
#endif
|
||||
|
||||
/* QSEE_LOG_BUF_SIZE = 32K */
|
||||
#define QSEE_LOG_BUF_SIZE 0x8000
|
||||
|
||||
|
@ -1131,7 +1138,11 @@ static ssize_t tzdbgfs_read_unencrypted(struct file *file, char __user *buf,
|
|||
size_t count, loff_t *offp)
|
||||
{
|
||||
int len = 0;
|
||||
int tz_id = *(int *)(file->private_data);
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
int tz_id = *(int *)(file->private_data);
|
||||
#else
|
||||
int tz_id = *(int *)((struct seq_file *)file->private_data)->private;
|
||||
#endif
|
||||
|
||||
if (tz_id == TZDBG_BOOT || tz_id == TZDBG_RESET ||
|
||||
tz_id == TZDBG_INTERRUPT || tz_id == TZDBG_GENERAL ||
|
||||
|
@ -1196,7 +1207,11 @@ static ssize_t tzdbgfs_read_encrypted(struct file *file, char __user *buf,
|
|||
size_t count, loff_t *offp)
|
||||
{
|
||||
int len = 0, ret = 0;
|
||||
int tz_id = *(int *)(file->private_data);
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
int tz_id = *(int *)(file->private_data);
|
||||
#else
|
||||
int tz_id = *(int *)((struct seq_file *)file->private_data)->private;
|
||||
#endif
|
||||
struct tzdbg_stat *stat = &(tzdbg.stat[tz_id]);
|
||||
|
||||
pr_debug("%s: tz_id = %d\n", __func__, tz_id);
|
||||
|
@ -1253,10 +1268,22 @@ static ssize_t tzdbgfs_read(struct file *file, char __user *buf,
|
|||
return tzdbgfs_read_encrypted(file, buf, count, offp);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_DEBUG_FS
|
||||
|
||||
static int tzdbg_proc_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return single_open(file, NULL, PDE_DATA(inode));
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct file_operations tzdbg_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = tzdbgfs_read,
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
.open = simple_open,
|
||||
#else
|
||||
.open = tzdbg_proc_open,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
@ -1412,6 +1439,7 @@ static void tzdbg_free_encrypted_log_buf(struct platform_device *pdev)
|
|||
|
||||
static int tzdbgfs_init(struct platform_device *pdev)
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
int rc = 0;
|
||||
int i;
|
||||
struct dentry *dent_dir;
|
||||
|
@ -1441,13 +1469,57 @@ err:
|
|||
debugfs_remove_recursive(dent_dir);
|
||||
|
||||
return rc;
|
||||
#else
|
||||
int rc = 0;
|
||||
int i;
|
||||
struct proc_dir_entry *proc_d_entry = NULL;
|
||||
|
||||
tzdbg_root = proc_mkdir(TZDBG_ROOT_DIR, NULL);
|
||||
if (NULL == tzdbg_root) {
|
||||
dev_err(&pdev->dev, "Created dir /proc/%s error!\n", TZDBG_ROOT_DIR);
|
||||
return -1;
|
||||
}
|
||||
|
||||
dev_info(&pdev->dev, "Created dir /proc/%s \n", TZDBG_ROOT_DIR);
|
||||
|
||||
for (i = 0; i < TZDBG_STATS_MAX; i++) {
|
||||
tzdbg.debug_tz[i] = i;
|
||||
proc_d_entry = proc_create_data(tzdbg.stat[i].name, 0666, tzdbg_root, &tzdbg_fops, &tzdbg.debug_tz[i]);
|
||||
if (proc_d_entry == NULL) {
|
||||
dev_err(&pdev->dev, "TZ proc_create_data %s failed\n", tzdbg.stat[i].name);
|
||||
rc = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
tzdbg.disp_buf = kzalloc(max(debug_rw_buf_size,
|
||||
tzdbg.hyp_debug_rw_buf_size), GFP_KERNEL);
|
||||
if (tzdbg.disp_buf == NULL)
|
||||
goto err;
|
||||
|
||||
platform_set_drvdata(pdev, tzdbg_root);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
remove_proc_subtree(TZDBG_ROOT_DIR, NULL);
|
||||
return -1;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
static void tzdbgfs_exit(struct platform_device *pdev)
|
||||
{
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *dent_dir;
|
||||
dent_dir = platform_get_drvdata(pdev);
|
||||
debugfs_remove_recursive(dent_dir);
|
||||
#else
|
||||
kzfree(tzdbg.disp_buf);
|
||||
remove_proc_subtree(TZDBG_ROOT_DIR, NULL);
|
||||
if (g_qsee_log)
|
||||
dma_free_coherent(&pdev->dev, QSEE_LOG_BUF_SIZE,
|
||||
(void *)g_qsee_log, coh_pmem);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int __update_hypdbg_base(struct platform_device *pdev,
|
||||
|
|
|
@ -1097,6 +1097,29 @@ int mipi_dsi_dcs_get_display_brightness(struct mipi_dsi_device *dsi,
|
|||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_get_display_brightness);
|
||||
|
||||
/**
|
||||
* mipi_dsi_dcs_set_display_brightness_2bytes() - sets the brightness value of
|
||||
* the display with 2bytes value
|
||||
* @dsi: DSI peripheral device
|
||||
* @brightness: brightness value
|
||||
*
|
||||
* Return: 0 on success or a negative error code on failure.
|
||||
*/
|
||||
int mipi_dsi_dcs_set_display_brightness_2bytes(struct mipi_dsi_device *dsi,
|
||||
u16 brightness)
|
||||
{
|
||||
u8 payload[2] = { (brightness & 0xff00) >> 8, brightness & 0xff};
|
||||
ssize_t err;
|
||||
|
||||
err = mipi_dsi_dcs_write(dsi, MIPI_DCS_SET_DISPLAY_BRIGHTNESS,
|
||||
payload, sizeof(payload));
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_set_display_brightness_2bytes);
|
||||
|
||||
/**
|
||||
* mipi_dsi_dcs_set_display_brightness_large() - sets the 16-bit brightness value
|
||||
* of the display
|
||||
|
@ -1197,6 +1220,59 @@ int mipi_dsi_driver_register_full(struct mipi_dsi_driver *drv,
|
|||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_driver_register_full);
|
||||
|
||||
int mipi_dsi_dcs_get_elvss_data(struct mipi_dsi_device *dsi)
|
||||
{
|
||||
u8 payload_f0[2] = { 0x5A, 0x5A };
|
||||
u8 payload_b0 = 0x07;
|
||||
ssize_t err;
|
||||
|
||||
err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0, sizeof(payload_f0));
|
||||
err = mipi_dsi_dcs_write(dsi, 0xB0, &payload_b0, sizeof(payload_b0));
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_get_elvss_data);
|
||||
|
||||
int mipi_dsi_dcs_get_elvss_data_1(struct mipi_dsi_device *dsi)
|
||||
{
|
||||
u8 payload_f0_1[2] = { 0xA5, 0xA5 };
|
||||
ssize_t err;
|
||||
err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0_1, sizeof(payload_f0_1));
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_get_elvss_data_1);
|
||||
|
||||
int mipi_dsi_dcs_set_elvss_dim_off(struct mipi_dsi_device *dsi,
|
||||
u8 val)
|
||||
{
|
||||
u8 payload_f0[2] = { 0x5A, 0x5A };
|
||||
u8 payload_f0_1[2] = { 0xA5, 0xA5 };
|
||||
u8 payload_b7[2] = { 0x01, 0x5B };
|
||||
u8 payload_b0 = 0x07;
|
||||
ssize_t err;
|
||||
|
||||
pr_info("set elvss data:%d\n", val);
|
||||
|
||||
err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0, sizeof(payload_f0));
|
||||
err = mipi_dsi_dcs_write(dsi, 0xB7, payload_b7, sizeof(payload_b7));
|
||||
err = mipi_dsi_dcs_write(dsi, 0xB0, &payload_b0, sizeof(payload_b0));
|
||||
err = mipi_dsi_dcs_write(dsi, 0xB7, &val, sizeof(val));
|
||||
err = mipi_dsi_dcs_write(dsi, 0xF0, payload_f0_1, sizeof(payload_f0_1));
|
||||
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(mipi_dsi_dcs_set_elvss_dim_off);
|
||||
|
||||
/**
|
||||
* mipi_dsi_driver_unregister() - unregister a driver for DSI devices
|
||||
* @drv: DSI driver structure
|
||||
|
|
|
@ -229,16 +229,99 @@ static ssize_t modes_show(struct device *device,
|
|||
return written;
|
||||
}
|
||||
|
||||
static ssize_t panelId_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct drm_connector *connector = to_drm_connector(device);
|
||||
int written = 0;
|
||||
|
||||
mutex_lock(&connector->dev->mode_config.mutex);
|
||||
written = snprintf(buf, PAGE_SIZE, "0x%016llx\n",
|
||||
connector->display_info.panel_id);
|
||||
mutex_unlock(&connector->dev->mode_config.mutex);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
static ssize_t panelVer_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct drm_connector *connector = to_drm_connector(device);
|
||||
int written = 0;
|
||||
|
||||
mutex_lock(&connector->dev->mode_config.mutex);
|
||||
written = snprintf(buf, PAGE_SIZE, "0x%016llx\n",
|
||||
connector->display_info.panel_ver);
|
||||
mutex_unlock(&connector->dev->mode_config.mutex);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
static ssize_t panelName_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct drm_connector *connector = to_drm_connector(device);
|
||||
int written = 0;
|
||||
|
||||
mutex_lock(&connector->dev->mode_config.mutex);
|
||||
written = snprintf(buf, PAGE_SIZE, "%s\n", connector->display_info.panel_name);
|
||||
mutex_unlock(&connector->dev->mode_config.mutex);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
static ssize_t panelRegDA_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct drm_connector *connector = to_drm_connector(device);
|
||||
int written = 0;
|
||||
|
||||
mutex_lock(&connector->dev->mode_config.mutex);
|
||||
written = snprintf(buf, PAGE_SIZE, "0x%02x\n", connector->display_info.panel_regDA);
|
||||
mutex_unlock(&connector->dev->mode_config.mutex);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
static ssize_t panelSupplier_show(struct device *device,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct drm_connector *connector = to_drm_connector(device);
|
||||
int written = 0;
|
||||
|
||||
mutex_lock(&connector->dev->mode_config.mutex);
|
||||
written = snprintf(buf, PAGE_SIZE, "%s\n", connector->display_info.panel_supplier);
|
||||
mutex_unlock(&connector->dev->mode_config.mutex);
|
||||
|
||||
return written;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RW(status);
|
||||
static DEVICE_ATTR_RO(enabled);
|
||||
static DEVICE_ATTR_RO(dpms);
|
||||
static DEVICE_ATTR_RO(modes);
|
||||
static DEVICE_ATTR_RO(panelId);
|
||||
static DEVICE_ATTR_RO(panelVer);
|
||||
static DEVICE_ATTR_RO(panelName);
|
||||
static DEVICE_ATTR_RO(panelRegDA);
|
||||
static DEVICE_ATTR_RO(panelSupplier);
|
||||
|
||||
|
||||
static struct attribute *connector_dev_attrs[] = {
|
||||
&dev_attr_status.attr,
|
||||
&dev_attr_enabled.attr,
|
||||
&dev_attr_dpms.attr,
|
||||
&dev_attr_modes.attr,
|
||||
&dev_attr_panelId.attr,
|
||||
&dev_attr_panelVer.attr,
|
||||
&dev_attr_panelName.attr,
|
||||
&dev_attr_panelRegDA.attr,
|
||||
&dev_attr_panelSupplier.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
@ -1400,7 +1400,7 @@ static const struct adreno_a6xx_core adreno_gpu_core_a610 = {
|
|||
.base = {
|
||||
DEFINE_ADRENO_REV(ADRENO_REV_A610, 6, 1, 0, ANY_ID),
|
||||
.features = ADRENO_64BIT | ADRENO_CONTENT_PROTECTION |
|
||||
ADRENO_PREEMPTION | ADRENO_PROCESS_RECLAIM,
|
||||
ADRENO_PREEMPTION,
|
||||
.gpudev = &adreno_a6xx_gpudev,
|
||||
.gmem_size = (SZ_128K + SZ_4K),
|
||||
.busy_mask = 0xfffffffe,
|
||||
|
|
|
@ -143,7 +143,14 @@ config I2C_DEBUG_BUS
|
|||
debug messages to the system log. Select this if you are having
|
||||
a problem with I2C support and want to see more of what is going
|
||||
on.
|
||||
|
||||
config QCOM_I2C_NACK_ERR_WA_FAC
|
||||
bool "I2C Bus nack err for fac"
|
||||
default 'n'
|
||||
help
|
||||
Say Y here if you want the I2C bus drivers to produce a bunch of
|
||||
debug messages to the system log. Select this if you are having
|
||||
a problem with I2C support and want to see more of what is going
|
||||
on.
|
||||
endif # I2C
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -18,3 +18,8 @@ obj-$(CONFIG_I2C_STUB) += i2c-stub.o
|
|||
obj-$(CONFIG_I2C_SLAVE_EEPROM) += i2c-slave-eeprom.o
|
||||
|
||||
ccflags-$(CONFIG_I2C_DEBUG_CORE) := -DDEBUG
|
||||
|
||||
ifeq ($(CONFIG_QCOM_I2C_NACK_ERR_WA_FAC), y)
|
||||
subdir-ccflags-y += -DQCOM_I2C_NACK_ERR_WA
|
||||
endif
|
||||
|
||||
|
|
|
@ -77,6 +77,10 @@
|
|||
|
||||
#define MAX_SE 20
|
||||
|
||||
#ifdef QCOM_I2C_NACK_ERR_WA
|
||||
u8 i2c_wt6670_dl_mode = 0;
|
||||
#endif
|
||||
|
||||
enum i2c_se_mode {
|
||||
UNINITIALIZED,
|
||||
FIFO_SE_DMA,
|
||||
|
@ -245,7 +249,14 @@ static irqreturn_t geni_i2c_irq(int irq, void *dev)
|
|||
u32 dm_rx_st = readl_relaxed(gi2c->base + SE_DMA_RX_IRQ_STAT);
|
||||
u32 dma = readl_relaxed(gi2c->base + SE_GENI_DMA_MODE_EN);
|
||||
struct i2c_msg *cur = gi2c->cur;
|
||||
|
||||
#ifdef QCOM_I2C_NACK_ERR_WA
|
||||
//wt6670 download mode i2c addr
|
||||
if(cur[0].addr == 0x2B){
|
||||
i2c_wt6670_dl_mode = 1;
|
||||
} else if(cur[0].addr == 0x35){
|
||||
i2c_wt6670_dl_mode = 0;
|
||||
}
|
||||
#endif
|
||||
if (!cur) {
|
||||
geni_se_dump_dbg_regs(&gi2c->i2c_rsc, gi2c->base, gi2c->ipcl);
|
||||
GENI_SE_ERR(gi2c->ipcl, false, gi2c->dev, "Spurious irq\n");
|
||||
|
@ -256,9 +267,15 @@ static irqreturn_t geni_i2c_irq(int irq, void *dev)
|
|||
(dm_rx_st & (DM_I2C_CB_ERR)) ||
|
||||
(m_stat & M_CMD_CANCEL_EN) ||
|
||||
(m_stat & M_CMD_ABORT_EN)) {
|
||||
|
||||
#ifdef QCOM_I2C_NACK_ERR_WA
|
||||
if(i2c_wt6670_dl_mode == 0){
|
||||
if (m_stat & M_GP_IRQ_1_EN)
|
||||
geni_i2c_err(gi2c, I2C_NACK);
|
||||
}
|
||||
#else
|
||||
if (m_stat & M_GP_IRQ_1_EN)
|
||||
geni_i2c_err(gi2c, I2C_NACK);
|
||||
#endif
|
||||
if (m_stat & M_GP_IRQ_3_EN)
|
||||
geni_i2c_err(gi2c, I2C_BUS_PROTO);
|
||||
if (m_stat & M_GP_IRQ_4_EN)
|
||||
|
@ -733,7 +750,14 @@ static int geni_i2c_xfer(struct i2c_adapter *adap,
|
|||
int i, ret = 0, timeout = 0;
|
||||
|
||||
gi2c->err = 0;
|
||||
|
||||
#ifdef QCOM_I2C_NACK_ERR_WA
|
||||
//wt6670 download mode i2c addr
|
||||
if(msgs[0].addr == 0x2B){
|
||||
i2c_wt6670_dl_mode = 1;
|
||||
} else if( msgs[0].addr == 0x35){
|
||||
i2c_wt6670_dl_mode = 0;
|
||||
}
|
||||
#endif
|
||||
/* Client to respect system suspend */
|
||||
if (!pm_runtime_enabled(gi2c->dev)) {
|
||||
GENI_SE_ERR(gi2c->ipcl, false, gi2c->dev,
|
||||
|
@ -903,8 +927,16 @@ static int geni_i2c_xfer(struct i2c_adapter *adap,
|
|||
|
||||
ret = gi2c->err;
|
||||
if (gi2c->err) {
|
||||
GENI_SE_ERR(gi2c->ipcl, true, gi2c->dev,
|
||||
"i2c error :%d\n", gi2c->err);
|
||||
GENI_SE_ERR(gi2c->ipcl, true, gi2c->dev,"i2c error :%d\n", gi2c->err);
|
||||
#ifdef QCOM_I2C_NACK_ERR_WA
|
||||
if(i2c_wt6670_dl_mode == 1){
|
||||
if(gi2c->err == gi2c_log[I2C_NACK].err) {
|
||||
GENI_SE_ERR(gi2c->ipcl, true, gi2c->dev,"wt6670 nack continue! :%d\n", gi2c->err);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -931,6 +931,8 @@ static const struct adc_channels adc_chans_pmic5[ADC_MAX_CHANNEL] = {
|
|||
SCALE_HW_CALIB_THERM_100K_PULLUP)
|
||||
[ADC_GPIO4_PU2] = ADC_CHAN_TEMP("gpio4_pu2", 1,
|
||||
SCALE_HW_CALIB_THERM_100K_PULLUP)
|
||||
[ADC_GPIO3_DIV3] = ADC_CHAN_VOLT("gpio3_div3", 1,
|
||||
SCALE_HW_CALIB_DEFAULT)
|
||||
};
|
||||
|
||||
static const struct adc_channels adc7_chans_pmic[ADC_MAX_CHANNEL] = {
|
||||
|
|
|
@ -555,7 +555,85 @@ struct lut_table {
|
|||
u32 tablesize;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_BAT_NTC_10K
|
||||
static const struct vadc_map_pt adcmap_batt_therm_30k_NTC10K[] = {
|
||||
{1618, -400},
|
||||
{1593, -380},
|
||||
{1566, -360},
|
||||
{1538, -340},
|
||||
{1508, -320},
|
||||
{1477, -300},
|
||||
{1444, -280},
|
||||
{1410, -260},
|
||||
{1374, -240},
|
||||
{1338, -220},
|
||||
{1300, -200},
|
||||
{1261, -180},
|
||||
{1221, -160},
|
||||
{1181, -140},
|
||||
{1140, -120},
|
||||
{1099, -100},
|
||||
{1057, -80},
|
||||
{1016, -60},
|
||||
{974, -40},
|
||||
{934, -20},
|
||||
{893, 0},
|
||||
{853, 20},
|
||||
{814, 40},
|
||||
{776, 60},
|
||||
{738, 80},
|
||||
{702, 100},
|
||||
{667, 120},
|
||||
{633, 140},
|
||||
{600, 160},
|
||||
{569, 180},
|
||||
{539, 200},
|
||||
{510, 220},
|
||||
{482, 240},
|
||||
{456, 260},
|
||||
{431, 280},
|
||||
{407, 300},
|
||||
{384, 320},
|
||||
{363, 340},
|
||||
{342, 360},
|
||||
{323, 380},
|
||||
{305, 400},
|
||||
{288, 420},
|
||||
{272, 440},
|
||||
{256, 460},
|
||||
{242, 480},
|
||||
{228, 500},
|
||||
{215, 520},
|
||||
{203, 540},
|
||||
{192, 560},
|
||||
{181, 580},
|
||||
{171, 600},
|
||||
{162, 620},
|
||||
{153, 640},
|
||||
{145, 660},
|
||||
{137, 680},
|
||||
{130, 700},
|
||||
{123, 720},
|
||||
{116, 740},
|
||||
{110, 760},
|
||||
{104, 780},
|
||||
{99, 800},
|
||||
{94, 820},
|
||||
{89, 840},
|
||||
{84, 860},
|
||||
{80, 880},
|
||||
{76, 900},
|
||||
{72, 920},
|
||||
{69, 940},
|
||||
{65, 960},
|
||||
{62, 980}
|
||||
};
|
||||
#endif
|
||||
|
||||
static const struct lut_table lut_table_30[] = {
|
||||
#ifdef CONFIG_BAT_NTC_10K
|
||||
{adcmap_batt_therm_30k_NTC10K, ARRAY_SIZE(adcmap_batt_therm_30k_NTC10K)},
|
||||
#endif
|
||||
{adcmap_batt_therm_30k, ARRAY_SIZE(adcmap_batt_therm_30k)},
|
||||
{adcmap_batt_therm_30k_6125, ARRAY_SIZE(adcmap_batt_therm_30k_6125)},
|
||||
};
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/regulator/driver.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/of_regulator.h>
|
||||
#include <linux/time.h>
|
||||
|
||||
#define PMIC_VER_8941 0x01
|
||||
#define PMIC_VERSION_REG 0x0105
|
||||
|
@ -86,6 +87,8 @@
|
|||
#define QPNP_PON_S3_DBC_CTL(pon) ((pon)->base + 0x75)
|
||||
#define QPNP_PON_SMPL_CTL(pon) ((pon)->base + 0x7F)
|
||||
#define QPNP_PON_TRIGGER_EN(pon) ((pon)->base + 0x80)
|
||||
#define QPNP_PON_PERPH_RB_SPARE(pon) ((pon)->base + 0x8C)
|
||||
#define QPNP_PON_DVDD_RB_SPARE(pon) ((pon)->base + 0x8D)
|
||||
#define QPNP_PON_XVDD_RB_SPARE(pon) ((pon)->base + 0x8E)
|
||||
#define QPNP_PON_SOFT_RB_SPARE(pon) ((pon)->base + 0x8F)
|
||||
#define QPNP_PON_SEC_ACCESS(pon) ((pon)->base + 0xD0)
|
||||
|
@ -383,6 +386,50 @@ int qpnp_pon_set_restart_reason(enum pon_restart_reason reason)
|
|||
}
|
||||
EXPORT_SYMBOL(qpnp_pon_set_restart_reason);
|
||||
|
||||
/**
|
||||
* qpnp_pon_store_extra_reset_info - Store extra reset info in PMIC register.
|
||||
*
|
||||
* Returns = 0 if PMIC feature is not available or store restart reason
|
||||
* successfully.
|
||||
* Returns > 0 for errors
|
||||
*
|
||||
* This function is used to store extra reset info in PMIC spare register
|
||||
* which can be preserved during reset.
|
||||
*/
|
||||
int qpnp_pon_store_extra_reset_info(u16 mask, u16 val)
|
||||
{
|
||||
int rc = 0;
|
||||
struct qpnp_pon *pon = sys_reset_dev;
|
||||
|
||||
if (!pon)
|
||||
return 0;
|
||||
|
||||
if (mask & 0xFF) {
|
||||
rc = qpnp_pon_masked_write(pon, QPNP_PON_DVDD_RB_SPARE(pon),
|
||||
(mask & 0xFF), (val & 0xFF));
|
||||
if (rc) {
|
||||
dev_err(pon->dev,
|
||||
"Failed to store extra reset info to 0x%x\n",
|
||||
QPNP_PON_DVDD_RB_SPARE(pon));
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
if (mask & 0xFF00) {
|
||||
rc = qpnp_pon_masked_write(pon, QPNP_PON_XVDD_RB_SPARE(pon),
|
||||
((mask >> 8) & 0xFF), ((val >> 8) & 0xFF));
|
||||
if (rc) {
|
||||
dev_err(pon->dev,
|
||||
"Failed to store extra reset info to 0x%x\n",
|
||||
QPNP_PON_XVDD_RB_SPARE(pon));
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(qpnp_pon_store_extra_reset_info);
|
||||
|
||||
/*
|
||||
* qpnp_pon_check_hard_reset_stored() - Checks if the PMIC need to
|
||||
* store hard reset reason.
|
||||
|
@ -917,6 +964,9 @@ static int qpnp_pon_input_dispatch(struct qpnp_pon *pon, u32 pon_type)
|
|||
uint pon_rt_sts;
|
||||
u64 elapsed_us;
|
||||
int rc;
|
||||
struct timeval timestamp;
|
||||
struct tm tm;
|
||||
char buff[255];
|
||||
|
||||
cfg = qpnp_get_cfg(pon, pon_type);
|
||||
if (!cfg)
|
||||
|
@ -943,6 +993,17 @@ static int qpnp_pon_input_dispatch(struct qpnp_pon *pon, u32 pon_type)
|
|||
switch (cfg->pon_type) {
|
||||
case PON_KPDPWR:
|
||||
pon_rt_bit = QPNP_PON_KPDPWR_N_SET;
|
||||
|
||||
/* get the time stamp in readable format to print*/
|
||||
do_gettimeofday(×tamp);
|
||||
time_to_tm((time_t)(timestamp.tv_sec), 0, &tm);
|
||||
snprintf(buff, sizeof(buff),
|
||||
"%u-%02d-%02d %02d:%02d:%02d UTC",
|
||||
(int) tm.tm_year + 1900, tm.tm_mon + 1,
|
||||
tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
|
||||
pr_warn("Report pwrkey %s event at: %s\n", pon_rt_bit &
|
||||
pon_rt_sts ? "press" : "release", buff);
|
||||
break;
|
||||
case PON_RESIN:
|
||||
pon_rt_bit = QPNP_PON_RESIN_N_SET;
|
||||
|
|
|
@ -1354,6 +1354,19 @@ source "drivers/input/touchscreen/synaptics_tcm/Kconfig"
|
|||
|
||||
source "drivers/input/touchscreen/focaltech_touch/Kconfig"
|
||||
|
||||
source "drivers/input/touchscreen/ft3519/Kconfig"
|
||||
|
||||
source "drivers/input/touchscreen/nt36xxx/Kconfig"
|
||||
|
||||
config TOUCHSCREEN_HIMAX_CHIPSET
|
||||
bool "Himax touchpanel CHIPSET"
|
||||
depends on I2C
|
||||
help
|
||||
Say Y here if you have a Himax CHIPSET touchscreen.
|
||||
HIMAX controllers are multi touch controllers which can
|
||||
report 10 touches at a time.
|
||||
|
||||
If unsure, say N.
|
||||
source "drivers/input/touchscreen/hxchipset/Kconfig"
|
||||
|
||||
endif
|
||||
|
|
|
@ -113,4 +113,6 @@ obj-$(CONFIG_TOUCHSCREEN_ST) += st/
|
|||
obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX) += synaptics_dsx/
|
||||
obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_TCM) += synaptics_tcm/
|
||||
obj-$(CONFIG_TOUCHSCREEN_FTS) += focaltech_touch/
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += ft3519/
|
||||
obj-$(CONFIG_TOUCHSCREEN_NT36XXX) += nt36xxx/
|
||||
obj-$(CONFIG_TOUCHSCREEN_HIMAX_CHIPSET) += hxchipset/
|
||||
|
|
16
drivers/input/touchscreen/ft3519/Kconfig
Normal file
16
drivers/input/touchscreen/ft3519/Kconfig
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Focaltech Touchscreen driver configuration
|
||||
#
|
||||
|
||||
config TOUCHSCREEN_FT3519
|
||||
bool "Focaltech Touchscreen"
|
||||
default n
|
||||
help
|
||||
Say Y here if you have Focaltech touch panel.
|
||||
If unsure, say N.
|
||||
|
||||
config TOUCHSCREEN_FT3519_DIRECTORY
|
||||
string "Focaltech ts directory name"
|
||||
default "ft3519"
|
||||
depends on TOUCHSCREEN_FT3519
|
||||
|
17
drivers/input/touchscreen/ft3519/Makefile
Normal file
17
drivers/input/touchscreen/ft3519/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Makefile for the focaltech touchscreen drivers.
|
||||
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_core.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_ex_fun.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_ex_mode.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_gesture.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_esdcheck.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_point_report_check.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_test/
|
||||
|
||||
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_flash.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_flash/
|
||||
|
||||
|
||||
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_i2c.o
|
177
drivers/input/touchscreen/ft3519/focaltech_common.h
Normal file
177
drivers/input/touchscreen/ft3519/focaltech_common.h
Normal file
|
@ -0,0 +1,177 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech fts TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, Focaltech Ltd. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_common.h
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-16
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
* Reference:
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __LINUX_FOCALTECH_COMMON_H__
|
||||
#define __LINUX_FOCALTECH_COMMON_H__
|
||||
|
||||
#include "focaltech_config.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define FTS_DRIVER_VERSION "Focaltech V3.3.5 20210514"
|
||||
|
||||
#define BYTE_OFF_0(x) (u8)((x) & 0xFF)
|
||||
#define BYTE_OFF_8(x) (u8)(((x) >> 8) & 0xFF)
|
||||
#define BYTE_OFF_16(x) (u8)(((x) >> 16) & 0xFF)
|
||||
#define BYTE_OFF_24(x) (u8)(((x) >> 24) & 0xFF)
|
||||
#define FLAGBIT(x) (0x00000001 << (x))
|
||||
#define FLAGBITS(x, y) ((0xFFFFFFFF >> (32 - (y) - 1)) & (0xFFFFFFFF << (x)))
|
||||
|
||||
#define FLAG_ICSERIALS_LEN 8
|
||||
#define FLAG_HID_BIT 10
|
||||
#define FLAG_IDC_BIT 11
|
||||
|
||||
#define IC_SERIALS (FTS_CHIP_TYPE & FLAGBITS(0, FLAG_ICSERIALS_LEN-1))
|
||||
#define IC_TO_SERIALS(x) ((x) & FLAGBITS(0, FLAG_ICSERIALS_LEN-1))
|
||||
#define FTS_CHIP_IDC ((FTS_CHIP_TYPE & FLAGBIT(FLAG_IDC_BIT)) == FLAGBIT(FLAG_IDC_BIT))
|
||||
#define FTS_HID_SUPPORTTED ((FTS_CHIP_TYPE & FLAGBIT(FLAG_HID_BIT)) == FLAGBIT(FLAG_HID_BIT))
|
||||
|
||||
#define FTS_MAX_CHIP_IDS 8
|
||||
|
||||
#define FTS_CHIP_TYPE_MAPPING {{0x89, 0x54, 0x52, 0x54, 0x52, 0x54, 0x5B, 0x54, 0x5E}}
|
||||
|
||||
|
||||
|
||||
#define FILE_NAME_LENGTH 128
|
||||
#define ENABLE 1
|
||||
#define DISABLE 0
|
||||
#define VALID 1
|
||||
#define INVALID 0
|
||||
#define FTS_CMD_START1 0x55
|
||||
#define FTS_CMD_START2 0xAA
|
||||
#define FTS_CMD_START_DELAY 12
|
||||
#define FTS_CMD_READ_ID 0x90
|
||||
#define FTS_CMD_READ_ID_LEN 4
|
||||
#define FTS_CMD_READ_ID_LEN_INCELL 1
|
||||
#define FTS_CMD_READ_FW_CONF 0xA8
|
||||
/*register address*/
|
||||
#define FTS_REG_INT_CNT 0x8F
|
||||
#define FTS_REG_FLOW_WORK_CNT 0x91
|
||||
#define FTS_REG_WORKMODE 0x00
|
||||
#define FTS_REG_WORKMODE_FACTORY_VALUE 0x40
|
||||
#define FTS_REG_WORKMODE_WORK_VALUE 0x00
|
||||
#define FTS_REG_ESDCHECK_DISABLE 0x8D
|
||||
#define FTS_REG_CHIP_ID 0xA3
|
||||
#define FTS_REG_CHIP_ID2 0x9F
|
||||
#define FTS_REG_POWER_MODE 0xA5
|
||||
#define FTS_REG_POWER_MODE_SLEEP 0x03
|
||||
#define FTS_REG_FW_VER 0xA6
|
||||
#define FTS_REG_VENDOR_ID 0xA8
|
||||
#define FTS_REG_LCD_BUSY_NUM 0xAB
|
||||
#define FTS_REG_FACE_DEC_MODE_EN 0xB0
|
||||
#define FTS_REG_FACTORY_MODE_DETACH_FLAG 0xB4
|
||||
#define FTS_REG_FACE_DEC_MODE_STATUS 0x01
|
||||
#define FTS_REG_IDE_PARA_VER_ID 0xB5
|
||||
#define FTS_REG_IDE_PARA_STATUS 0xB6
|
||||
#define FTS_REG_GLOVE_MODE_EN 0xC0
|
||||
#define FTS_REG_COVER_MODE_EN 0xC1
|
||||
#define FTS_REG_CHARGER_MODE_EN 0x8B
|
||||
#define FTS_REG_GESTURE_EN 0xD0
|
||||
#define FTS_REG_GESTURE_OUTPUT_ADDRESS 0xD3
|
||||
#define FTS_REG_MODULE_ID 0xE3
|
||||
#define FTS_REG_LIC_VER 0xE4
|
||||
#define FTS_REG_ESD_SATURATE 0xED
|
||||
|
||||
#define FTS_SYSFS_ECHO_ON(buf) (buf[0] == '1')
|
||||
#define FTS_SYSFS_ECHO_OFF(buf) (buf[0] == '0')
|
||||
|
||||
#define kfree_safe(pbuf) do {\
|
||||
if (pbuf) {\
|
||||
kfree(pbuf);\
|
||||
pbuf = NULL;\
|
||||
}\
|
||||
} while(0)
|
||||
|
||||
/*****************************************************************************
|
||||
* Alternative mode (When something goes wrong, the modules may be able to solve the problem.)
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* point report check
|
||||
* default: disable
|
||||
*/
|
||||
#define FTS_POINT_REPORT_CHECK_EN 0
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
struct ft_chip_t {
|
||||
u16 type;
|
||||
u8 chip_idh;
|
||||
u8 chip_idl;
|
||||
u8 rom_idh;
|
||||
u8 rom_idl;
|
||||
u8 pb_idh;
|
||||
u8 pb_idl;
|
||||
u8 bl_idh;
|
||||
u8 bl_idl;
|
||||
};
|
||||
|
||||
struct ft_chip_id_t {
|
||||
u16 type;
|
||||
u16 chip_ids[FTS_MAX_CHIP_IDS];
|
||||
};
|
||||
|
||||
struct ts_ic_info {
|
||||
bool is_incell;
|
||||
bool hid_supported;
|
||||
struct ft_chip_t ids;
|
||||
struct ft_chip_id_t cid;
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* DEBUG function define here
|
||||
*****************************************************************************/
|
||||
#if FTS_DEBUG_EN
|
||||
#define FTS_DEBUG(fmt, args...) do { \
|
||||
printk("[FTS_TS]%s:"fmt"\n", __func__, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_FUNC_ENTER() do { \
|
||||
printk("[FTS_TS]%s: Enter\n", __func__); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_FUNC_EXIT() do { \
|
||||
printk("[FTS_TS]%s: Exit(%d)\n", __func__, __LINE__); \
|
||||
} while (0)
|
||||
#else /* #if FTS_DEBUG_EN*/
|
||||
#define FTS_DEBUG(fmt, args...)
|
||||
#define FTS_FUNC_ENTER()
|
||||
#define FTS_FUNC_EXIT()
|
||||
#endif
|
||||
|
||||
#define FTS_INFO(fmt, args...) do { \
|
||||
printk(KERN_INFO "[FTS_TS/I]%s:"fmt"\n", __func__, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_ERROR(fmt, args...) do { \
|
||||
printk(KERN_ERR "[FTS_TS/E]%s:"fmt"\n", __func__, ##args); \
|
||||
} while (0)
|
||||
#endif /* __LINUX_FOCALTECH_COMMON_H__ */
|
299
drivers/input/touchscreen/ft3519/focaltech_config.h
Normal file
299
drivers/input/touchscreen/ft3519/focaltech_config.h
Normal file
|
@ -0,0 +1,299 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, FocalTech Systems, Ltd., all rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
/************************************************************************
|
||||
*
|
||||
* File Name: focaltech_config.h
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-08
|
||||
*
|
||||
* Abstract: global configurations
|
||||
*
|
||||
* Version: v1.0
|
||||
*
|
||||
************************************************************************/
|
||||
#ifndef _LINUX_FOCLATECH_CONFIG_H_
|
||||
#define _LINUX_FOCLATECH_CONFIG_H_
|
||||
|
||||
/**************************************************/
|
||||
/****** G: A, I: B, S: C, U: D ******************/
|
||||
/****** chip type defines, do not modify *********/
|
||||
#define _FT8716 0x87160805
|
||||
#define _FT8736 0x87360806
|
||||
#define _FT8607 0x86070809
|
||||
#define _FT8006U 0x8006D80B
|
||||
#define _FT8006S 0x8006A80B
|
||||
#define _FT8613 0x8613080C
|
||||
#define _FT8719 0x8719080D
|
||||
#define _FT8739 0x8739080E
|
||||
#define _FT8615 0x8615080F
|
||||
#define _FT8201 0x82010810
|
||||
#define _FT8201AA 0x8201A810
|
||||
#define _FT8006P 0x86220811
|
||||
#define _FT7251 0x72510812
|
||||
#define _FT7252 0x72520813
|
||||
#define _FT8613S 0x8613C814
|
||||
#define _FT8756 0x87560815
|
||||
#define _FT8302 0x83020816
|
||||
#define _FT8009 0x80090817
|
||||
#define _FT8656 0x86560818
|
||||
#define _FT8006S_AA 0x86320819
|
||||
#define _FT7250 0x7250081A
|
||||
#define _FT7120 0x7120081B
|
||||
#define _FT8720 0x8720081C
|
||||
#define _FT8726 0x8726081C
|
||||
#define _FT8720H 0x8720E81C
|
||||
#define _FT8720M 0x8720F81C
|
||||
#define _FT8016 0x8016081D
|
||||
#define _FT2388 0x2388081E
|
||||
#define _FT8006S_AB 0x8642081F
|
||||
#define _FT8722 0x87220820
|
||||
#define _FT8201AB 0x8201B821
|
||||
#define _FT8203 0x82030821
|
||||
|
||||
|
||||
#define _FT5416 0x54160402
|
||||
#define _FT5426 0x54260402
|
||||
#define _FT5435 0x54350402
|
||||
#define _FT5436 0x54360402
|
||||
#define _FT5526 0x55260402
|
||||
#define _FT5526I 0x5526B402
|
||||
#define _FT5446 0x54460402
|
||||
#define _FT5346 0x53460402
|
||||
#define _FT5446I 0x5446B402
|
||||
#define _FT5346I 0x5346B402
|
||||
#define _FT7661 0x76610402
|
||||
#define _FT7511 0x75110402
|
||||
#define _FT7421 0x74210402
|
||||
#define _FT7681 0x76810402
|
||||
#define _FT3C47U 0x3C47D402
|
||||
#define _FT3417 0x34170402
|
||||
#define _FT3517 0x35170402
|
||||
#define _FT3327 0x33270402
|
||||
#define _FT3427 0x34270402
|
||||
#define _FT7311 0x73110402
|
||||
#define _FT5526_V00 0x5526C402
|
||||
|
||||
#define _FT5626 0x56260401
|
||||
#define _FT5726 0x57260401
|
||||
#define _FT5826B 0x5826B401
|
||||
#define _FT5826S 0x5826C401
|
||||
#define _FT7811 0x78110401
|
||||
#define _FT3D47 0x3D470401
|
||||
#define _FT3617 0x36170401
|
||||
#define _FT3717 0x37170401
|
||||
#define _FT3817B 0x3817B401
|
||||
#define _FT3517U 0x3517D401
|
||||
|
||||
#define _FT6236U 0x6236D003
|
||||
#define _FT6336G 0x6336A003
|
||||
#define _FT6336U 0x6336D003
|
||||
#define _FT6436U 0x6436D003
|
||||
#define _FT6436T 0x6436E003
|
||||
|
||||
#define _FT3267 0x32670004
|
||||
#define _FT3367 0x33670004
|
||||
|
||||
#define _FT3327G_003 0x3327A482
|
||||
#define _FT3427_003 0x3427D482
|
||||
#define _FT3427G_003 0x3427A482
|
||||
#define _FT5446_003 0x5446D482
|
||||
#define _FT5446_Q03 0x5446C482
|
||||
#define _FT5446_P03 0x5446A481
|
||||
#define _FT5446_N03 0x5446A489
|
||||
#define _FT5426_003 0x5426D482
|
||||
#define _FT5526_003 0x5526D482
|
||||
|
||||
#define _FT3518 0x35180481
|
||||
#define _FT3518U 0x3518D481
|
||||
#define _FT3558 0x35580481
|
||||
#define _FT3528 0x35280481
|
||||
#define _FT5536 0x55360481
|
||||
#define _FT5536L 0x5536E481
|
||||
#define _FT3418 0x34180481
|
||||
|
||||
#define _FT3519 0x35190489
|
||||
|
||||
#define _FT5446U 0x5446D083
|
||||
#define _FT5456U 0x5456D083
|
||||
#define _FT3417U 0x3417D083
|
||||
#define _FT5426U 0x5426D083
|
||||
#define _FT3428 0x34280083
|
||||
#define _FT3437U 0x3437D083
|
||||
|
||||
#define _FT7302 0x73020084
|
||||
#define _FT7202 0x72020084
|
||||
#define _FT3308 0x33080084
|
||||
#define _FT6446 0x64460084
|
||||
|
||||
#define _FT6346U 0x6346D085
|
||||
#define _FT6346G 0x6346A085
|
||||
#define _FT3067 0x30670085
|
||||
#define _FT3068 0x30680085
|
||||
#define _FT3168 0x31680085
|
||||
#define _FT3268 0x32680085
|
||||
#define _FT6146 0x61460085
|
||||
|
||||
#define _FT5726_003 0x5726D486
|
||||
#define _FT5726_V03 0x5726C486
|
||||
|
||||
#define _FT3618 0x36180487
|
||||
#define _FT5646 0x56460487
|
||||
#define _FT3A58 0x3A580487
|
||||
#define _FT3B58 0x3B580487
|
||||
#define _FT3D58 0x3D580487
|
||||
#define _FT5936 0x59360487
|
||||
#define _FT5A36 0x5A360487
|
||||
#define _FT5B36 0x5B360487
|
||||
#define _FT5D36 0x5D360487
|
||||
#define _FT5946 0x59460487
|
||||
#define _FT5A46 0x5A460487
|
||||
#define _FT5B46 0x5B460487
|
||||
#define _FT5D46 0x5D460487
|
||||
|
||||
#define _FT3658U 0x3658D488
|
||||
#define _FT3658G 0x3658A488
|
||||
|
||||
/*************************************************/
|
||||
|
||||
/*
|
||||
* choose your ic chip type of focaltech
|
||||
*/
|
||||
#define FTS_CHIP_TYPE _FT3519
|
||||
|
||||
/******************* Enables *********************/
|
||||
/*********** 1 to enable, 0 to disable ***********/
|
||||
|
||||
/*
|
||||
* show debug log info
|
||||
* enable it for debug, disable it for release
|
||||
*/
|
||||
#define FTS_DEBUG_EN 1
|
||||
|
||||
/*
|
||||
* Linux MultiTouch Protocol
|
||||
* 1: Protocol B(default), 0: Protocol A
|
||||
*/
|
||||
#define FTS_MT_PROTOCOL_B_EN 1
|
||||
|
||||
/*
|
||||
* Report Pressure in multitouch
|
||||
* 1:enable(default),0:disable
|
||||
*/
|
||||
#define FTS_REPORT_PRESSURE_EN 1
|
||||
|
||||
/*
|
||||
* Stylus PEN enable
|
||||
* 1:enable(default),0:disable
|
||||
*/
|
||||
#define FTS_PEN_EN 0
|
||||
|
||||
/*
|
||||
* Gesture function enable
|
||||
* default: disable
|
||||
*/
|
||||
#define FTS_GESTURE_EN 0
|
||||
|
||||
/*
|
||||
* ESD check & protection
|
||||
* default: disable
|
||||
*/
|
||||
#define FTS_ESDCHECK_EN 0
|
||||
|
||||
/*
|
||||
* Production test enable
|
||||
* 1: enable, 0:disable(default)
|
||||
*/
|
||||
#define FTS_TEST_EN 1
|
||||
|
||||
/*
|
||||
* Pinctrl enable
|
||||
* default: disable
|
||||
*/
|
||||
#define FTS_PINCTRL_EN 0
|
||||
|
||||
/*
|
||||
* Customer power enable
|
||||
* enable it when customer need control TP power
|
||||
* default: disable
|
||||
*/
|
||||
#define FTS_POWER_SOURCE_CUST_EN 1
|
||||
|
||||
/****************************************************/
|
||||
|
||||
/********************** Upgrade ****************************/
|
||||
/*
|
||||
* auto upgrade
|
||||
*/
|
||||
#define FTS_AUTO_UPGRADE_EN 0
|
||||
|
||||
/*
|
||||
* auto upgrade for lcd cfg
|
||||
*/
|
||||
#define FTS_AUTO_LIC_UPGRADE_EN 0
|
||||
|
||||
/*
|
||||
* Numbers of modules support
|
||||
*/
|
||||
#define FTS_GET_MODULE_NUM 0
|
||||
|
||||
/*
|
||||
* module_id: mean vendor_id generally, also maybe gpio or lcm_id...
|
||||
* If means vendor_id, the FTS_MODULE_ID = PANEL_ID << 8 + VENDOR_ID
|
||||
* FTS_GET_MODULE_NUM == 0/1, no check module id, you may ignore them
|
||||
* FTS_GET_MODULE_NUM >= 2, compatible with FTS_MODULE2_ID
|
||||
* FTS_GET_MODULE_NUM >= 3, compatible with FTS_MODULE3_ID
|
||||
*/
|
||||
#define FTS_MODULE_ID 0x0000
|
||||
#define FTS_MODULE2_ID 0x0000
|
||||
#define FTS_MODULE3_ID 0x0000
|
||||
|
||||
/*
|
||||
* Need set the following when get firmware via firmware_request()
|
||||
* For example: if module'vendor is tianma,
|
||||
* #define FTS_MODULE_NAME "tianma"
|
||||
* then file_name will be "focaltech_ts_fw_tianma"
|
||||
* You should rename fw to "focaltech_ts_fw_tianma", and push it into
|
||||
* etc/firmware or by customers
|
||||
*/
|
||||
#define FTS_MODULE_NAME ""
|
||||
#define FTS_MODULE2_NAME ""
|
||||
#define FTS_MODULE3_NAME ""
|
||||
|
||||
/*
|
||||
* FW.i file for auto upgrade, you must replace it with your own
|
||||
* define your own fw_file, the sample one to be replaced is invalid
|
||||
* NOTE: if FTS_GET_MODULE_NUM > 1, it's the fw corresponding with FTS_VENDOR_ID
|
||||
*/
|
||||
#define FTS_UPGRADE_FW_FILE "include/firmware/fw_sample.i"
|
||||
|
||||
/*
|
||||
* if FTS_GET_MODULE_NUM >= 2, fw corrsponding with FTS_VENDOR_ID2
|
||||
* define your own fw_file, the sample one is invalid
|
||||
*/
|
||||
#define FTS_UPGRADE_FW2_FILE "include/firmware/fw_sample.i"
|
||||
|
||||
/*
|
||||
* if FTS_GET_MODULE_NUM >= 3, fw corrsponding with FTS_VENDOR_ID3
|
||||
* define your own fw_file, the sample one is invalid
|
||||
*/
|
||||
#define FTS_UPGRADE_FW3_FILE "include/firmware/fw_sample.i"
|
||||
|
||||
/*********************************************************/
|
||||
|
||||
#endif /* _LINUX_FOCLATECH_CONFIG_H_ */
|
2156
drivers/input/touchscreen/ft3519/focaltech_core.c
Normal file
2156
drivers/input/touchscreen/ft3519/focaltech_core.c
Normal file
File diff suppressed because it is too large
Load diff
308
drivers/input/touchscreen/ft3519/focaltech_core.h
Normal file
308
drivers/input/touchscreen/ft3519/focaltech_core.h
Normal file
|
@ -0,0 +1,308 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, Focaltech Ltd. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_core.h
|
||||
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-08
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
* Reference:
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef __LINUX_FOCALTECH_CORE_H__
|
||||
#define __LINUX_FOCALTECH_CORE_H__
|
||||
/*****************************************************************************
|
||||
* Included header files
|
||||
*****************************************************************************/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/input/mt.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/jiffies.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include <linux/version.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include "focaltech_common.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define FTS_MAX_POINTS_SUPPORT 10 /* constant value, can't be changed */
|
||||
#define FTS_MAX_KEYS 4
|
||||
#define FTS_KEY_DIM 10
|
||||
#define FTS_ONE_TCH_LEN 6
|
||||
#define FTS_TOUCH_DATA_LEN (FTS_MAX_POINTS_SUPPORT * FTS_ONE_TCH_LEN + 3)
|
||||
|
||||
#define FTS_GESTURE_POINTS_MAX 6
|
||||
#define FTS_GESTURE_DATA_LEN (FTS_GESTURE_POINTS_MAX * 4 + 4)
|
||||
|
||||
#define FTS_MAX_ID 0x0A
|
||||
#define FTS_TOUCH_X_H_POS 3
|
||||
#define FTS_TOUCH_X_L_POS 4
|
||||
#define FTS_TOUCH_Y_H_POS 5
|
||||
#define FTS_TOUCH_Y_L_POS 6
|
||||
#define FTS_TOUCH_PRE_POS 7
|
||||
#define FTS_TOUCH_AREA_POS 8
|
||||
#define FTS_TOUCH_POINT_NUM 2
|
||||
#define FTS_TOUCH_EVENT_POS 3
|
||||
#define FTS_TOUCH_ID_POS 5
|
||||
#define FTS_COORDS_ARR_SIZE 4
|
||||
#define FTS_X_MIN_DISPLAY_DEFAULT 0
|
||||
#define FTS_Y_MIN_DISPLAY_DEFAULT 0
|
||||
#define FTS_X_MAX_DISPLAY_DEFAULT 720
|
||||
#define FTS_Y_MAX_DISPLAY_DEFAULT 1280
|
||||
|
||||
#define FTS_TOUCH_DOWN 0
|
||||
#define FTS_TOUCH_UP 1
|
||||
#define FTS_TOUCH_CONTACT 2
|
||||
#define EVENT_DOWN(flag) ((FTS_TOUCH_DOWN == flag) || (FTS_TOUCH_CONTACT == flag))
|
||||
#define EVENT_UP(flag) (FTS_TOUCH_UP == flag)
|
||||
#define EVENT_NO_DOWN(data) (!data->point_num)
|
||||
|
||||
#define FTS_MAX_COMPATIBLE_TYPE 4
|
||||
#define FTS_MAX_COMMMAND_LENGTH 16
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Alternative mode (When something goes wrong, the modules may be able to solve the problem.)
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* For commnication error in PM(deep sleep) state
|
||||
*/
|
||||
#define FTS_PATCH_COMERR_PM 0
|
||||
#define FTS_TIMEOUT_COMERR_PM 700
|
||||
|
||||
#define FTS_HIGH_REPORT 0
|
||||
#define FTS_SIZE_DEFAULT 15
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Private enumerations, structures and unions using typedef
|
||||
*****************************************************************************/
|
||||
struct ftxxxx_proc {
|
||||
struct proc_dir_entry *proc_entry;
|
||||
u8 opmode;
|
||||
u8 cmd_len;
|
||||
u8 cmd[FTS_MAX_COMMMAND_LENGTH];
|
||||
};
|
||||
|
||||
struct fts_ts_platform_data {
|
||||
u32 irq_gpio;
|
||||
u32 irq_gpio_flags;
|
||||
u32 reset_gpio;
|
||||
u32 reset_gpio_flags;
|
||||
bool have_key;
|
||||
u32 key_number;
|
||||
u32 keys[FTS_MAX_KEYS];
|
||||
u32 key_y_coords[FTS_MAX_KEYS];
|
||||
u32 key_x_coords[FTS_MAX_KEYS];
|
||||
u32 x_max;
|
||||
u32 y_max;
|
||||
u32 x_min;
|
||||
u32 y_min;
|
||||
u32 max_touch_number;
|
||||
};
|
||||
|
||||
struct ts_event {
|
||||
int x; /*x coordinate */
|
||||
int y; /*y coordinate */
|
||||
int p; /* pressure */
|
||||
int flag; /* touch event flag: 0 -- down; 1-- up; 2 -- contact */
|
||||
int id; /*touch ID */
|
||||
int area;
|
||||
};
|
||||
|
||||
struct pen_event {
|
||||
int inrange;
|
||||
int tip;
|
||||
int x; /*x coordinate */
|
||||
int y; /*y coordinate */
|
||||
int p; /* pressure */
|
||||
int flag; /* touch event flag: 0 -- down; 1-- up; 2 -- contact */
|
||||
int id; /*touch ID */
|
||||
int tilt_x;
|
||||
int tilt_y;
|
||||
int tool_type;
|
||||
};
|
||||
|
||||
struct fts_ts_data {
|
||||
struct i2c_client *client;
|
||||
struct spi_device *spi;
|
||||
struct device *dev;
|
||||
struct input_dev *input_dev;
|
||||
struct input_dev *pen_dev;
|
||||
struct fts_ts_platform_data *pdata;
|
||||
struct ts_ic_info ic_info;
|
||||
struct workqueue_struct *ts_workqueue;
|
||||
struct work_struct fwupg_work;
|
||||
struct delayed_work esdcheck_work;
|
||||
struct delayed_work prc_work;
|
||||
struct work_struct resume_work;
|
||||
struct ftxxxx_proc proc;
|
||||
spinlock_t irq_lock;
|
||||
struct mutex report_mutex;
|
||||
struct mutex bus_lock;
|
||||
unsigned long intr_jiffies;
|
||||
int irq;
|
||||
int log_level;
|
||||
int fw_is_running; /* confirm fw is running when using spi:default 0 */
|
||||
int dummy_byte;
|
||||
#if defined(CONFIG_PM) && FTS_PATCH_COMERR_PM
|
||||
struct completion pm_completion;
|
||||
bool pm_suspend;
|
||||
#endif
|
||||
bool suspended;
|
||||
bool fw_loading;
|
||||
bool irq_disabled;
|
||||
bool power_disabled;
|
||||
bool glove_mode;
|
||||
bool cover_mode;
|
||||
bool charger_mode;
|
||||
bool gesture_mode; /* gesture enable or disable, default: disable */
|
||||
bool prc_mode;
|
||||
struct pen_event pevent;
|
||||
/* multi-touch */
|
||||
struct ts_event *events;
|
||||
u8 *bus_tx_buf;
|
||||
u8 *bus_rx_buf;
|
||||
int bus_type;
|
||||
u8 *point_buf;
|
||||
int pnt_buf_size;
|
||||
int touchs;
|
||||
int key_state;
|
||||
int touch_point;
|
||||
int point_num;
|
||||
struct regulator *vdd;
|
||||
struct regulator *vcc_i2c;
|
||||
#if FTS_PINCTRL_EN
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pins_active;
|
||||
struct pinctrl_state *pins_suspend;
|
||||
struct pinctrl_state *pins_release;
|
||||
#endif
|
||||
#if defined(CONFIG_FB) || defined(CONFIG_DRM)
|
||||
struct notifier_block fb_notif;
|
||||
#elif defined(CONFIG_HAS_EARLYSUSPEND)
|
||||
struct early_suspend early_suspend;
|
||||
#endif
|
||||
};
|
||||
|
||||
enum _FTS_BUS_TYPE {
|
||||
BUS_TYPE_NONE,
|
||||
BUS_TYPE_I2C,
|
||||
BUS_TYPE_SPI,
|
||||
BUS_TYPE_SPI_V2,
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
extern struct fts_ts_data *fts_data;
|
||||
|
||||
/* communication interface */
|
||||
int fts_read(u8 *cmd, u32 cmdlen, u8 *data, u32 datalen);
|
||||
int fts_read_reg(u8 addr, u8 *value);
|
||||
int fts_write(u8 *writebuf, u32 writelen);
|
||||
int fts_write_reg(u8 addr, u8 value);
|
||||
void fts_hid2std(void);
|
||||
int fts_bus_init(struct fts_ts_data *ts_data);
|
||||
int fts_bus_exit(struct fts_ts_data *ts_data);
|
||||
|
||||
/* Gesture functions */
|
||||
int fts_gesture_init(struct fts_ts_data *ts_data);
|
||||
int fts_gesture_exit(struct fts_ts_data *ts_data);
|
||||
void fts_gesture_recovery(struct fts_ts_data *ts_data);
|
||||
int fts_gesture_readdata(struct fts_ts_data *ts_data, u8 *data);
|
||||
int fts_gesture_suspend(struct fts_ts_data *ts_data);
|
||||
int fts_gesture_resume(struct fts_ts_data *ts_data);
|
||||
|
||||
/* Apk and functions */
|
||||
int fts_create_apk_debug_channel(struct fts_ts_data *);
|
||||
void fts_release_apk_debug_channel(struct fts_ts_data *);
|
||||
|
||||
/* ADB functions */
|
||||
int fts_create_sysfs(struct fts_ts_data *ts_data);
|
||||
int fts_remove_sysfs(struct fts_ts_data *ts_data);
|
||||
|
||||
/* ESD */
|
||||
#if FTS_ESDCHECK_EN
|
||||
int fts_esdcheck_init(struct fts_ts_data *ts_data);
|
||||
int fts_esdcheck_exit(struct fts_ts_data *ts_data);
|
||||
int fts_esdcheck_switch(bool enable);
|
||||
int fts_esdcheck_proc_busy(bool proc_debug);
|
||||
int fts_esdcheck_set_intr(bool intr);
|
||||
int fts_esdcheck_suspend(void);
|
||||
int fts_esdcheck_resume(void);
|
||||
#endif
|
||||
|
||||
/* Production test */
|
||||
#if FTS_TEST_EN
|
||||
int fts_test_init(struct fts_ts_data *ts_data);
|
||||
int fts_test_exit(struct fts_ts_data *ts_data);
|
||||
#endif
|
||||
|
||||
/* Point Report Check*/
|
||||
#if FTS_POINT_REPORT_CHECK_EN
|
||||
int fts_point_report_check_init(struct fts_ts_data *ts_data);
|
||||
int fts_point_report_check_exit(struct fts_ts_data *ts_data);
|
||||
void fts_prc_queue_work(struct fts_ts_data *ts_data);
|
||||
#endif
|
||||
|
||||
/* FW upgrade */
|
||||
int fts_fwupg_init(struct fts_ts_data *ts_data);
|
||||
int fts_fwupg_exit(struct fts_ts_data *ts_data);
|
||||
int fts_upgrade_bin(char *fw_name, bool force);
|
||||
int fts_enter_test_environment(bool test_state);
|
||||
|
||||
/* Other */
|
||||
int fts_reset_proc(int hdelayms);
|
||||
int fts_check_cid(struct fts_ts_data *ts_data, u8 id_h);
|
||||
int fts_wait_tp_to_valid(void);
|
||||
void fts_release_all_finger(void);
|
||||
void fts_tp_state_recovery(struct fts_ts_data *ts_data);
|
||||
int fts_ex_mode_init(struct fts_ts_data *ts_data);
|
||||
int fts_ex_mode_exit(struct fts_ts_data *ts_data);
|
||||
int fts_ex_mode_recovery(struct fts_ts_data *ts_data);
|
||||
|
||||
void fts_irq_disable(void);
|
||||
void fts_irq_enable(void);
|
||||
#endif /* __LINUX_FOCALTECH_CORE_H__ */
|
462
drivers/input/touchscreen/ft3519/focaltech_esdcheck.c
Normal file
462
drivers/input/touchscreen/ft3519/focaltech_esdcheck.c
Normal file
|
@ -0,0 +1,462 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, FocalTech Systems, Ltd., all rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_esdcheck.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-03
|
||||
*
|
||||
* Abstract: ESD check function
|
||||
*
|
||||
* Version: v1.0
|
||||
*
|
||||
* Revision History:
|
||||
* v1.0:
|
||||
* First release. By luougojin 2016-08-03
|
||||
* v1.1: By luougojin 2017-02-15
|
||||
* 1. Add LCD_ESD_PATCH to control idc_esdcheck_lcderror
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Included header files
|
||||
*****************************************************************************/
|
||||
#include "focaltech_core.h"
|
||||
|
||||
#if FTS_ESDCHECK_EN
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define ESDCHECK_WAIT_TIME 1000 /* ms */
|
||||
#define LCD_ESD_PATCH 0
|
||||
#define ESDCHECK_INTRCNT_MAX 2
|
||||
|
||||
/*****************************************************************************
|
||||
* Private enumerations, structures and unions using typedef
|
||||
*****************************************************************************/
|
||||
struct fts_esdcheck_st {
|
||||
u8 mode : 1; /* 1- need check esd 0- no esd check */
|
||||
u8 suspend : 1;
|
||||
u8 proc_debug : 1; /* apk or adb use */
|
||||
u8 intr : 1; /* 1- Interrupt trigger */
|
||||
u8 unused : 4;
|
||||
u8 intr_cnt;
|
||||
u8 flow_work_hold_cnt; /* Flow Work Cnt(reg0x91) keep a same value for x times. >=5 times is ESD, need reset */
|
||||
u8 flow_work_cnt_last; /* Save Flow Work Cnt(reg0x91) value */
|
||||
u32 hardware_reset_cnt;
|
||||
u32 nack_cnt;
|
||||
u32 dataerror_cnt;
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Static variables
|
||||
*****************************************************************************/
|
||||
static struct fts_esdcheck_st fts_esdcheck_data;
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Static function prototypes
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* functions body
|
||||
*****************************************************************************/
|
||||
#if LCD_ESD_PATCH
|
||||
int lcd_need_reset;
|
||||
static int tp_need_recovery; /* LCD reset cause Tp reset */
|
||||
int idc_esdcheck_lcderror(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 val = 0;
|
||||
|
||||
FTS_DEBUG("check LCD ESD");
|
||||
if ( (tp_need_recovery == 1) && (lcd_need_reset == 0) ) {
|
||||
tp_need_recovery = 0;
|
||||
/* LCD reset, need recover TP state */
|
||||
fts_release_all_finger();
|
||||
fts_tp_state_recovery(ts_data);
|
||||
}
|
||||
|
||||
ret = fts_read_reg(FTS_REG_ESD_SATURATE, &val);
|
||||
if ( ret < 0) {
|
||||
FTS_ERROR("read reg0xED fail,ret:%d", ret);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (val == 0xAA) {
|
||||
/*
|
||||
* 1. Set flag lcd_need_reset = 1;
|
||||
* 2. LCD driver need reset(recovery) LCD and set lcd_need_reset to 0
|
||||
* 3. recover TP state
|
||||
*/
|
||||
FTS_INFO("LCD ESD, need execute LCD reset");
|
||||
lcd_need_reset = 1;
|
||||
tp_need_recovery = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int fts_esdcheck_tp_reset(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
|
||||
fts_esdcheck_data.flow_work_hold_cnt = 0;
|
||||
fts_esdcheck_data.hardware_reset_cnt++;
|
||||
|
||||
fts_reset_proc(200);
|
||||
fts_release_all_finger();
|
||||
fts_tp_state_recovery(ts_data);
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool get_chip_id(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
u8 idh = 0;
|
||||
u8 chip_id = ts_data->ic_info.ids.chip_idh;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
ret = fts_read_reg(FTS_REG_CHIP_ID, &idh);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("read chip id fail,ret:%d", ret);
|
||||
fts_esdcheck_data.nack_cnt++;
|
||||
} else {
|
||||
if ((idh == chip_id) || (fts_check_cid(ts_data, idh) == 0)) {
|
||||
break;
|
||||
} else {
|
||||
FTS_DEBUG("read chip_id:%x,retry:%d", idh, i);
|
||||
fts_esdcheck_data.dataerror_cnt++;
|
||||
}
|
||||
}
|
||||
msleep(10);
|
||||
}
|
||||
|
||||
/* if can't get correct data in 3 times, then need hardware reset */
|
||||
if (i >= 3) {
|
||||
FTS_ERROR("read chip id 3 times fail, need execute TP reset");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: get_flow_cnt
|
||||
* Brief: Read flow cnt(0x91)
|
||||
* Input:
|
||||
* Output:
|
||||
* Return: 1(true) - Reg 0x91(flow cnt) abnormal: hold a value for 5 times
|
||||
* 0(false) - Reg 0x91(flow cnt) normal
|
||||
*****************************************************************************/
|
||||
static bool get_flow_cnt(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 reg_value = 0;
|
||||
u8 reg_addr = 0;
|
||||
|
||||
reg_addr = FTS_REG_FLOW_WORK_CNT;
|
||||
ret = fts_read(®_addr, 1, ®_value, 1);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("read reg0x91 fail,ret:%d", ret);
|
||||
fts_esdcheck_data.nack_cnt++;
|
||||
} else {
|
||||
if ( reg_value == fts_esdcheck_data.flow_work_cnt_last ) {
|
||||
FTS_DEBUG("reg0x91,val:%x,last:%x", reg_value,
|
||||
fts_esdcheck_data.flow_work_cnt_last);
|
||||
fts_esdcheck_data.flow_work_hold_cnt++;
|
||||
} else {
|
||||
fts_esdcheck_data.flow_work_hold_cnt = 0;
|
||||
}
|
||||
|
||||
fts_esdcheck_data.flow_work_cnt_last = reg_value;
|
||||
}
|
||||
|
||||
/* Flow Work Cnt keep a value for 5 times, need execute TP reset */
|
||||
if (fts_esdcheck_data.flow_work_hold_cnt >= 5) {
|
||||
FTS_DEBUG("reg0x91 keep a value for 5 times, need execute TP reset");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int esdcheck_algorithm(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 reg_value = 0;
|
||||
u8 reg_addr = 0;
|
||||
bool hardware_reset = 0;
|
||||
|
||||
/* 1. esdcheck is interrupt, then return */
|
||||
if (fts_esdcheck_data.intr == 1) {
|
||||
fts_esdcheck_data.intr_cnt++;
|
||||
if (fts_esdcheck_data.intr_cnt > ESDCHECK_INTRCNT_MAX)
|
||||
fts_esdcheck_data.intr = 0;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 2. check power state, if suspend, no need check esd */
|
||||
if (fts_esdcheck_data.suspend == 1) {
|
||||
FTS_DEBUG("In suspend, not check esd");
|
||||
/* because in suspend state, adb can be used, when upgrade FW, will
|
||||
* active ESD check(active = 1); But in suspend, then will don't
|
||||
* queue_delayed_work, when resume, don't check ESD again
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 3. check fts_esdcheck_data.proc_debug state, if 1-proc busy, no need check esd*/
|
||||
if (fts_esdcheck_data.proc_debug == 1) {
|
||||
FTS_INFO("In apk/adb command mode, not check esd");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 4. In factory mode, can't check esd */
|
||||
reg_addr = FTS_REG_WORKMODE;
|
||||
ret = fts_read_reg(reg_addr, ®_value);
|
||||
if ( ret < 0 ) {
|
||||
fts_esdcheck_data.nack_cnt++;
|
||||
} else if ( (reg_value & 0x70) != FTS_REG_WORKMODE_WORK_VALUE) {
|
||||
FTS_DEBUG("not in work mode(%x), no check esd", reg_value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* 5. IDC esd check lcd default:close */
|
||||
#if LCD_ESD_PATCH
|
||||
idc_esdcheck_lcderror(ts_data);
|
||||
#endif
|
||||
|
||||
/* 6. Get Chip ID */
|
||||
hardware_reset = get_chip_id(ts_data);
|
||||
|
||||
/* 7. get Flow work cnt: 0x91 If no change for 5 times, then ESD and reset */
|
||||
if (!hardware_reset) {
|
||||
hardware_reset = get_flow_cnt(ts_data);
|
||||
}
|
||||
|
||||
/* 8. If need hardware reset, then handle it here */
|
||||
if (hardware_reset == 1) {
|
||||
FTS_DEBUG("NoACK=%d, Error Data=%d, Hardware Reset=%d",
|
||||
fts_esdcheck_data.nack_cnt,
|
||||
fts_esdcheck_data.dataerror_cnt,
|
||||
fts_esdcheck_data.hardware_reset_cnt);
|
||||
fts_esdcheck_tp_reset(ts_data);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void esdcheck_func(struct work_struct *work)
|
||||
{
|
||||
struct fts_ts_data *ts_data = container_of(work,
|
||||
struct fts_ts_data, esdcheck_work.work);
|
||||
|
||||
if (ENABLE == fts_esdcheck_data.mode) {
|
||||
esdcheck_algorithm(ts_data);
|
||||
queue_delayed_work(ts_data->ts_workqueue, &ts_data->esdcheck_work,
|
||||
msecs_to_jiffies(ESDCHECK_WAIT_TIME));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int fts_esdcheck_set_intr(bool intr)
|
||||
{
|
||||
/* interrupt don't add debug message */
|
||||
fts_esdcheck_data.intr = intr;
|
||||
fts_esdcheck_data.intr_cnt = (u8)intr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fts_esdcheck_get_status(void)
|
||||
{
|
||||
/* interrupt don't add debug message */
|
||||
return fts_esdcheck_data.mode;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: fts_esdcheck_proc_busy
|
||||
* Brief: When APK or ADB command access TP via driver, then need set proc_debug,
|
||||
* then will not check ESD.
|
||||
* Input:
|
||||
* Output:
|
||||
* Return:
|
||||
*****************************************************************************/
|
||||
int fts_esdcheck_proc_busy(bool proc_debug)
|
||||
{
|
||||
fts_esdcheck_data.proc_debug = proc_debug;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: fts_esdcheck_switch
|
||||
* Brief: FTS esd check function switch.
|
||||
* Input: enable: 1 - Enable esd check
|
||||
* 0 - Disable esd check
|
||||
* Output:
|
||||
* Return:
|
||||
*****************************************************************************/
|
||||
int fts_esdcheck_switch(bool enable)
|
||||
{
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
FTS_FUNC_ENTER();
|
||||
if (fts_esdcheck_data.mode == ENABLE) {
|
||||
if (enable) {
|
||||
FTS_DEBUG("ESD check start");
|
||||
fts_esdcheck_data.flow_work_hold_cnt = 0;
|
||||
fts_esdcheck_data.flow_work_cnt_last = 0;
|
||||
fts_esdcheck_data.intr = 0;
|
||||
fts_esdcheck_data.intr_cnt = 0;
|
||||
queue_delayed_work(ts_data->ts_workqueue,
|
||||
&ts_data->esdcheck_work,
|
||||
msecs_to_jiffies(ESDCHECK_WAIT_TIME));
|
||||
} else {
|
||||
FTS_DEBUG("ESD check stop");
|
||||
cancel_delayed_work_sync(&ts_data->esdcheck_work);
|
||||
}
|
||||
}
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_esdcheck_suspend(void)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
fts_esdcheck_switch(DISABLE);
|
||||
fts_esdcheck_data.suspend = 1;
|
||||
fts_esdcheck_data.intr = 0;
|
||||
fts_esdcheck_data.intr_cnt = 0;
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_esdcheck_resume( void )
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
fts_esdcheck_switch(ENABLE);
|
||||
fts_esdcheck_data.suspend = 0;
|
||||
fts_esdcheck_data.intr = 0;
|
||||
fts_esdcheck_data.intr_cnt = 0;
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t fts_esdcheck_store(
|
||||
struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct input_dev *input_dev = fts_data->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
if (FTS_SYSFS_ECHO_ON(buf)) {
|
||||
FTS_DEBUG("enable esdcheck");
|
||||
fts_esdcheck_data.mode = ENABLE;
|
||||
fts_esdcheck_switch(ENABLE);
|
||||
} else if (FTS_SYSFS_ECHO_OFF(buf)) {
|
||||
FTS_DEBUG("disable esdcheck");
|
||||
fts_esdcheck_switch(DISABLE);
|
||||
fts_esdcheck_data.mode = DISABLE;
|
||||
}
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_esdcheck_show(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int count;
|
||||
struct input_dev *input_dev = fts_data->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
count = snprintf(buf, PAGE_SIZE, "Esd check: %s\n", \
|
||||
fts_esdcheck_get_status() ? "On" : "Off");
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/* sysfs esd node
|
||||
* read example: cat fts_esd_mode ---read esd mode
|
||||
* write example:echo 01 > fts_esd_mode ---make esdcheck enable
|
||||
*
|
||||
*/
|
||||
static DEVICE_ATTR (fts_esd_mode, S_IRUGO | S_IWUSR, fts_esdcheck_show, fts_esdcheck_store);
|
||||
|
||||
static struct attribute *fts_esd_mode_attrs[] = {
|
||||
|
||||
&dev_attr_fts_esd_mode.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group fts_esd_group = {
|
||||
.attrs = fts_esd_mode_attrs,
|
||||
};
|
||||
|
||||
int fts_create_esd_sysfs(struct device *dev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = sysfs_create_group(&dev->kobj, &fts_esd_group);
|
||||
if ( ret != 0) {
|
||||
FTS_ERROR("fts_create_esd_sysfs(sysfs) create fail");
|
||||
sysfs_remove_group(&dev->kobj, &fts_esd_group);
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_esdcheck_init(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
|
||||
if (ts_data->ts_workqueue) {
|
||||
INIT_DELAYED_WORK(&ts_data->esdcheck_work, esdcheck_func);
|
||||
} else {
|
||||
FTS_ERROR("fts workqueue is NULL, can't run esd check function");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
memset((u8 *)&fts_esdcheck_data, 0, sizeof(struct fts_esdcheck_st));
|
||||
|
||||
fts_esdcheck_data.mode = ENABLE;
|
||||
fts_esdcheck_data.intr = 0;
|
||||
fts_esdcheck_data.intr_cnt = 0;
|
||||
fts_esdcheck_switch(ENABLE);
|
||||
fts_create_esd_sysfs(ts_data->dev);
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_esdcheck_exit(struct fts_ts_data *ts_data)
|
||||
{
|
||||
sysfs_remove_group(&ts_data->dev->kobj, &fts_esd_group);
|
||||
return 0;
|
||||
}
|
||||
#endif /* FTS_ESDCHECK_EN */
|
||||
|
1217
drivers/input/touchscreen/ft3519/focaltech_ex_fun.c
Normal file
1217
drivers/input/touchscreen/ft3519/focaltech_ex_fun.c
Normal file
File diff suppressed because it is too large
Load diff
307
drivers/input/touchscreen/ft3519/focaltech_ex_mode.c
Normal file
307
drivers/input/touchscreen/ft3519/focaltech_ex_mode.c
Normal file
|
@ -0,0 +1,307 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech ftxxxx TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, Focaltech Ltd. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_ex_mode.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-31
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
* Reference:
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* 1.Included header files
|
||||
*****************************************************************************/
|
||||
#include "focaltech_core.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* 2.Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* 3.Private enumerations, structures and unions using typedef
|
||||
*****************************************************************************/
|
||||
enum _ex_mode {
|
||||
MODE_GLOVE = 0,
|
||||
MODE_COVER,
|
||||
MODE_CHARGER,
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* 4.Static variables
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* 5.Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* 6.Static function prototypes
|
||||
*******************************************************************************/
|
||||
static int fts_ex_mode_switch(enum _ex_mode mode, u8 value)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 m_val = 0;
|
||||
|
||||
if (value)
|
||||
m_val = 0x01;
|
||||
else
|
||||
m_val = 0x00;
|
||||
|
||||
switch (mode) {
|
||||
case MODE_GLOVE:
|
||||
ret = fts_write_reg(FTS_REG_GLOVE_MODE_EN, m_val);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("MODE_GLOVE switch to %d fail", m_val);
|
||||
}
|
||||
break;
|
||||
case MODE_COVER:
|
||||
ret = fts_write_reg(FTS_REG_COVER_MODE_EN, m_val);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("MODE_COVER switch to %d fail", m_val);
|
||||
}
|
||||
break;
|
||||
case MODE_CHARGER:
|
||||
ret = fts_write_reg(FTS_REG_CHARGER_MODE_EN, m_val);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("MODE_CHARGER switch to %d fail", m_val);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
FTS_ERROR("mode(%d) unsupport", mode);
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t fts_glove_mode_show(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int count = 0;
|
||||
u8 val = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
struct input_dev *input_dev = ts_data->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
fts_read_reg(FTS_REG_GLOVE_MODE_EN, &val);
|
||||
count = snprintf(buf + count, PAGE_SIZE, "Glove Mode:%s\n",
|
||||
ts_data->glove_mode ? "On" : "Off");
|
||||
count += snprintf(buf + count, PAGE_SIZE, "Glove Reg(0xC0):%d\n", val);
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_glove_mode_store(
|
||||
struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
int ret = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
|
||||
if (FTS_SYSFS_ECHO_ON(buf)) {
|
||||
if (!ts_data->glove_mode) {
|
||||
FTS_DEBUG("enter glove mode");
|
||||
ret = fts_ex_mode_switch(MODE_GLOVE, ENABLE);
|
||||
if (ret >= 0) {
|
||||
ts_data->glove_mode = ENABLE;
|
||||
}
|
||||
}
|
||||
} else if (FTS_SYSFS_ECHO_OFF(buf)) {
|
||||
if (ts_data->glove_mode) {
|
||||
FTS_DEBUG("exit glove mode");
|
||||
ret = fts_ex_mode_switch(MODE_GLOVE, DISABLE);
|
||||
if (ret >= 0) {
|
||||
ts_data->glove_mode = DISABLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FTS_DEBUG("glove mode:%d", ts_data->glove_mode);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
static ssize_t fts_cover_mode_show(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int count = 0;
|
||||
u8 val = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
struct input_dev *input_dev = ts_data->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
fts_read_reg(FTS_REG_COVER_MODE_EN, &val);
|
||||
count = snprintf(buf + count, PAGE_SIZE, "Cover Mode:%s\n",
|
||||
ts_data->cover_mode ? "On" : "Off");
|
||||
count += snprintf(buf + count, PAGE_SIZE, "Cover Reg(0xC1):%d\n", val);
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_cover_mode_store(
|
||||
struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
int ret = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
|
||||
if (FTS_SYSFS_ECHO_ON(buf)) {
|
||||
if (!ts_data->cover_mode) {
|
||||
FTS_DEBUG("enter cover mode");
|
||||
ret = fts_ex_mode_switch(MODE_COVER, ENABLE);
|
||||
if (ret >= 0) {
|
||||
ts_data->cover_mode = ENABLE;
|
||||
}
|
||||
}
|
||||
} else if (FTS_SYSFS_ECHO_OFF(buf)) {
|
||||
if (ts_data->cover_mode) {
|
||||
FTS_DEBUG("exit cover mode");
|
||||
ret = fts_ex_mode_switch(MODE_COVER, DISABLE);
|
||||
if (ret >= 0) {
|
||||
ts_data->cover_mode = DISABLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FTS_DEBUG("cover mode:%d", ts_data->cover_mode);
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_charger_mode_show(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int count = 0;
|
||||
u8 val = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
struct input_dev *input_dev = ts_data->input_dev;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
fts_read_reg(FTS_REG_CHARGER_MODE_EN, &val);
|
||||
count = snprintf(buf + count, PAGE_SIZE, "Charger Mode:%s\n",
|
||||
ts_data->charger_mode ? "On" : "Off");
|
||||
count += snprintf(buf + count, PAGE_SIZE, "Charger Reg(0x8B):%d\n", val);
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_charger_mode_store(
|
||||
struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
int ret = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
|
||||
if (FTS_SYSFS_ECHO_ON(buf)) {
|
||||
if (!ts_data->charger_mode) {
|
||||
FTS_DEBUG("enter charger mode");
|
||||
ret = fts_ex_mode_switch(MODE_CHARGER, ENABLE);
|
||||
if (ret >= 0) {
|
||||
ts_data->charger_mode = ENABLE;
|
||||
}
|
||||
}
|
||||
} else if (FTS_SYSFS_ECHO_OFF(buf)) {
|
||||
if (ts_data->charger_mode) {
|
||||
FTS_DEBUG("exit charger mode");
|
||||
ret = fts_ex_mode_switch(MODE_CHARGER, DISABLE);
|
||||
if (ret >= 0) {
|
||||
ts_data->charger_mode = DISABLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FTS_DEBUG("charger mode:%d", ts_data->glove_mode);
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
/* read and write charger mode
|
||||
* read example: cat fts_glove_mode ---read glove mode
|
||||
* write example:echo 1 > fts_glove_mode ---write glove mode to 01
|
||||
*/
|
||||
static DEVICE_ATTR(fts_glove_mode, S_IRUGO | S_IWUSR,
|
||||
fts_glove_mode_show, fts_glove_mode_store);
|
||||
|
||||
static DEVICE_ATTR(fts_cover_mode, S_IRUGO | S_IWUSR,
|
||||
fts_cover_mode_show, fts_cover_mode_store);
|
||||
|
||||
static DEVICE_ATTR(fts_charger_mode, S_IRUGO | S_IWUSR,
|
||||
fts_charger_mode_show, fts_charger_mode_store);
|
||||
|
||||
static struct attribute *fts_touch_mode_attrs[] = {
|
||||
&dev_attr_fts_glove_mode.attr,
|
||||
&dev_attr_fts_cover_mode.attr,
|
||||
&dev_attr_fts_charger_mode.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group fts_touch_mode_group = {
|
||||
.attrs = fts_touch_mode_attrs,
|
||||
};
|
||||
|
||||
int fts_ex_mode_recovery(struct fts_ts_data *ts_data)
|
||||
{
|
||||
if (ts_data->glove_mode) {
|
||||
fts_ex_mode_switch(MODE_GLOVE, ENABLE);
|
||||
}
|
||||
|
||||
if (ts_data->cover_mode) {
|
||||
fts_ex_mode_switch(MODE_COVER, ENABLE);
|
||||
}
|
||||
|
||||
if (ts_data->charger_mode) {
|
||||
fts_ex_mode_switch(MODE_CHARGER, ENABLE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_ex_mode_init(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ts_data->glove_mode = DISABLE;
|
||||
ts_data->cover_mode = DISABLE;
|
||||
ts_data->charger_mode = DISABLE;
|
||||
|
||||
ret = sysfs_create_group(&ts_data->dev->kobj, &fts_touch_mode_group);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("create sysfs(ex_mode) fail");
|
||||
sysfs_remove_group(&ts_data->dev->kobj, &fts_touch_mode_group);
|
||||
return ret;
|
||||
} else {
|
||||
FTS_DEBUG("create sysfs(ex_mode) succeedfully");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_ex_mode_exit(struct fts_ts_data *ts_data)
|
||||
{
|
||||
sysfs_remove_group(&ts_data->dev->kobj, &fts_touch_mode_group);
|
||||
return 0;
|
||||
}
|
2097
drivers/input/touchscreen/ft3519/focaltech_flash.c
Normal file
2097
drivers/input/touchscreen/ft3519/focaltech_flash.c
Normal file
File diff suppressed because it is too large
Load diff
217
drivers/input/touchscreen/ft3519/focaltech_flash.h
Normal file
217
drivers/input/touchscreen/ft3519/focaltech_flash.h
Normal file
|
@ -0,0 +1,217 @@
|
|||
/************************************************************************
|
||||
* Copyright (c) 2012-2020, Focaltech Systems (R)£¬All Rights Reserved.
|
||||
*
|
||||
* File Name: focaltech_flash.h
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-07
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
************************************************************************/
|
||||
#ifndef __LINUX_FOCALTECH_FLASH_H__
|
||||
#define __LINUX_FOCALTECH_FLASH_H__
|
||||
|
||||
/*****************************************************************************
|
||||
* 1.Included header files
|
||||
*****************************************************************************/
|
||||
#include "focaltech_core.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define FTS_CMD_RESET 0x07
|
||||
#define FTS_ROMBOOT_CMD_SET_PRAM_ADDR 0xAD
|
||||
#define FTS_ROMBOOT_CMD_SET_PRAM_ADDR_LEN 4
|
||||
#define FTS_ROMBOOT_CMD_WRITE 0xAE
|
||||
#define FTS_ROMBOOT_CMD_START_APP 0x08
|
||||
#define FTS_DELAY_PRAMBOOT_START 100
|
||||
#define FTS_ROMBOOT_CMD_ECC 0xCC
|
||||
#define FTS_PRAM_SADDR 0x000000
|
||||
#define FTS_DRAM_SADDR 0xD00000
|
||||
|
||||
#define FTS_CMD_READ 0x03
|
||||
#define FTS_CMD_READ_DELAY 1
|
||||
#define FTS_CMD_READ_LEN 4
|
||||
#define FTS_CMD_READ_LEN_SPI 6
|
||||
#define FTS_CMD_FLASH_TYPE 0x05
|
||||
#define FTS_CMD_FLASH_MODE 0x09
|
||||
#define FLASH_MODE_WRITE_FLASH_VALUE 0x0A
|
||||
#define FLASH_MODE_UPGRADE_VALUE 0x0B
|
||||
#define FLASH_MODE_LIC_VALUE 0x0C
|
||||
#define FLASH_MODE_PARAM_VALUE 0x0D
|
||||
#define FTS_CMD_ERASE_APP 0x61
|
||||
#define FTS_REASE_APP_DELAY 1350
|
||||
#define FTS_ERASE_SECTOR_DELAY 60
|
||||
#define FTS_RETRIES_REASE 50
|
||||
#define FTS_RETRIES_DELAY_REASE 400
|
||||
#define FTS_CMD_FLASH_STATUS 0x6A
|
||||
#define FTS_CMD_FLASH_STATUS_LEN 2
|
||||
#define FTS_CMD_FLASH_STATUS_NOP 0x0000
|
||||
#define FTS_CMD_FLASH_STATUS_ECC_OK 0xF055
|
||||
#define FTS_CMD_FLASH_STATUS_ERASE_OK 0xF0AA
|
||||
#define FTS_CMD_FLASH_STATUS_WRITE_OK 0x1000
|
||||
#define FTS_CMD_ECC_INIT 0x64
|
||||
#define FTS_CMD_ECC_CAL 0x65
|
||||
#define FTS_CMD_ECC_CAL_LEN 7
|
||||
#define FTS_RETRIES_ECC_CAL 10
|
||||
#define FTS_RETRIES_DELAY_ECC_CAL 50
|
||||
#define FTS_CMD_ECC_READ 0x66
|
||||
#define FTS_CMD_DATA_LEN 0xB0
|
||||
#define FTS_CMD_APP_DATA_LEN_INCELL 0x7A
|
||||
#define FTS_CMD_DATA_LEN_LEN 4
|
||||
#define FTS_CMD_SET_WFLASH_ADDR 0xAB
|
||||
#define FTS_CMD_SET_RFLASH_ADDR 0xAC
|
||||
#define FTS_LEN_SET_ADDR 4
|
||||
#define FTS_CMD_WRITE 0xBF
|
||||
#define FTS_RETRIES_WRITE 100
|
||||
#define FTS_RETRIES_DELAY_WRITE 1
|
||||
#define FTS_CMD_WRITE_LEN 6
|
||||
#define FTS_DELAY_READ_ID 20
|
||||
#define FTS_DELAY_UPGRADE_RESET 80
|
||||
#define PRAMBOOT_MIN_SIZE 0x120
|
||||
#define PRAMBOOT_MAX_SIZE (64*1024)
|
||||
#define FTS_FLASH_PACKET_LENGTH 32 /* max=128 */
|
||||
#define FTS_MAX_LEN_ECC_CALC 0xFFFE /* must be even */
|
||||
#define FTS_MIN_LEN 0x120
|
||||
#define FTS_MAX_LEN_FILE (256 * 1024)
|
||||
#define FTS_MAX_LEN_APP (64 * 1024)
|
||||
#define FTS_MAX_LEN_SECTOR (4 * 1024)
|
||||
#define FTS_CONIFG_VENDORID_OFF 0x04
|
||||
#define FTS_CONIFG_MODULEID_OFF 0x1E
|
||||
#define FTS_CONIFG_PROJECTID_OFF 0x20
|
||||
#define FTS_APPINFO_OFF 0x100
|
||||
#define FTS_APPINFO_APPLEN_OFF 0x00
|
||||
#define FTS_APPINFO_APPLEN2_OFF 0x12
|
||||
#define FTS_REG_UPGRADE 0xFC
|
||||
#define FTS_REG_UPGRADE2 0xBC
|
||||
#define FTS_UPGRADE_AA 0xAA
|
||||
#define FTS_UPGRADE_55 0x55
|
||||
#define FTS_DELAY_UPGRADE_AA 10
|
||||
#define FTS_UPGRADE_LOOP 30
|
||||
#define FTS_HEADER_LEN 32
|
||||
#define FTS_FW_BIN_FILEPATH "/sdcard/"
|
||||
#define FTS_FW_IDE_SIG "IDE_"
|
||||
#define FTS_FW_IDE_SIG_LEN 4
|
||||
#define MAX_MODULE_VENDOR_NAME_LEN 16
|
||||
|
||||
#define FTS_ROMBOOT_CMD_ECC_NEW_LEN 7
|
||||
#define FTS_ECC_FINISH_TIMEOUT 100
|
||||
#define FTS_ROMBOOT_CMD_ECC_FINISH 0xCE
|
||||
#define FTS_ROMBOOT_CMD_ECC_FINISH_OK_A5 0xA5
|
||||
#define FTS_ROMBOOT_CMD_ECC_FINISH_OK_00 0x00
|
||||
#define FTS_ROMBOOT_CMD_ECC_READ 0xCD
|
||||
#define AL2_FCS_COEF ((1 << 15) + (1 << 10) + (1 << 3))
|
||||
|
||||
#define FTS_APP_INFO_OFFSET 0x100
|
||||
|
||||
enum FW_STATUS {
|
||||
FTS_RUN_IN_ERROR,
|
||||
FTS_RUN_IN_APP,
|
||||
FTS_RUN_IN_ROM,
|
||||
FTS_RUN_IN_PRAM,
|
||||
FTS_RUN_IN_BOOTLOADER,
|
||||
};
|
||||
|
||||
enum FW_FLASH_MODE {
|
||||
FLASH_MODE_APP,
|
||||
FLASH_MODE_LIC,
|
||||
FLASH_MODE_PARAM,
|
||||
FLASH_MODE_ALL,
|
||||
};
|
||||
|
||||
enum ECC_CHECK_MODE {
|
||||
ECC_CHECK_MODE_XOR,
|
||||
ECC_CHECK_MODE_CRC16,
|
||||
};
|
||||
|
||||
enum UPGRADE_SPEC {
|
||||
UPGRADE_SPEC_V_1_0 = 0x0100,
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Private enumerations, structures and unions using typedef
|
||||
*****************************************************************************/
|
||||
/* IC info */
|
||||
struct upgrade_func {
|
||||
u16 ctype[FTS_MAX_COMPATIBLE_TYPE];
|
||||
u32 fwveroff;
|
||||
u32 fwcfgoff;
|
||||
u32 appoff;
|
||||
u32 licoff;
|
||||
u32 paramcfgoff;
|
||||
u32 paramcfgveroff;
|
||||
u32 paramcfg2off;
|
||||
int pram_ecc_check_mode;
|
||||
int fw_ecc_check_mode;
|
||||
int upgspec_version;
|
||||
bool new_return_value_from_ic;
|
||||
bool appoff_handle_in_ic;
|
||||
bool is_reset_register_BC;
|
||||
bool read_boot_id_need_reset;
|
||||
bool hid_supported;
|
||||
bool pramboot_supported;
|
||||
u8 *pramboot;
|
||||
u32 pb_length;
|
||||
int (*init)(u8 *, u32);
|
||||
int (*write_pramboot_private)(void);
|
||||
int (*upgrade)(u8 *, u32);
|
||||
int (*get_hlic_ver)(u8 *);
|
||||
int (*lic_upgrade)(u8 *, u32);
|
||||
int (*param_upgrade)(u8 *, u32);
|
||||
int (*force_upgrade)(u8 *, u32);
|
||||
};
|
||||
|
||||
struct upgrade_setting_nf {
|
||||
u8 rom_idh;
|
||||
u8 rom_idl;
|
||||
u16 reserved;
|
||||
u32 app2_offset;
|
||||
u32 ecclen_max;
|
||||
u8 eccok_val;
|
||||
u8 upgsts_boot;
|
||||
u8 delay_init;
|
||||
bool spi_pe;
|
||||
bool half_length;
|
||||
bool fd_check;
|
||||
bool drwr_support;
|
||||
};
|
||||
|
||||
struct upgrade_module {
|
||||
int id;
|
||||
char vendor_name[MAX_MODULE_VENDOR_NAME_LEN];
|
||||
u8 *fw_file;
|
||||
u32 fw_len;
|
||||
};
|
||||
|
||||
struct fts_upgrade {
|
||||
struct fts_ts_data *ts_data;
|
||||
struct upgrade_module *module_info;
|
||||
struct upgrade_func *func;
|
||||
struct upgrade_setting_nf *setting_nf;
|
||||
int module_id;
|
||||
bool fw_from_request;
|
||||
u8 *fw;
|
||||
u32 fw_length;
|
||||
u8 *lic;
|
||||
u32 lic_length;
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
extern struct upgrade_func upgrade_func_ft5452i;
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* Static function prototypes
|
||||
*****************************************************************************/
|
||||
int fts_fwupg_reset_in_boot(void);
|
||||
int fts_fwupg_enter_into_boot(void);
|
||||
int fts_fwupg_erase(u32 delay);
|
||||
int fts_fwupg_ecc_cal(u32 saddr, u32 len);
|
||||
int fts_flash_write_buf(u32 saddr, u8 *buf, u32 len, u32 delay);
|
||||
int fts_flash_read_buf(u32 saddr, u8 *buf, u32 len);
|
||||
int fts_fwupg_upgrade(struct fts_upgrade *upg);
|
||||
#endif
|
|
@ -0,0 +1 @@
|
|||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_upgrade_ft5452i.o
|
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech fts TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2019, Focaltech Ltd. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_upgrade_ft5452.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-15
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
* Reference:
|
||||
*
|
||||
*****************************************************************************/
|
||||
/*****************************************************************************
|
||||
* 1.Included header files
|
||||
*****************************************************************************/
|
||||
#include "../focaltech_flash.h"
|
||||
|
||||
/************************************************************************
|
||||
* Name: fts_ft5452_upgrade
|
||||
* Brief:
|
||||
* Input:
|
||||
* Output:
|
||||
* Return: return 0 if success, otherwise return error code
|
||||
***********************************************************************/
|
||||
static int fts_ft5452_upgrade(u8 *buf, u32 len)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 start_addr = 0;
|
||||
u8 cmd[4] = { 0 };
|
||||
int ecc_in_host = 0;
|
||||
int ecc_in_tp = 0;
|
||||
|
||||
int i = 0;
|
||||
u8 wbuf[7] = { 0 };
|
||||
u8 reg_val[4] = {0};
|
||||
|
||||
if (NULL == buf) {
|
||||
FTS_ERROR("fw buf is null");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ((len < FTS_MIN_LEN) || (len > (60 * 1024))) {
|
||||
FTS_ERROR("fw buffer len(%x) fail", len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* enter into upgrade environment */
|
||||
ret = fts_fwupg_enter_into_boot();
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("enter into pramboot/bootloader fail,ret=%d", ret);
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
cmd[0] = FTS_CMD_FLASH_MODE;
|
||||
cmd[1] = FLASH_MODE_UPGRADE_VALUE;
|
||||
ret = fts_write(cmd, 2);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("upgrade mode(09) cmd write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
cmd[0] = FTS_CMD_DATA_LEN;
|
||||
cmd[1] = BYTE_OFF_16(len);
|
||||
cmd[2] = BYTE_OFF_8(len);
|
||||
cmd[3] = BYTE_OFF_0(len);
|
||||
ret = fts_write(cmd, FTS_CMD_DATA_LEN_LEN);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("data len cmd write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
ret = fts_fwupg_erase(FTS_REASE_APP_DELAY);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("erase cmd write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
/* write app */
|
||||
start_addr = upgrade_func_ft5452.appoff;
|
||||
ecc_in_host = fts_flash_write_buf(start_addr, buf, len, 1);
|
||||
if (ecc_in_host < 0 ) {
|
||||
FTS_ERROR("lcd initial code write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
FTS_INFO( "**********read out checksum**********");
|
||||
|
||||
/* check sum init */
|
||||
wbuf[0] = FTS_CMD_ECC_INIT;
|
||||
ret = fts_write(wbuf, 1);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("ecc init cmd write fail");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* send commond to start checksum */
|
||||
wbuf[0] = FTS_CMD_ECC_CAL;
|
||||
wbuf[1] = BYTE_OFF_16(start_addr);
|
||||
wbuf[2] = BYTE_OFF_8(start_addr);
|
||||
wbuf[3] = BYTE_OFF_0(start_addr);
|
||||
|
||||
wbuf[4] = BYTE_OFF_16(len);
|
||||
wbuf[5] = BYTE_OFF_8(len);
|
||||
wbuf[6] = BYTE_OFF_0(len);
|
||||
|
||||
FTS_DEBUG("ecc calc startaddr:0x%04x, len:%d", start_addr, len);
|
||||
ret = fts_write(wbuf, 7);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("ecc calc cmd write fail");
|
||||
return ret;
|
||||
}
|
||||
|
||||
msleep(len / 256);
|
||||
|
||||
/* read status if check sum is finished */
|
||||
for (i = 0; i < FTS_RETRIES_ECC_CAL; i++) {
|
||||
wbuf[0] = FTS_CMD_FLASH_STATUS;
|
||||
reg_val[0] = reg_val[1] = 0x00;
|
||||
fts_read(wbuf, 1, reg_val, 2);
|
||||
FTS_DEBUG("[UPGRADE]: reg_val[0]=%02x reg_val[0]=%02x!!", reg_val[0], reg_val[1]);
|
||||
if ((0xF0 == reg_val[0]) && (0x55 == reg_val[1])) {
|
||||
break;
|
||||
}
|
||||
msleep(FTS_RETRIES_DELAY_ECC_CAL);
|
||||
}
|
||||
|
||||
/* read out check sum */
|
||||
wbuf[0] = FTS_CMD_ECC_READ;
|
||||
ret = fts_read(wbuf, 1, reg_val, 1);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR( "ecc read cmd write fail");
|
||||
return ret;
|
||||
}
|
||||
ecc_in_tp = reg_val[0];
|
||||
|
||||
FTS_INFO("ecc in tp:%x, host:%x", ecc_in_tp, ecc_in_host);
|
||||
if (ecc_in_tp != ecc_in_host) {
|
||||
FTS_ERROR("ecc check fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
FTS_INFO("upgrade success, reset to normal boot");
|
||||
ret = fts_fwupg_reset_in_boot();
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("reset to normal boot fail");
|
||||
}
|
||||
|
||||
msleep(200);
|
||||
return 0;
|
||||
|
||||
fw_reset:
|
||||
FTS_INFO("upgrade fail, reset to normal boot");
|
||||
ret = fts_fwupg_reset_in_boot();
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("reset to normal boot fail");
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
struct upgrade_func upgrade_func_ft5452 = {
|
||||
.ctype = {0x81},
|
||||
.fwveroff = 0x010E,
|
||||
.fwcfgoff = 0x1FFB0,
|
||||
.appoff = 0x0000,
|
||||
.pramboot_supported = false,
|
||||
.hid_supported = true,
|
||||
.upgrade = fts_ft5452_upgrade,
|
||||
};
|
|
@ -0,0 +1,194 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech fts TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, Focaltech Ltd. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_upgrade_ft5452.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-15
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
* Reference:
|
||||
*
|
||||
*****************************************************************************/
|
||||
/*****************************************************************************
|
||||
* 1.Included header files
|
||||
*****************************************************************************/
|
||||
#include "../focaltech_flash.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
u8 pb_file_ft5452i[] = {
|
||||
#include "../include/pramboot/FT5452i_Pramboot_v4.1_20210427.i"
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
/************************************************************************
|
||||
* Name: fts_ft5452_upgrade
|
||||
* Brief:
|
||||
* Input:
|
||||
* Output:
|
||||
* Return: return 0 if success, otherwise return error code
|
||||
***********************************************************************/
|
||||
static int fts_ft5452i_upgrade(u8 *buf, u32 len)
|
||||
{
|
||||
int ret = 0;
|
||||
u32 start_addr = 0;
|
||||
u8 cmd[4] = { 0 };
|
||||
int ecc_in_host = 0;
|
||||
int ecc_in_tp = 0;
|
||||
int i = 0;
|
||||
u8 wbuf[7] = { 0 };
|
||||
u8 reg_val[4] = {0};
|
||||
|
||||
if ((NULL == buf) || (len < FTS_MIN_LEN)) {
|
||||
FTS_ERROR("buffer/len(%x) is invalid", len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* enter into upgrade environment */
|
||||
ret = fts_fwupg_enter_into_boot();
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("enter into pramboot/bootloader fail,ret=%d", ret);
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
cmd[0] = FTS_CMD_FLASH_MODE;
|
||||
cmd[1] = FLASH_MODE_UPGRADE_VALUE;
|
||||
ret = fts_write(cmd, 2);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("upgrade mode(09) cmd write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
cmd[0] = FTS_CMD_DATA_LEN;
|
||||
cmd[1] = BYTE_OFF_16(len);
|
||||
cmd[2] = BYTE_OFF_8(len);
|
||||
cmd[3] = BYTE_OFF_0(len);
|
||||
ret = fts_write(cmd, FTS_CMD_DATA_LEN_LEN);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("data len cmd write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
ret = fts_fwupg_erase(FTS_REASE_APP_DELAY);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("erase cmd write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
/* write app */
|
||||
start_addr = upgrade_func_ft5452i.appoff;
|
||||
ecc_in_host = fts_flash_write_buf(start_addr, buf, len, 1);
|
||||
if (ecc_in_host < 0 ) {
|
||||
FTS_ERROR("flash write fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
FTS_INFO( "**********read out checksum**********");
|
||||
|
||||
/* check sum init */
|
||||
wbuf[0] = FTS_CMD_ECC_INIT;
|
||||
ret = fts_write(wbuf, 1);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("ecc init cmd write fail");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* send commond to start checksum */
|
||||
wbuf[0] = FTS_CMD_ECC_CAL;
|
||||
wbuf[1] = BYTE_OFF_16(start_addr);
|
||||
wbuf[2] = BYTE_OFF_8(start_addr);
|
||||
wbuf[3] = BYTE_OFF_0(start_addr);
|
||||
|
||||
wbuf[4] = BYTE_OFF_16(len);
|
||||
wbuf[5] = BYTE_OFF_8(len);
|
||||
wbuf[6] = BYTE_OFF_0(len);
|
||||
|
||||
FTS_DEBUG("ecc calc startaddr:0x%04x, len:%d", start_addr, len);
|
||||
ret = fts_write(wbuf, 7);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("ecc calc cmd write fail");
|
||||
return ret;
|
||||
}
|
||||
|
||||
msleep(len / 256);
|
||||
|
||||
/* read status if check sum is finished */
|
||||
for (i = 0; i < FTS_RETRIES_ECC_CAL; i++) {
|
||||
wbuf[0] = FTS_CMD_FLASH_STATUS;
|
||||
reg_val[0] = reg_val[1] = 0x00;
|
||||
fts_read(wbuf, 1, reg_val, 2);
|
||||
FTS_DEBUG("[UPGRADE]: reg_val[0]=%02x reg_val[0]=%02x!!", reg_val[0], reg_val[1]);
|
||||
if ((0xF0 == reg_val[0]) && (0x55 == reg_val[1])) {
|
||||
break;
|
||||
}
|
||||
msleep(FTS_RETRIES_DELAY_ECC_CAL);
|
||||
}
|
||||
|
||||
/* read out check sum */
|
||||
wbuf[0] = FTS_CMD_ECC_READ;
|
||||
ret = fts_read(wbuf, 1, reg_val, 1);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR( "ecc read cmd write fail");
|
||||
return ret;
|
||||
}
|
||||
ecc_in_tp = reg_val[0];
|
||||
|
||||
FTS_INFO("ecc in tp:%x, host:%x", ecc_in_tp, ecc_in_host);
|
||||
if (ecc_in_tp != ecc_in_host) {
|
||||
FTS_ERROR("ecc check fail");
|
||||
goto fw_reset;
|
||||
}
|
||||
|
||||
FTS_INFO("upgrade success, reset to normal boot");
|
||||
ret = fts_fwupg_reset_in_boot();
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("reset to normal boot fail");
|
||||
}
|
||||
|
||||
msleep(200);
|
||||
return 0;
|
||||
|
||||
fw_reset:
|
||||
FTS_INFO("upgrade fail, reset to normal boot");
|
||||
ret = fts_fwupg_reset_in_boot();
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("reset to normal boot fail");
|
||||
}
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
struct upgrade_func upgrade_func_ft5452i = {
|
||||
.ctype = {0x89},
|
||||
.fwveroff = 0x010E,
|
||||
.fwcfgoff = 0x1FFB0,
|
||||
.appoff = 0x0000,
|
||||
.pramboot_supported = true,
|
||||
.pramboot = pb_file_ft5452i,
|
||||
.pb_length = sizeof(pb_file_ft5452i),
|
||||
.pram_ecc_check_mode = ECC_CHECK_MODE_CRC16,
|
||||
.new_return_value_from_ic = true,
|
||||
.hid_supported = false,
|
||||
.upgrade = fts_ft5452i_upgrade,
|
||||
};
|
460
drivers/input/touchscreen/ft3519/focaltech_gesture.c
Normal file
460
drivers/input/touchscreen/ft3519/focaltech_gesture.c
Normal file
|
@ -0,0 +1,460 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, Focaltech Ltd. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_gestrue.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-08
|
||||
*
|
||||
* Abstract:
|
||||
*
|
||||
* Reference:
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* 1.Included header files
|
||||
*****************************************************************************/
|
||||
#include "focaltech_core.h"
|
||||
|
||||
/******************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define KEY_GESTURE_U KEY_U
|
||||
#define KEY_GESTURE_UP KEY_UP
|
||||
#define KEY_GESTURE_DOWN KEY_DOWN
|
||||
#define KEY_GESTURE_LEFT KEY_LEFT
|
||||
#define KEY_GESTURE_RIGHT KEY_RIGHT
|
||||
#define KEY_GESTURE_O KEY_O
|
||||
#define KEY_GESTURE_E KEY_E
|
||||
#define KEY_GESTURE_M KEY_M
|
||||
#define KEY_GESTURE_L KEY_L
|
||||
#define KEY_GESTURE_W KEY_W
|
||||
#define KEY_GESTURE_S KEY_S
|
||||
#define KEY_GESTURE_V KEY_V
|
||||
#define KEY_GESTURE_C KEY_C
|
||||
#define KEY_GESTURE_Z KEY_Z
|
||||
|
||||
#define GESTURE_LEFT 0x20
|
||||
#define GESTURE_RIGHT 0x21
|
||||
#define GESTURE_UP 0x22
|
||||
#define GESTURE_DOWN 0x23
|
||||
#define GESTURE_DOUBLECLICK 0x24
|
||||
#define GESTURE_O 0x30
|
||||
#define GESTURE_W 0x31
|
||||
#define GESTURE_M 0x32
|
||||
#define GESTURE_E 0x33
|
||||
#define GESTURE_L 0x44
|
||||
#define GESTURE_S 0x46
|
||||
#define GESTURE_V 0x54
|
||||
#define GESTURE_Z 0x41
|
||||
#define GESTURE_C 0x34
|
||||
|
||||
/*****************************************************************************
|
||||
* Private enumerations, structures and unions using typedef
|
||||
*****************************************************************************/
|
||||
/*
|
||||
* gesture_id - mean which gesture is recognised
|
||||
* point_num - points number of this gesture
|
||||
* coordinate_x - All gesture point x coordinate
|
||||
* coordinate_y - All gesture point y coordinate
|
||||
* mode - gesture enable/disable, need enable by host
|
||||
* - 1:enable gesture function(default) 0:disable
|
||||
* active - gesture work flag,
|
||||
* always set 1 when suspend, set 0 when resume
|
||||
*/
|
||||
struct fts_gesture_st {
|
||||
u8 gesture_id;
|
||||
u8 point_num;
|
||||
u16 coordinate_x[FTS_GESTURE_POINTS_MAX];
|
||||
u16 coordinate_y[FTS_GESTURE_POINTS_MAX];
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Static variables
|
||||
*****************************************************************************/
|
||||
static struct fts_gesture_st fts_gesture_data;
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Static function prototypes
|
||||
*****************************************************************************/
|
||||
static ssize_t fts_gesture_show(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int count = 0;
|
||||
u8 val = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
|
||||
mutex_lock(&ts_data->input_dev->mutex);
|
||||
fts_read_reg(FTS_REG_GESTURE_EN, &val);
|
||||
count = snprintf(buf, PAGE_SIZE, "Gesture Mode:%s\n",
|
||||
ts_data->gesture_mode ? "On" : "Off");
|
||||
count += snprintf(buf + count, PAGE_SIZE, "Reg(0xD0)=%d\n", val);
|
||||
mutex_unlock(&ts_data->input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_gesture_store(
|
||||
struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
|
||||
mutex_lock(&ts_data->input_dev->mutex);
|
||||
if (FTS_SYSFS_ECHO_ON(buf)) {
|
||||
FTS_DEBUG("enable gesture");
|
||||
ts_data->gesture_mode = ENABLE;
|
||||
} else if (FTS_SYSFS_ECHO_OFF(buf)) {
|
||||
FTS_DEBUG("disable gesture");
|
||||
ts_data->gesture_mode = DISABLE;
|
||||
}
|
||||
mutex_unlock(&ts_data->input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_gesture_buf_show(
|
||||
struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int count = 0;
|
||||
int i = 0;
|
||||
struct input_dev *input_dev = fts_data->input_dev;
|
||||
struct fts_gesture_st *gesture = &fts_gesture_data;
|
||||
|
||||
mutex_lock(&input_dev->mutex);
|
||||
count = snprintf(buf, PAGE_SIZE, "Gesture ID:%d\n", gesture->gesture_id);
|
||||
count += snprintf(buf + count, PAGE_SIZE, "Gesture PointNum:%d\n",
|
||||
gesture->point_num);
|
||||
count += snprintf(buf + count, PAGE_SIZE, "Gesture Points Buffer:\n");
|
||||
|
||||
/* save point data,max:6 */
|
||||
for (i = 0; i < FTS_GESTURE_POINTS_MAX; i++) {
|
||||
count += snprintf(buf + count, PAGE_SIZE, "%3d(%4d,%4d) ", i,
|
||||
gesture->coordinate_x[i], gesture->coordinate_y[i]);
|
||||
if ((i + 1) % 4 == 0)
|
||||
count += snprintf(buf + count, PAGE_SIZE, "\n");
|
||||
}
|
||||
count += snprintf(buf + count, PAGE_SIZE, "\n");
|
||||
mutex_unlock(&input_dev->mutex);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t fts_gesture_buf_store(
|
||||
struct device *dev,
|
||||
struct device_attribute *attr, const char *buf, size_t count)
|
||||
{
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
|
||||
/* sysfs gesture node
|
||||
* read example: cat fts_gesture_mode ---read gesture mode
|
||||
* write example:echo 1 > fts_gesture_mode --- write gesture mode to 1
|
||||
*
|
||||
*/
|
||||
static DEVICE_ATTR(fts_gesture_mode, S_IRUGO | S_IWUSR, fts_gesture_show,
|
||||
fts_gesture_store);
|
||||
/*
|
||||
* read example: cat fts_gesture_buf --- read gesture buf
|
||||
*/
|
||||
static DEVICE_ATTR(fts_gesture_buf, S_IRUGO | S_IWUSR,
|
||||
fts_gesture_buf_show, fts_gesture_buf_store);
|
||||
|
||||
static struct attribute *fts_gesture_mode_attrs[] = {
|
||||
&dev_attr_fts_gesture_mode.attr,
|
||||
&dev_attr_fts_gesture_buf.attr,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group fts_gesture_group = {
|
||||
.attrs = fts_gesture_mode_attrs,
|
||||
};
|
||||
|
||||
static int fts_create_gesture_sysfs(struct device *dev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = sysfs_create_group(&dev->kobj, &fts_gesture_group);
|
||||
if (ret) {
|
||||
FTS_ERROR("gesture sys node create fail");
|
||||
sysfs_remove_group(&dev->kobj, &fts_gesture_group);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fts_gesture_report(struct input_dev *input_dev, int gesture_id)
|
||||
{
|
||||
int gesture;
|
||||
|
||||
FTS_DEBUG("gesture_id:0x%x", gesture_id);
|
||||
switch (gesture_id) {
|
||||
case GESTURE_LEFT:
|
||||
gesture = KEY_GESTURE_LEFT;
|
||||
break;
|
||||
case GESTURE_RIGHT:
|
||||
gesture = KEY_GESTURE_RIGHT;
|
||||
break;
|
||||
case GESTURE_UP:
|
||||
gesture = KEY_GESTURE_UP;
|
||||
break;
|
||||
case GESTURE_DOWN:
|
||||
gesture = KEY_GESTURE_DOWN;
|
||||
break;
|
||||
case GESTURE_DOUBLECLICK:
|
||||
gesture = KEY_GESTURE_U;
|
||||
break;
|
||||
case GESTURE_O:
|
||||
gesture = KEY_GESTURE_O;
|
||||
break;
|
||||
case GESTURE_W:
|
||||
gesture = KEY_GESTURE_W;
|
||||
break;
|
||||
case GESTURE_M:
|
||||
gesture = KEY_GESTURE_M;
|
||||
break;
|
||||
case GESTURE_E:
|
||||
gesture = KEY_GESTURE_E;
|
||||
break;
|
||||
case GESTURE_L:
|
||||
gesture = KEY_GESTURE_L;
|
||||
break;
|
||||
case GESTURE_S:
|
||||
gesture = KEY_GESTURE_S;
|
||||
break;
|
||||
case GESTURE_V:
|
||||
gesture = KEY_GESTURE_V;
|
||||
break;
|
||||
case GESTURE_Z:
|
||||
gesture = KEY_GESTURE_Z;
|
||||
break;
|
||||
case GESTURE_C:
|
||||
gesture = KEY_GESTURE_C;
|
||||
break;
|
||||
default:
|
||||
gesture = -1;
|
||||
break;
|
||||
}
|
||||
/* report event key */
|
||||
if (gesture != -1) {
|
||||
FTS_DEBUG("Gesture Code=%d", gesture);
|
||||
input_report_key(input_dev, gesture, 1);
|
||||
input_sync(input_dev);
|
||||
input_report_key(input_dev, gesture, 0);
|
||||
input_sync(input_dev);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: fts_gesture_readdata
|
||||
* Brief: Read information about gesture: enable flag/gesture points..., if ges-
|
||||
* ture enable, save gesture points' information, and report to OS.
|
||||
* It will be called this function every intrrupt when FTS_GESTURE_EN = 1
|
||||
*
|
||||
* gesture data length: 1(enable) + 1(reserve) + 2(header) + 6 * 4
|
||||
* Input: ts_data - global struct data
|
||||
* data - gesture data buffer if non-flash, else NULL
|
||||
* Output:
|
||||
* Return: 0 - read gesture data successfully, the report data is gesture data
|
||||
* 1 - tp not in suspend/gesture not enable in TP FW
|
||||
* -Exx - error
|
||||
*****************************************************************************/
|
||||
int fts_gesture_readdata(struct fts_ts_data *ts_data, u8 *data)
|
||||
{
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
int index = 0;
|
||||
u8 buf[FTS_GESTURE_DATA_LEN] = { 0 };
|
||||
struct input_dev *input_dev = ts_data->input_dev;
|
||||
struct fts_gesture_st *gesture = &fts_gesture_data;
|
||||
|
||||
if (!ts_data->suspended || !ts_data->gesture_mode) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
ret = fts_read_reg(FTS_REG_GESTURE_EN, &buf[0]);
|
||||
if ((ret < 0) || (buf[0] != ENABLE)) {
|
||||
FTS_DEBUG("gesture not enable in fw, don't process gesture");
|
||||
return 1;
|
||||
}
|
||||
|
||||
buf[2] = FTS_REG_GESTURE_OUTPUT_ADDRESS;
|
||||
ret = fts_read(&buf[2], 1, &buf[2], FTS_GESTURE_DATA_LEN - 2);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("read gesture header data fail");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* init variable before read gesture point */
|
||||
memset(gesture->coordinate_x, 0, FTS_GESTURE_POINTS_MAX * sizeof(u16));
|
||||
memset(gesture->coordinate_y, 0, FTS_GESTURE_POINTS_MAX * sizeof(u16));
|
||||
gesture->gesture_id = buf[2];
|
||||
gesture->point_num = buf[3];
|
||||
FTS_DEBUG("gesture_id=%d, point_num=%d",
|
||||
gesture->gesture_id, gesture->point_num);
|
||||
|
||||
/* save point data,max:6 */
|
||||
for (i = 0; i < FTS_GESTURE_POINTS_MAX; i++) {
|
||||
index = 4 * i + 4;
|
||||
gesture->coordinate_x[i] = (u16)(((buf[0 + index] & 0x0F) << 8)
|
||||
+ buf[1 + index]);
|
||||
gesture->coordinate_y[i] = (u16)(((buf[2 + index] & 0x0F) << 8)
|
||||
+ buf[3 + index]);
|
||||
}
|
||||
|
||||
/* report gesture to OS */
|
||||
fts_gesture_report(input_dev, gesture->gesture_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void fts_gesture_recovery(struct fts_ts_data *ts_data)
|
||||
{
|
||||
if (ts_data->gesture_mode && ts_data->suspended) {
|
||||
FTS_DEBUG("gesture recovery...");
|
||||
fts_write_reg(0xD1, 0xFF);
|
||||
fts_write_reg(0xD2, 0xFF);
|
||||
fts_write_reg(0xD5, 0xFF);
|
||||
fts_write_reg(0xD6, 0xFF);
|
||||
fts_write_reg(0xD7, 0xFF);
|
||||
fts_write_reg(0xD8, 0xFF);
|
||||
fts_write_reg(FTS_REG_GESTURE_EN, ENABLE);
|
||||
}
|
||||
}
|
||||
|
||||
int fts_gesture_suspend(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int i = 0;
|
||||
u8 state = 0xFF;
|
||||
|
||||
FTS_FUNC_ENTER();
|
||||
if (enable_irq_wake(ts_data->irq)) {
|
||||
FTS_DEBUG("enable_irq_wake(irq:%d) fail", ts_data->irq);
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
fts_write_reg(0xD1, 0xFF);
|
||||
fts_write_reg(0xD2, 0xFF);
|
||||
fts_write_reg(0xD5, 0xFF);
|
||||
fts_write_reg(0xD6, 0xFF);
|
||||
fts_write_reg(0xD7, 0xFF);
|
||||
fts_write_reg(0xD8, 0xFF);
|
||||
fts_write_reg(FTS_REG_GESTURE_EN, ENABLE);
|
||||
msleep(1);
|
||||
fts_read_reg(FTS_REG_GESTURE_EN, &state);
|
||||
if (state == ENABLE)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i >= 5)
|
||||
FTS_ERROR("make IC enter into gesture(suspend) fail,state:%x", state);
|
||||
else
|
||||
FTS_INFO("Enter into gesture(suspend) successfully");
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_gesture_resume(struct fts_ts_data *ts_data)
|
||||
{
|
||||
int i = 0;
|
||||
u8 state = 0xFF;
|
||||
|
||||
FTS_FUNC_ENTER();
|
||||
if (disable_irq_wake(ts_data->irq)) {
|
||||
FTS_DEBUG("disable_irq_wake(irq:%d) fail", ts_data->irq);
|
||||
}
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
fts_write_reg(FTS_REG_GESTURE_EN, DISABLE);
|
||||
msleep(1);
|
||||
fts_read_reg(FTS_REG_GESTURE_EN, &state);
|
||||
if (state == DISABLE)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i >= 5)
|
||||
FTS_ERROR("make IC exit gesture(resume) fail,state:%x", state);
|
||||
else
|
||||
FTS_INFO("resume from gesture successfully");
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_gesture_init(struct fts_ts_data *ts_data)
|
||||
{
|
||||
struct input_dev *input_dev = ts_data->input_dev;
|
||||
|
||||
FTS_FUNC_ENTER();
|
||||
input_set_capability(input_dev, EV_KEY, KEY_POWER);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_U);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_UP);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_DOWN);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_LEFT);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_RIGHT);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_O);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_E);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_M);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_L);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_W);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_S);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_V);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_Z);
|
||||
input_set_capability(input_dev, EV_KEY, KEY_GESTURE_C);
|
||||
|
||||
__set_bit(KEY_GESTURE_RIGHT, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_LEFT, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_UP, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_DOWN, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_U, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_O, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_E, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_M, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_W, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_L, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_S, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_V, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_C, input_dev->keybit);
|
||||
__set_bit(KEY_GESTURE_Z, input_dev->keybit);
|
||||
|
||||
fts_create_gesture_sysfs(ts_data->dev);
|
||||
|
||||
memset(&fts_gesture_data, 0, sizeof(struct fts_gesture_st));
|
||||
ts_data->gesture_mode = FTS_GESTURE_EN;
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_gesture_exit(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
sysfs_remove_group(&ts_data->dev->kobj, &fts_gesture_group);
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
193
drivers/input/touchscreen/ft3519/focaltech_i2c.c
Normal file
193
drivers/input/touchscreen/ft3519/focaltech_i2c.c
Normal file
|
@ -0,0 +1,193 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, FocalTech Systems, Ltd., all rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/************************************************************************
|
||||
*
|
||||
* File Name: focaltech_i2c.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-04
|
||||
*
|
||||
* Abstract: i2c communication with TP
|
||||
*
|
||||
* Version: v1.0
|
||||
*
|
||||
* Revision History:
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Included header files
|
||||
*****************************************************************************/
|
||||
#include "focaltech_core.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define I2C_RETRY_NUMBER 3
|
||||
#define I2C_BUF_LENGTH 256
|
||||
|
||||
/*****************************************************************************
|
||||
* Private enumerations, structures and unions using typedef
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Static variables
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Static function prototypes
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* functions body
|
||||
*****************************************************************************/
|
||||
int fts_read(u8 *cmd, u32 cmdlen, u8 *data, u32 datalen)
|
||||
{
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
struct i2c_msg msg_list[2];
|
||||
struct i2c_msg *msg = NULL;
|
||||
int msg_num = 0;
|
||||
|
||||
/* must have data when read */
|
||||
if (!ts_data || !ts_data->client || !data || !datalen
|
||||
|| (datalen > I2C_BUF_LENGTH) || (cmdlen > I2C_BUF_LENGTH)) {
|
||||
FTS_ERROR("fts_data/client/cmdlen(%d)/data/datalen(%d) is invalid",
|
||||
cmdlen, datalen);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&ts_data->bus_lock);
|
||||
memset(&msg_list[0], 0, sizeof(struct i2c_msg));
|
||||
memset(&msg_list[1], 0, sizeof(struct i2c_msg));
|
||||
memcpy(ts_data->bus_tx_buf, cmd, cmdlen);
|
||||
msg_list[0].addr = ts_data->client->addr;
|
||||
msg_list[0].flags = 0;
|
||||
msg_list[0].len = cmdlen;
|
||||
msg_list[0].buf = ts_data->bus_tx_buf;
|
||||
msg_list[1].addr = ts_data->client->addr;
|
||||
msg_list[1].flags = I2C_M_RD;
|
||||
msg_list[1].len = datalen;
|
||||
msg_list[1].buf = ts_data->bus_rx_buf;
|
||||
if (cmd && cmdlen) {
|
||||
msg = &msg_list[0];
|
||||
msg_num = 2;
|
||||
} else {
|
||||
msg = &msg_list[1];
|
||||
msg_num = 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < I2C_RETRY_NUMBER; i++) {
|
||||
ret = i2c_transfer(ts_data->client->adapter, msg, msg_num);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("i2c_transfer(read) fail,ret:%d", ret);
|
||||
} else {
|
||||
memcpy(data, ts_data->bus_rx_buf, datalen);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&ts_data->bus_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int fts_write(u8 *writebuf, u32 writelen)
|
||||
{
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
struct fts_ts_data *ts_data = fts_data;
|
||||
struct i2c_msg msgs;
|
||||
|
||||
if (!ts_data || !ts_data->client || !writebuf || !writelen
|
||||
|| (writelen > I2C_BUF_LENGTH)) {
|
||||
FTS_ERROR("fts_data/client/data/datalen(%d) is invalid", writelen);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&ts_data->bus_lock);
|
||||
memset(&msgs, 0, sizeof(struct i2c_msg));
|
||||
memcpy(ts_data->bus_tx_buf, writebuf, writelen);
|
||||
msgs.addr = ts_data->client->addr;
|
||||
msgs.flags = 0;
|
||||
msgs.len = writelen;
|
||||
msgs.buf = ts_data->bus_tx_buf;
|
||||
for (i = 0; i < I2C_RETRY_NUMBER; i++) {
|
||||
ret = i2c_transfer(ts_data->client->adapter, &msgs, 1);
|
||||
if (ret < 0) {
|
||||
FTS_ERROR("i2c_transfer(write) fail,ret:%d", ret);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&ts_data->bus_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int fts_read_reg(u8 addr, u8 *value)
|
||||
{
|
||||
return fts_read(&addr, 1, value, 1);
|
||||
}
|
||||
|
||||
int fts_write_reg(u8 addr, u8 value)
|
||||
{
|
||||
u8 buf[2] = { 0 };
|
||||
|
||||
buf[0] = addr;
|
||||
buf[1] = value;
|
||||
return fts_write(buf, sizeof(buf));
|
||||
}
|
||||
|
||||
int fts_bus_init(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
ts_data->bus_tx_buf = kzalloc(I2C_BUF_LENGTH, GFP_KERNEL);
|
||||
if (NULL == ts_data->bus_tx_buf) {
|
||||
FTS_ERROR("failed to allocate memory for bus_tx_buf");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
ts_data->bus_rx_buf = kzalloc(I2C_BUF_LENGTH, GFP_KERNEL);
|
||||
if (NULL == ts_data->bus_rx_buf) {
|
||||
FTS_ERROR("failed to allocate memory for bus_rx_buf");
|
||||
return -ENOMEM;
|
||||
}
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fts_bus_exit(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
if (ts_data && ts_data->bus_tx_buf) {
|
||||
kfree(ts_data->bus_tx_buf);
|
||||
ts_data->bus_tx_buf = NULL;
|
||||
}
|
||||
|
||||
if (ts_data && ts_data->bus_rx_buf) {
|
||||
kfree(ts_data->bus_rx_buf);
|
||||
ts_data->bus_rx_buf = NULL;
|
||||
}
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
129
drivers/input/touchscreen/ft3519/focaltech_point_report_check.c
Normal file
129
drivers/input/touchscreen/ft3519/focaltech_point_report_check.c
Normal file
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
*
|
||||
* FocalTech TouchScreen driver.
|
||||
*
|
||||
* Copyright (c) 2012-2020, FocalTech Systems, Ltd., all rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
*
|
||||
* File Name: focaltech_point_report_check.c
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-11-16
|
||||
*
|
||||
* Abstract: point report check function
|
||||
*
|
||||
* Version: v1.0
|
||||
*
|
||||
* Revision History:
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Included header files
|
||||
*****************************************************************************/
|
||||
#include "focaltech_core.h"
|
||||
|
||||
#if FTS_POINT_REPORT_CHECK_EN
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define POINT_REPORT_CHECK_WAIT_TIME 200 /* unit:ms */
|
||||
#define PRC_INTR_INTERVALS 100 /* unit:ms */
|
||||
|
||||
/*****************************************************************************
|
||||
* functions body
|
||||
*****************************************************************************/
|
||||
/*****************************************************************************
|
||||
* Name: fts_prc_func
|
||||
* Brief: fts point report check work func, report whole up of points
|
||||
* Input:
|
||||
* Output:
|
||||
* Return:
|
||||
*****************************************************************************/
|
||||
static void fts_prc_func(struct work_struct *work)
|
||||
{
|
||||
struct fts_ts_data *ts_data = container_of(work,
|
||||
struct fts_ts_data, prc_work.work);
|
||||
unsigned long cur_jiffies = jiffies;
|
||||
unsigned long intr_timeout = msecs_to_jiffies(PRC_INTR_INTERVALS);
|
||||
|
||||
intr_timeout += ts_data->intr_jiffies;
|
||||
if (time_after(cur_jiffies, intr_timeout)) {
|
||||
fts_release_all_finger();
|
||||
ts_data->prc_mode = 0;
|
||||
//FTS_DEBUG("interval:%lu", (cur_jiffies - ts_data->intr_jiffies) * 1000 / HZ);
|
||||
} else {
|
||||
queue_delayed_work(ts_data->ts_workqueue, &ts_data->prc_work,
|
||||
msecs_to_jiffies(POINT_REPORT_CHECK_WAIT_TIME));
|
||||
ts_data->prc_mode = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: fts_prc_queue_work
|
||||
* Brief: fts point report check queue work, call it when interrupt comes
|
||||
* Input:
|
||||
* Output:
|
||||
* Return:
|
||||
*****************************************************************************/
|
||||
void fts_prc_queue_work(struct fts_ts_data *ts_data)
|
||||
{
|
||||
ts_data->intr_jiffies = jiffies;
|
||||
if (!ts_data->prc_mode) {
|
||||
queue_delayed_work(ts_data->ts_workqueue, &ts_data->prc_work,
|
||||
msecs_to_jiffies(POINT_REPORT_CHECK_WAIT_TIME));
|
||||
ts_data->prc_mode = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: fts_point_report_check_init
|
||||
* Brief:
|
||||
* Input:
|
||||
* Output:
|
||||
* Return: < 0: Fail to create esd check queue
|
||||
*****************************************************************************/
|
||||
int fts_point_report_check_init(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
|
||||
if (ts_data->ts_workqueue) {
|
||||
INIT_DELAYED_WORK(&ts_data->prc_work, fts_prc_func);
|
||||
} else {
|
||||
FTS_ERROR("fts workqueue is NULL, can't run point report check function");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Name: fts_point_report_check_exit
|
||||
* Brief:
|
||||
* Input:
|
||||
* Output:
|
||||
* Return:
|
||||
*****************************************************************************/
|
||||
int fts_point_report_check_exit(struct fts_ts_data *ts_data)
|
||||
{
|
||||
FTS_FUNC_ENTER();
|
||||
|
||||
FTS_FUNC_EXIT();
|
||||
return 0;
|
||||
}
|
||||
#endif /* FTS_POINT_REPORT_CHECK_EN */
|
||||
|
3
drivers/input/touchscreen/ft3519/focaltech_test/Makefile
Normal file
3
drivers/input/touchscreen/ft3519/focaltech_test/Makefile
Normal file
|
@ -0,0 +1,3 @@
|
|||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_test.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_test_ini.o
|
||||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += supported_ic/
|
2228
drivers/input/touchscreen/ft3519/focaltech_test/focaltech_test.c
Normal file
2228
drivers/input/touchscreen/ft3519/focaltech_test/focaltech_test.c
Normal file
File diff suppressed because it is too large
Load diff
648
drivers/input/touchscreen/ft3519/focaltech_test/focaltech_test.h
Normal file
648
drivers/input/touchscreen/ft3519/focaltech_test/focaltech_test.h
Normal file
|
@ -0,0 +1,648 @@
|
|||
/************************************************************************
|
||||
* Copyright (c) 2012-2020, FocalTech Systems, Ltd., all rights reserved.
|
||||
*
|
||||
* File Name: focaltech_test.h
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-01
|
||||
*
|
||||
* Abstract: test entry for all IC
|
||||
*
|
||||
************************************************************************/
|
||||
#ifndef _TEST_LIB_H
|
||||
#define _TEST_LIB_H
|
||||
|
||||
/*****************************************************************************
|
||||
* Included header files
|
||||
*****************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <linux/i2c.h>//iic
|
||||
#include <linux/delay.h>//msleep
|
||||
#include <linux/string.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/time.h>
|
||||
#include "../focaltech_core.h"
|
||||
#include "focaltech_test_ini.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* Macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define FTS_INI_FILE_PATH "/mnt/sdcard/"
|
||||
#define FTS_CSV_FILE_NAME "testdata.csv"
|
||||
#define FTS_TXT_FILE_NAME "testresult.txt"
|
||||
#define false 0
|
||||
#define true 1
|
||||
#define TEST_ICSERIES_LEN (8)
|
||||
#define TEST_ICSERIES(x) ((x) >> TEST_ICSERIES_LEN)
|
||||
|
||||
#define TEST_OPEN_MAX_VALUE (255)
|
||||
#define BYTES_PER_TIME (32) /* max:128 */
|
||||
/* CSV & TXT */
|
||||
#define CSV_LINE2_BUFFER_LEN (1024)
|
||||
#define CSV_BUFFER_LEN (1024*80*5)
|
||||
#define TXT_BUFFER_LEN (1024*80*5)
|
||||
|
||||
#define TEST_SAVE_FAIL_RESULT 0
|
||||
|
||||
/*-----------------------------------------------------------
|
||||
Test Status
|
||||
-----------------------------------------------------------*/
|
||||
#define RESULT_NULL 0
|
||||
#define RESULT_PASS 1
|
||||
#define RESULT_NG 2
|
||||
|
||||
#define TX_NUM_MAX 60
|
||||
#define RX_NUM_MAX 100
|
||||
#define SC_NUM_MAX ((TX_NUM_MAX) + (RX_NUM_MAX))
|
||||
#define NUM_MAX_SC (144)
|
||||
#define KEY_NUM_MAX 6
|
||||
#define TEST_ITEM_COUNT_MAX 32
|
||||
#define TEST_ITEM_NAME_MAX 32
|
||||
#define TEST_SHORT_RES_MAX 0xFFFF
|
||||
|
||||
/*
|
||||
* factory test registers
|
||||
*/
|
||||
#define ENTER_WORK_FACTORY_RETRIES 5
|
||||
|
||||
#define START_SCAN_RETRIES_INCELL 20
|
||||
#define START_SCAN_RETRIES_DELAY_INCELL 16
|
||||
#define FACTORY_TEST_RETRY 50
|
||||
#define FACTORY_TEST_DELAY 18
|
||||
#define FACTORY_TEST_RETRY_DELAY 100
|
||||
|
||||
#define DEVIDE_MODE_ADDR 0x00
|
||||
#define REG_FW_VERSION 0xA6
|
||||
#define REG_VA_TOUCH_THR 0x80
|
||||
#define REG_VKEY_TOUCH_THR 0x82
|
||||
|
||||
#define FACTORY_REG_LINE_ADDR 0x01
|
||||
#define FACTORY_REG_CHX_NUM 0x02
|
||||
#define FACTORY_REG_CHY_NUM 0x03
|
||||
#define FACTORY_REG_CLB 0x04
|
||||
#define FACTORY_REG_DATA_SELECT 0x06
|
||||
#define FACTORY_REG_RAWBUF_SELECT 0x09
|
||||
#define FACTORY_REG_KEY_CBWIDTH 0x0B
|
||||
#define FACTORY_REG_PARAM_UPDATE_STATE 0x0E
|
||||
#define FACTORY_REG_SHORT_TEST_EN 0x0F
|
||||
#define FACTORY_REG_SHORT_TEST_STATE 0x10
|
||||
#define FACTORY_REG_LCD_NOISE_START 0x11
|
||||
#define FACTORY_REG_LCD_NOISE_FRAME 0x12
|
||||
#define FACTORY_REG_LCD_NOISE_TEST_STATE 0x13
|
||||
#define FACTORY_REG_LCD_NOISE_TTHR 0x14
|
||||
#define FACTORY_REG_OPEN_START 0x15
|
||||
#define FACTORY_REG_OPEN_STATE 0x16
|
||||
#define FACTORY_REG_OPEN_ADDR 0xCF
|
||||
#define FACTORY_REG_OPEN_IDLE 0x03
|
||||
#define FACTORY_REG_OPEN_BUSY 0x01
|
||||
#define FACTORY_REG_CB_ADDR_H 0x18
|
||||
#define FACTORY_REG_CB_ADDR_L 0x19
|
||||
#define FACTORY_REG_ORDER_ADDR_H 0x1A
|
||||
#define FACTORY_REG_ORDER_ADDR_L 0x1B
|
||||
#define FACTORY_REG_LCD_NOISE_STATE 0x1E
|
||||
#define FACTORY_REG_KEYSHORT_EN 0x2E
|
||||
#define FACTORY_REG_KEYSHORT_STATE 0x2F
|
||||
|
||||
#define FACTORY_REG_LEFT_KEY 0x1E
|
||||
#define FACTORY_REG_RIGHT_KEY 0x1F
|
||||
#define FACTORY_REG_OPEN_REG20 0x20
|
||||
#define FACTORY_REG_OPEN_REG21 0x21
|
||||
#define FACTORY_REG_OPEN_REG22 0x22
|
||||
#define FACTORY_REG_OPEN_REG23 0x23
|
||||
#define FACTORY_REG_OPEN_REG2E 0x2E
|
||||
#define FACTORY_REG_OPEN_REG86 0x86
|
||||
#define FACTORY_REG_K1 0x31
|
||||
#define FACTORY_REG_K2 0x32
|
||||
#define FACTORY_REG_RAWDATA_ADDR 0x6A
|
||||
#define FACTORY_REG_ORDER_ADDR 0x6C
|
||||
#define FACTORY_REG_CB_ADDR 0x6E
|
||||
#define FACTORY_REG_SHORT_ADDR 0x89
|
||||
#define FACTORY_REG_RAWDATA_TEST_EN 0x9E
|
||||
#define FACTORY_REG_CB_TEST_EN 0x9F
|
||||
#define FACTORY_REG_OPEN_TEST_EN 0xA0
|
||||
#define FACTORY_REG_RAWDATA_TARGET 0xCA
|
||||
|
||||
|
||||
/* mc_sc */
|
||||
#define FACTORY_REG_FRE_LIST 0x0A
|
||||
#define FACTORY_REG_DATA_TYPE 0x5B
|
||||
#define FACTORY_REG_NORMALIZE 0x16
|
||||
#define FACTORY_REG_RAWDATA_ADDR_MC_SC 0x36
|
||||
#define FACTORY_REG_PATTERN 0x53
|
||||
#define FACTORY_REG_NOMAPPING 0x54
|
||||
#define FACTORY_REG_CHX_NUM_NOMAP 0x55
|
||||
#define FACTORY_REG_CHY_NUM_NOMAP 0x56
|
||||
#define FACTORY_REG_WC_SEL 0x09
|
||||
#define FACTORY_REG_HC_SEL 0x0F
|
||||
#define FACTORY_REG_MC_SC_MODE 0x44
|
||||
#define FACTORY_REG_MC_SC_CB_ADDR_OFF 0x45
|
||||
#define FACTORY_REG_MC_SC_CB_H_ADDR_OFF 0x49
|
||||
#define FACTORY_REG_MC_SC_CB_ADDR 0x4E
|
||||
#define FACTROY_REG_SHORT_TEST_EN 0x07
|
||||
#define FACTROY_REG_SHORT_CA 0x01
|
||||
#define FACTROY_REG_SHORT_CC 0x02
|
||||
#define FACTROY_REG_SHORT_CG 0x03
|
||||
#define FACTROY_REG_SHORT_OFFSET 0x04
|
||||
#define FACTROY_REG_SHORT_AB_CH 0x58
|
||||
#define FACTROY_REG_SHORT_RES_LEVEL 0x5A
|
||||
#define FACTORY_REG_SHORT_ADDR_MC 0xF4
|
||||
#define FACTORY_REG_FIR 0xFB
|
||||
|
||||
#define FACTROY_REG_SHORT2_TEST_EN 0xC0
|
||||
#define FACTROY_REG_SHORT2_CA 0x01
|
||||
#define FACTROY_REG_SHORT2_CC 0x02
|
||||
#define FACTROY_REG_SHORT2_CG 0x03
|
||||
#define FACTROY_REG_SHORT2_OFFSET 0x04
|
||||
#define FACTROY_REG_SHORT2_RES_LEVEL 0xC1
|
||||
#define FACTROY_REG_SHORT2_DEALY 0xC2
|
||||
#define FACTROY_REG_SHORT2_TEST_STATE 0xC3
|
||||
#define FACTORY_REG_SHORT2_ADDR_MC 0xC4
|
||||
#define FACTROY_REG_SHORT2_AB_CH 0xC6
|
||||
|
||||
/* sc */
|
||||
#define FACTORY_REG_SCAN_ADDR2 0x08
|
||||
#define FACTORY_REG_CH_NUM_SC 0x0A
|
||||
#define FACTORY_REG_KEY_NUM_SC 0x0B
|
||||
#define FACTORY_REG_SC_CB_ADDR_OFF 0x33
|
||||
#define FACTORY_REG_SC_CB_ADDR 0x39
|
||||
#define FACTORY_REG_RAWDATA_SADDR_SC 0x34
|
||||
#define FACTORY_REG_RAWDATA_ADDR_SC 0x35
|
||||
#define FACTORY_REG_CB_SEL 0x41
|
||||
#define FACTORY_REG_FMODE 0xAE
|
||||
|
||||
#define TEST_RETVAL_00 0x00
|
||||
#define TEST_RETVAL_AA 0xAA
|
||||
|
||||
#define FTS_MAX_SORT_SC 32768
|
||||
#define FTS_MIN_SORT_SC 0
|
||||
|
||||
/*****************************************************************************
|
||||
* enumerations, structures and unions
|
||||
*****************************************************************************/
|
||||
struct item_info {
|
||||
char name[TEST_ITEM_NAME_MAX];
|
||||
int code;
|
||||
int *data;
|
||||
int datalen;
|
||||
int result;
|
||||
int mc_sc;
|
||||
int key_support;
|
||||
};
|
||||
|
||||
struct fts_test_data {
|
||||
int item_count;
|
||||
struct item_info info[TEST_ITEM_COUNT_MAX];
|
||||
};
|
||||
|
||||
/* incell */
|
||||
struct incell_testitem {
|
||||
u32 short_test : 1;
|
||||
u32 open_test : 1;
|
||||
u32 cb_test : 1;
|
||||
u32 rawdata_test : 1;
|
||||
u32 lcdnoise_test : 1;
|
||||
u32 keyshort_test : 1;
|
||||
u32 mux_open_test : 1;
|
||||
};
|
||||
|
||||
struct incell_threshold_b {
|
||||
int short_res_min;
|
||||
int short_res_vk_min;
|
||||
int open_cb_min;
|
||||
int open_k1_check;
|
||||
int open_k1_value;
|
||||
int open_k2_check;
|
||||
int open_k2_value;
|
||||
int cb_min;
|
||||
int cb_max;
|
||||
int cb_vkey_check;
|
||||
int cb_min_vk;
|
||||
int cb_max_vk;
|
||||
int rawdata_min;
|
||||
int rawdata_max;
|
||||
int rawdata_vkey_check;
|
||||
int rawdata_min_vk;
|
||||
int rawdata_max_vk;
|
||||
int lcdnoise_frame;
|
||||
int lcdnoise_coefficient;
|
||||
int lcdnoise_coefficient_vkey;
|
||||
int open_diff_min;
|
||||
int open_nmos;
|
||||
int keyshort_k1;
|
||||
int keyshort_cb_max;
|
||||
int rawdata2_min;
|
||||
int rawdata2_max;
|
||||
int mux_open_cb_min;
|
||||
int open_delta_V;
|
||||
};
|
||||
|
||||
struct incell_threshold {
|
||||
struct incell_threshold_b basic;
|
||||
int *rawdata_min;
|
||||
int *rawdata_max;
|
||||
int *rawdata2_min;
|
||||
int *rawdata2_max;
|
||||
int *cb_min;
|
||||
int *cb_max;
|
||||
};
|
||||
|
||||
struct incell_test {
|
||||
struct incell_threshold thr;
|
||||
union {
|
||||
int tmp;
|
||||
struct incell_testitem item;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* mc_sc */
|
||||
enum mapping_type {
|
||||
MAPPING = 0,
|
||||
NO_MAPPING = 1,
|
||||
};
|
||||
|
||||
struct mc_sc_testitem {
|
||||
u32 rawdata_test : 1;
|
||||
u32 rawdata_uniformity_test : 1;
|
||||
u32 scap_cb_test : 1;
|
||||
u32 scap_rawdata_test : 1;
|
||||
u32 short_test : 1;
|
||||
u32 panel_differ_test : 1;
|
||||
};
|
||||
|
||||
struct mc_sc_threshold_b {
|
||||
int rawdata_h_min;
|
||||
int rawdata_h_max;
|
||||
int rawdata_set_hfreq;
|
||||
int rawdata_l_min;
|
||||
int rawdata_l_max;
|
||||
int rawdata_set_lfreq;
|
||||
int uniformity_check_tx;
|
||||
int uniformity_check_rx;
|
||||
int uniformity_check_min_max;
|
||||
int uniformity_tx_hole;
|
||||
int uniformity_rx_hole;
|
||||
int uniformity_min_max_hole;
|
||||
int scap_cb_off_min;
|
||||
int scap_cb_off_max;
|
||||
int scap_cb_wp_off_check;
|
||||
int scap_cb_on_min;
|
||||
int scap_cb_on_max;
|
||||
int scap_cb_wp_on_check;
|
||||
int scap_rawdata_off_min;
|
||||
int scap_rawdata_off_max;
|
||||
int scap_rawdata_wp_off_check;
|
||||
int scap_rawdata_on_min;
|
||||
int scap_rawdata_on_max;
|
||||
int scap_rawdata_wp_on_check;
|
||||
int short_cg;
|
||||
int short_cc;
|
||||
int panel_differ_min;
|
||||
int panel_differ_max;
|
||||
int scap_cb_hi_min;
|
||||
int scap_cb_hi_max;
|
||||
int scap_cb_hi_check;
|
||||
int scap_rawdata_hi_min;
|
||||
int scap_rawdata_hi_max;
|
||||
int scap_rawdata_hi_check;
|
||||
int scap_cb_hov_min;
|
||||
int scap_cb_hov_max;
|
||||
int scap_cb_hov_check;
|
||||
int scap_rawdata_hov_min;
|
||||
int scap_rawdata_hov_max;
|
||||
int scap_rawdata_hov_check;
|
||||
};
|
||||
|
||||
struct mc_sc_threshold {
|
||||
struct mc_sc_threshold_b basic;
|
||||
int *rawdata_h_min;
|
||||
int *rawdata_h_max;
|
||||
int *rawdata_l_min;
|
||||
int *rawdata_l_max;
|
||||
int *tx_linearity_max;
|
||||
int *tx_linearity_min;
|
||||
int *rx_linearity_max;
|
||||
int *rx_linearity_min;
|
||||
int *scap_cb_off_min;
|
||||
int *scap_cb_off_max;
|
||||
int *scap_cb_on_min;
|
||||
int *scap_cb_on_max;
|
||||
int *scap_cb_hi_min;
|
||||
int *scap_cb_hi_max;
|
||||
int *scap_cb_hov_min;
|
||||
int *scap_cb_hov_max;
|
||||
int *scap_rawdata_off_min;
|
||||
int *scap_rawdata_off_max;
|
||||
int *scap_rawdata_on_min;
|
||||
int *scap_rawdata_on_max;
|
||||
int *scap_rawdata_hi_min;
|
||||
int *scap_rawdata_hi_max;
|
||||
int *scap_rawdata_hov_min;
|
||||
int *scap_rawdata_hov_max;
|
||||
int *panel_differ_min;
|
||||
int *panel_differ_max;
|
||||
};
|
||||
|
||||
struct mc_sc_test {
|
||||
struct mc_sc_threshold thr;
|
||||
union {
|
||||
u32 tmp;
|
||||
struct mc_sc_testitem item;
|
||||
} u;
|
||||
};
|
||||
|
||||
/* sc */
|
||||
struct sc_testitem {
|
||||
u32 rawdata_test : 1;
|
||||
u32 cb_test : 1;
|
||||
u32 delta_cb_test : 1;
|
||||
u32 short_test : 1;
|
||||
};
|
||||
|
||||
struct sc_threshold_b {
|
||||
int rawdata_min;
|
||||
int rawdata_max;
|
||||
int cb_min;
|
||||
int cb_max;
|
||||
int dcb_base;
|
||||
int dcb_differ_max;
|
||||
int dcb_key_check;
|
||||
int dcb_key_differ_max;
|
||||
int dcb_ds1;
|
||||
int dcb_ds2;
|
||||
int dcb_ds3;
|
||||
int dcb_ds4;
|
||||
int dcb_ds5;
|
||||
int dcb_ds6;
|
||||
int dcb_critical_check;
|
||||
int dcb_cs1;
|
||||
int dcb_cs2;
|
||||
int dcb_cs3;
|
||||
int dcb_cs4;
|
||||
int dcb_cs5;
|
||||
int dcb_cs6;
|
||||
int short_min;
|
||||
};
|
||||
|
||||
struct sc_threshold {
|
||||
struct sc_threshold_b basic;
|
||||
int *rawdata_min;
|
||||
int *rawdata_max;
|
||||
int *cb_min;
|
||||
int *cb_max;
|
||||
int *dcb_sort;
|
||||
int *dcb_base;
|
||||
};
|
||||
|
||||
struct sc_test {
|
||||
struct sc_threshold thr;
|
||||
union {
|
||||
u32 tmp;
|
||||
struct sc_testitem item;
|
||||
} u;
|
||||
};
|
||||
|
||||
enum test_hw_type {
|
||||
IC_HW_INCELL = 1,
|
||||
IC_HW_MC_SC,
|
||||
IC_HW_SC,
|
||||
};
|
||||
|
||||
enum test_scan_mode {
|
||||
SCAN_NORMAL = 0,
|
||||
SCAN_SC,
|
||||
};
|
||||
|
||||
struct fts_test_node {
|
||||
int channel_num;
|
||||
int tx_num;
|
||||
int rx_num;
|
||||
int node_num;
|
||||
int key_num;
|
||||
};
|
||||
|
||||
struct fts_test {
|
||||
struct fts_ts_data *ts_data;
|
||||
struct fts_test_node node;
|
||||
struct fts_test_node sc_node;
|
||||
u8 fw_ver;
|
||||
u8 va_touch_thr;
|
||||
u8 vk_touch_thr;
|
||||
bool key_support;
|
||||
bool v3_pattern;
|
||||
u8 mapping;
|
||||
u8 normalize;
|
||||
int test_num;
|
||||
int *buffer;
|
||||
int buffer_length;
|
||||
int *node_valid;
|
||||
int *node_valid_sc;
|
||||
int basic_thr_count;
|
||||
int code1;
|
||||
int code2;
|
||||
int offset;
|
||||
union {
|
||||
struct incell_test incell;
|
||||
struct mc_sc_test mc_sc;
|
||||
struct sc_test sc;
|
||||
} ic;
|
||||
|
||||
struct test_funcs *func;
|
||||
struct fts_test_data testdata;
|
||||
char *testresult;
|
||||
int testresult_len;
|
||||
int result;
|
||||
#if defined(TEST_SAVE_FAIL_RESULT) && TEST_SAVE_FAIL_RESULT
|
||||
struct timeval tv;
|
||||
#endif
|
||||
struct ini_data ini;
|
||||
};
|
||||
|
||||
struct test_funcs {
|
||||
u16 ctype[FTS_MAX_COMPATIBLE_TYPE];
|
||||
enum test_hw_type hwtype;
|
||||
int startscan_mode;
|
||||
int key_num_total;
|
||||
bool rawdata2_support;
|
||||
bool force_touch;
|
||||
bool mc_sc_short_v2;
|
||||
bool raw_u16;
|
||||
bool cb_high_support;
|
||||
int (*param_init)(void);
|
||||
int (*init)(void);
|
||||
int (*start_test)(void);
|
||||
};
|
||||
|
||||
enum byte_mode {
|
||||
DATA_ONE_BYTE,
|
||||
DATA_TWO_BYTE,
|
||||
};
|
||||
/* mc_sc */
|
||||
enum normalize_type {
|
||||
NORMALIZE_OVERALL,
|
||||
NORMALIZE_AUTO,
|
||||
};
|
||||
|
||||
enum wp_type {
|
||||
WATER_PROOF_OFF = 0,
|
||||
WATER_PROOF_ON = 1,
|
||||
HIGH_SENSITIVITY = 2,
|
||||
HOV = 3,
|
||||
WATER_PROOF_ON_TX = 100,
|
||||
WATER_PROOF_ON_RX,
|
||||
WATER_PROOF_OFF_TX,
|
||||
WATER_PROOF_OFF_RX,
|
||||
};
|
||||
/* mc end */
|
||||
|
||||
/* sc */
|
||||
enum factory_mode {
|
||||
FACTORY_NORMAL,
|
||||
FACTORY_TESTMODE_1,
|
||||
FACTORY_TESTMODE_2,
|
||||
};
|
||||
|
||||
enum dcb_sort_num {
|
||||
DCB_SORT_MIN = 1,
|
||||
DCB_SORT_MAX = 6,
|
||||
};
|
||||
|
||||
struct dcb_sort_d {
|
||||
int ch_num;
|
||||
int deviation;
|
||||
int critical;
|
||||
int min;
|
||||
int max;
|
||||
};
|
||||
/* sc end */
|
||||
|
||||
enum csv_itemcode_incell {
|
||||
CODE_ENTER_FACTORY_MODE = 0,
|
||||
CODE_RAWDATA_TEST = 7,
|
||||
CODE_CB_TEST = 12,
|
||||
CODE_SHORT_TEST = 15,
|
||||
CODE_OPEN_TEST = 25,
|
||||
CODE_LCD_NOISE_TEST = 27,
|
||||
CODE_MUX_OPEN_TEST = 41,
|
||||
};
|
||||
|
||||
enum csv_itemcode_mc_sc {
|
||||
CODE_M_RAWDATA_TEST = 7,
|
||||
CODE_M_SCAP_CB_TEST = 9,
|
||||
CODE_M_SCAP_RAWDATA_TEST = 10,
|
||||
CODE_M_WEAK_SHORT_CIRCUIT_TEST = 15,
|
||||
CODE_M_RAWDATA_UNIFORMITY_TEST = 16,
|
||||
CODE_M_PANELDIFFER_TEST = 20,
|
||||
};
|
||||
|
||||
enum csv_itemcode_sc {
|
||||
CODE_S_RAWDATA_TEST = 7,
|
||||
CODE_S_CB_TEST = 13,
|
||||
CODE_S_DCB_TEST = 14,
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
extern struct test_funcs test_func_ft5452i;
|
||||
|
||||
extern struct fts_test *fts_ftest;
|
||||
|
||||
void sys_delay(int ms);
|
||||
int fts_abs(int value);
|
||||
void print_buffer(int *buffer, int length, int line_num);
|
||||
int fts_test_read_reg(u8 addr, u8 *val);
|
||||
int fts_test_write_reg(u8 addr, u8 val);
|
||||
int fts_test_read(u8 addr, u8 *readbuf, int readlen);
|
||||
int fts_test_write(u8 addr, u8 *writebuf, int writelen);
|
||||
int enter_work_mode(void);
|
||||
int enter_factory_mode(void);
|
||||
int read_mass_data(u8 addr, int byte_num, int *buf);
|
||||
int chip_clb(void);
|
||||
int wait_state_update(u8 retval);
|
||||
int get_cb_incell(u16 saddr, int byte_num, int *cb_buf);
|
||||
int short_get_adcdata_incell(u8 retval, u8 ch_num, int byte_num, int *adc_buf);
|
||||
int start_scan(void);
|
||||
int get_rawdata(int *data);
|
||||
int get_cb_sc(int byte_num, int *cb_buf, enum byte_mode mode);
|
||||
bool compare_data(int *data, int min, int max, int min_vk, int max_vk, bool key);
|
||||
bool compare_array(int *data, int *min, int *max, bool key);
|
||||
void show_data(int *data, bool key);
|
||||
/* mc_sc */
|
||||
int mapping_switch(u8 mapping);
|
||||
bool get_fw_wp(u8 wp_channel_select, enum wp_type water_proof_type);
|
||||
int get_cb_mc_sc(u8 wp, int byte_num, int *cb_buf, enum byte_mode mode);
|
||||
int get_rawdata_mc_sc(enum wp_type wp, int *data);
|
||||
int get_rawdata_mc(u8 fre, u8 fir, int *rawdata);
|
||||
int short_get_adc_data_mc(u8 retval, int byte_num, int *adc_buf, u8 mode);
|
||||
bool compare_mc_sc(bool, bool, int *, int *, int *);
|
||||
void show_data_mc_sc(int *data);
|
||||
void *fts_malloc(size_t size);
|
||||
void fts_free_proc(void *p);
|
||||
void fts_test_save_data(char *name, int code, int *data, int datacnt,
|
||||
bool mc_sc, bool key, bool result);
|
||||
|
||||
#define fts_malloc_r(p, size) do {\
|
||||
if (NULL == p) {\
|
||||
p = fts_malloc(size);\
|
||||
if (NULL == p) {\
|
||||
return -ENOMEM;\
|
||||
}\
|
||||
}\
|
||||
} while(0)
|
||||
|
||||
#define fts_free(p) do {\
|
||||
if (p) {\
|
||||
fts_free_proc(p);\
|
||||
p = NULL;\
|
||||
}\
|
||||
} while(0)
|
||||
|
||||
#define CSV_SUPPORT 1
|
||||
#define TXT_SUPPORT 1
|
||||
|
||||
#define FTS_TEST_DBG(fmt, args...) do { \
|
||||
printk("[FTS_TS][TEST]%s:"fmt"\n", __func__, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_TEST_FUNC_ENTER() do { \
|
||||
printk("[FTS_TS][TEST]%s: Enter\n", __func__); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_TEST_FUNC_EXIT() do { \
|
||||
printk("[FTS_TS][TEST]%s: Exit(%d)\n", __func__, __LINE__); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_TEST_INFO(fmt, args...) do { \
|
||||
printk(KERN_ERR "[FTS_TS/I][TEST]%s:"fmt"\n", __func__, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_TEST_ERROR(fmt, args...) do { \
|
||||
printk(KERN_ERR "[FTS_TS/E][TEST]%s:"fmt"\n", __func__, ##args); \
|
||||
} while (0)
|
||||
|
||||
#define FTS_TEST_SAVE_INFO(fmt, args...) do { \
|
||||
if (fts_ftest->testresult) { \
|
||||
fts_ftest->testresult_len += snprintf( \
|
||||
fts_ftest->testresult + fts_ftest->testresult_len, \
|
||||
TXT_BUFFER_LEN, \
|
||||
fmt, ##args);\
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define FTS_TEST_SAVE_ERR(fmt, args...) do { \
|
||||
if (fts_ftest->testresult && (fts_ftest->testresult_len < TXT_BUFFER_LEN)) { \
|
||||
fts_ftest->testresult_len += snprintf( \
|
||||
fts_ftest->testresult + fts_ftest->testresult_len, \
|
||||
TXT_BUFFER_LEN, \
|
||||
fmt, ##args);\
|
||||
} \
|
||||
printk(KERN_ERR "[FTS_TS/E][TEST]%s:"fmt"\n", __func__, ##args);\
|
||||
} while (0)
|
||||
#endif
|
1408
drivers/input/touchscreen/ft3519/focaltech_test/focaltech_test_ini.c
Normal file
1408
drivers/input/touchscreen/ft3519/focaltech_test/focaltech_test_ini.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,146 @@
|
|||
/************************************************************************
|
||||
* Copyright (c) 2012-2020, Focaltech Systems (R)£¬All Rights Reserved.
|
||||
*
|
||||
* File Name: focaltech_test_ini.h
|
||||
*
|
||||
* Author: Focaltech Driver Team
|
||||
*
|
||||
* Created: 2016-08-01
|
||||
*
|
||||
* Abstract: parsing function of INI file
|
||||
*
|
||||
************************************************************************/
|
||||
#ifndef _INI_H
|
||||
#define _INI_H
|
||||
/*****************************************************************************
|
||||
* Private constant and macro definitions using #define
|
||||
*****************************************************************************/
|
||||
#define MAX_KEYWORD_NUM (1000)
|
||||
#define MAX_KEYWORD_NAME_LEN (50)
|
||||
#define MAX_KEYWORD_VALUE_LEN (512)
|
||||
#define MAX_KEYWORD_VALUE_ONE_LEN (16)
|
||||
#define MAX_INI_LINE_LEN (MAX_KEYWORD_NAME_LEN + MAX_KEYWORD_VALUE_LEN)
|
||||
#define MAX_INI_SECTION_NUM (20)
|
||||
#define MAX_IC_NAME_LEN (32)
|
||||
#define MAX_TEST_ITEM (20)
|
||||
#define IC_CODE_OFFSET (16)
|
||||
|
||||
/*****************************************************************************
|
||||
* enumerations, structures and unions
|
||||
*****************************************************************************/
|
||||
struct ini_ic_type {
|
||||
char ic_name[MAX_IC_NAME_LEN];
|
||||
u32 ic_type;
|
||||
};
|
||||
|
||||
enum line_type {
|
||||
LINE_SECTION = 1,
|
||||
LINE_KEYWORD = 2 ,
|
||||
LINE_OTHER = 3,
|
||||
};
|
||||
|
||||
struct ini_keyword {
|
||||
char name[MAX_KEYWORD_NAME_LEN];
|
||||
char value[MAX_KEYWORD_VALUE_LEN];
|
||||
};
|
||||
|
||||
struct ini_section {
|
||||
char name[MAX_KEYWORD_NAME_LEN];
|
||||
int keyword_num;
|
||||
/* point to ini.tmp, don't need free */
|
||||
struct ini_keyword *keyword;
|
||||
};
|
||||
|
||||
struct ini_data {
|
||||
char *data;
|
||||
int length;
|
||||
int keyword_num_total;
|
||||
int section_num;
|
||||
struct ini_section section[MAX_INI_SECTION_NUM];
|
||||
struct ini_keyword *tmp;
|
||||
char ic_name[MAX_IC_NAME_LEN];
|
||||
u32 ic_code;
|
||||
};
|
||||
|
||||
#define TEST_ITEM_INCELL { \
|
||||
"SHORT_CIRCUIT_TEST", \
|
||||
"OPEN_TEST", \
|
||||
"CB_TEST", \
|
||||
"RAWDATA_TEST", \
|
||||
"LCD_NOISE_TEST", \
|
||||
"KEY_SHORT_TEST", \
|
||||
"MUX_OPEN_TEST", \
|
||||
}
|
||||
|
||||
#define BASIC_THRESHOLD_INCELL { \
|
||||
"ShortCircuit_ResMin", "ShortCircuit_VkResMin", \
|
||||
"OpenTest_CBMin", "OpenTest_Check_K1", "OpenTest_K1Threshold", "OpenTest_Check_K2", "OpenTest_K2Threshold", \
|
||||
"CBTest_Min", "CBTest_Max", \
|
||||
"CBTest_VKey_Check", "CBTest_Min_Vkey", "CBTest_Max_Vkey", \
|
||||
"RawDataTest_Min", "RawDataTest_Max", \
|
||||
"RawDataTest_VKey_Check", "RawDataTest_Min_VKey", "RawDataTest_Max_VKey", \
|
||||
"LCD_NoiseTest_Frame", "LCD_NoiseTest_Coefficient", "LCD_NoiseTest_Coefficient_key", \
|
||||
"OpenTest_DifferMin", \
|
||||
}
|
||||
|
||||
|
||||
#define TEST_ITEM_MC_SC { \
|
||||
"RAWDATA_TEST", \
|
||||
"UNIFORMITY_TEST", \
|
||||
"SCAP_CB_TEST", \
|
||||
"SCAP_RAWDATA_TEST", \
|
||||
"WEAK_SHORT_CIRCUIT_TEST", \
|
||||
"PANEL_DIFFER_TEST", \
|
||||
}
|
||||
|
||||
#define BASIC_THRESHOLD_MC_SC { \
|
||||
"RawDataTest_High_Min", "RawDataTest_High_Max", "RawDataTest_HighFreq", \
|
||||
"RawDataTest_Low_Min", "RawDataTest_Low_Max", "RawDataTest_LowFreq", \
|
||||
"UniformityTest_Check_Tx", "UniformityTest_Check_Rx","UniformityTest_Check_MinMax", \
|
||||
"UniformityTest_Tx_Hole", "UniformityTest_Rx_Hole", "UniformityTest_MinMax_Hole", \
|
||||
"SCapCbTest_OFF_Min", "SCapCbTest_OFF_Max", "ScapCBTest_SetWaterproof_OFF", \
|
||||
"SCapCbTest_ON_Min", "SCapCbTest_ON_Max", "ScapCBTest_SetWaterproof_ON", \
|
||||
"SCapRawDataTest_OFF_Min", "SCapRawDataTest_OFF_Max", "SCapRawDataTest_SetWaterproof_OFF", \
|
||||
"SCapRawDataTest_ON_Min", "SCapRawDataTest_ON_Max", "SCapRawDataTest_SetWaterproof_ON", \
|
||||
"WeakShortTest_CG", "WeakShortTest_CC", \
|
||||
"PanelDifferTest_Min", "PanelDifferTest_Max", \
|
||||
"SCapCbTest_High_Min", "SCapCbTest_High_Max", "ScapCBTest_SetHighSensitivity", \
|
||||
"SCapRawDataTest_High_Min", "SCapRawDataTest_High_Max", "SCapRawDataTest_SetHighSensitivity", \
|
||||
"SCapCbTest_Hov_Min", "SCapCbTest_Hov_Max", "ScapCBTest_SetHov", \
|
||||
"SCapRawDataTest_Hov_Min", "SCapRawDataTest_Hov_Max", "SCapRawDataTest_SetHov", \
|
||||
}
|
||||
|
||||
#define TEST_ITEM_SC { \
|
||||
"RAWDATA_TEST", \
|
||||
"CB_TEST", \
|
||||
"DELTA_CB_TEST", \
|
||||
"WEAK_SHORT_TEST", \
|
||||
}
|
||||
|
||||
#define BASIC_THRESHOLD_SC { \
|
||||
"RawDataTest_Min", "RawDataTest_Max", \
|
||||
"CbTest_Min", "CbTest_Max", \
|
||||
"DeltaCbTest_Base", "DeltaCbTest_Differ_Max", \
|
||||
"DeltaCbTest_Include_Key_Test", "DeltaCbTest_Key_Differ_Max", \
|
||||
"DeltaCbTest_Deviation_S1", "DeltaCbTest_Deviation_S2", "DeltaCbTest_Deviation_S3", \
|
||||
"DeltaCbTest_Deviation_S4", "DeltaCbTest_Deviation_S5", "DeltaCbTest_Deviation_S6", \
|
||||
"DeltaCbTest_Set_Critical", "DeltaCbTest_Critical_S1", "DeltaCbTest_Critical_S2", \
|
||||
"DeltaCbTest_Critical_S3", "DeltaCbTest_Critical_S4", \
|
||||
"DeltaCbTest_Critical_S5", "DeltaCbTest_Critical_S6", \
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* Global variable or extern global variabls/functions
|
||||
*****************************************************************************/
|
||||
int fts_test_get_testparam_from_ini(char *config_name);
|
||||
int get_keyword_value(char *section, char *name, int *value);
|
||||
|
||||
#define get_value_interface(name, value) \
|
||||
get_keyword_value("Interface", name, value)
|
||||
#define get_value_basic(name, value) \
|
||||
get_keyword_value("Basic_Threshold", name, value)
|
||||
#define get_value_detail(name, value) \
|
||||
get_keyword_value("SpecialSet", name, value)
|
||||
#define get_value_testitem(name, value) \
|
||||
get_keyword_value("TestItem", name, value)
|
||||
#endif /* _INI_H */
|
|
@ -0,0 +1 @@
|
|||
obj-$(CONFIG_TOUCHSCREEN_FT3519) += focaltech_test_ft5452i.o
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,452 @@
|
|||
0x2, 0x0, 0x46,0x32,0x0, 0x0, 0xb2,0x0, 0xff,0xff,0xff,0x2, 0x7, 0x45,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0x2, 0xd, 0x9a,0xff,0xff,0xff,0xff,0xff,0x2, 0xb, 0x91,0xff,0xff,
|
||||
0xff,0xff,0xff,0x2, 0x0, 0x3, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0x2, 0xb, 0xdb,0x75,0x84,0x1, 0x7e,0x44,0x1f,0xff,0xe4,0x7a,0x49,
|
||||
0xb0,0x1b,0x44,0x78,0xf9,0x7e,0xf8,0x13,0xff,0xd2,0x7, 0xc2,0x8, 0xc2,0x9, 0x75,
|
||||
0x22,0x0, 0x75,0x27,0xff,0xd2,0x0, 0xc2,0x2, 0xc2,0x3, 0xc2,0x4, 0xc2,0x6, 0x7e,
|
||||
0x4, 0x0, 0xff,0x7e,0x14,0x1, 0x45,0xb, 0xa, 0x40,0x5d,0x44,0x68,0x1a,0x69,0x20,
|
||||
0x0, 0x2, 0xb, 0xe, 0xb, 0x44,0x80,0xa, 0x7e,0xb, 0xb0,0x7a,0x29,0xb0,0xb, 0x24,
|
||||
0xb, 0xc, 0x1b,0x44,0x78,0xf2,0x80,0xdf,0x2, 0x19,0x93,0x6d,0x0, 0x74,0x10,0x4d,
|
||||
0x0, 0x78,0xb, 0x4d,0x22,0x78,0x27,0x8d,0x31,0x7d,0x12,0x6d,0x22,0x22,0x7d,0x43,
|
||||
0x7d,0x32,0x6d,0x22,0x2f,0x11,0x2d,0x44,0x50,0x2, 0xa5,0xf, 0xbf,0x10,0x40,0x4,
|
||||
0x9f,0x10,0xb, 0x90,0x14,0x78,0xed,0x7f,0x1, 0x6d,0x22,0x7d,0x34,0x22,0x7d,0x41,
|
||||
0x7d,0x13,0x8d,0x24,0x7d,0x2, 0x2f,0x0, 0x40,0x4, 0xbd,0x4, 0x40,0x4, 0x9d,0x4,
|
||||
0xb, 0x14,0x14,0x78,0xf1,0x7d,0x23,0x7d,0x31,0x7d,0x10,0x6d,0x0, 0x22,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0x1c,0x40,0xe3,0xbf,0x93,0x6c,0xdd,0x22,0xff,0x0, 0xff,0x0, 0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xca,0xf8,0x7f,0x20,0x80,0xa, 0x7e,0x1b,0xf0,0x7a,0x2b,0xf0,0xb, 0x34,0xb, 0x54,
|
||||
0x69,0xff,0xff,0xfc,0x7d,0xef,0x1b,0xe4,0x79,0xef,0xff,0xfc,0x4d,0xff,0x78,0xe6,
|
||||
0x7f,0x10,0xda,0xf8,0x22,0x0, 0x1, 0x2, 0x79,0x0, 0x0, 0xa, 0x2, 0x7a,0x54,0x5b,
|
||||
0xaa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0, 0x1, 0x2, 0x84,0x0, 0x0, 0x1, 0x2,
|
||||
0x85,0xff,0x0, 0x2, 0x2, 0x86,0x0, 0x0, 0x0, 0x1, 0x3, 0x8c,0x0, 0x0, 0x1, 0x2,
|
||||
0x44,0x0, 0x0, 0x1, 0x2, 0x46,0x0, 0x0, 0x2, 0x2, 0x61,0x0, 0x0, 0x0, 0x4, 0x2,
|
||||
0x63,0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x2, 0x67,0x0, 0x0, 0x0, 0x1, 0x2, 0x69,0x0,
|
||||
0x0, 0x1, 0x2, 0x6a,0xb, 0x0, 0x1, 0x2, 0x6b,0x0, 0x0, 0x0, 0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0x56,0x31,0x2e,0x32,0x5f,0x41,0x70,0x72,0x20,0x32,0x37,0x20,0x32,0x30,0x32,0x31,
|
||||
0x46,0x54,0x53,0x35,0x34,0x35,0x32,0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x7c,0x97,0x7c,0x8b,0x7f,0x70,0xd2,0xc9,0x7a,0x81,0xf2,0x75,0xf3,0x80,0xa, 0x59,
|
||||
0x1b,0x54,0xf5,0xf4,0x75,0xf5,0x1, 0x6c,0xaa,0x80,0x14,0xe5,0xf5,0x54,0x80,0xb4,
|
||||
0x80,0xf9,0xe5,0xf6,0xa, 0x3a,0x2d,0x3f,0x7d,0x2e,0x7a,0x1b,0xb0,0xb, 0xa0,0xbc,
|
||||
0x9a,0x38,0xe8,0xc2,0xc9,0x22,0xd2,0xcf,0xe5,0xcc,0x54,0xf8,0xf5,0xcc,0xa9,0xd0,
|
||||
0xce,0xa9,0xd2,0xc9,0xa9,0xd0,0xce,0xa9,0xd3,0xc9,0xa9,0xd5,0xca,0x75,0xeb,0x23,
|
||||
0x75,0xed,0xf, 0x75,0xac,0x40,0x75,0xad,0x30,0xd2,0x86,0x75,0xec,0xff,0x75,0xee,
|
||||
0xff,0xa9,0xc1,0xea,0xa9,0xc7,0x94,0xa9,0xc4,0x94,0xc2,0xae,0x7e,0x8, 0x0, 0xc,
|
||||
0x74,0x21,0x7e,0x70,0x1, 0x91,0x20,0xe5,0xc, 0xbe,0xb0,0x9, 0x28,0x5, 0xa9,0xc3,
|
||||
0xe2,0x80,0x3, 0xa9,0xd3,0xe2,0xe5,0xc, 0x7a,0xb3,0x2, 0x7d,0x22,0x7e,0x35,0x25,
|
||||
0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x12,0xb0,0x7e,0x35,0x25,0x7d,
|
||||
0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x12,0xac,0x7e,0x35,0x25,0x2e,0x34,
|
||||
0x0, 0xa, 0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0xa, 0x7a,0x1f,0x10,0xc, 0x7e,0x35,
|
||||
0x25,0x2e,0x34,0x0, 0xa, 0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x12,
|
||||
0xfc,0x22,0x7e,0x34,0x0, 0x4, 0x7e,0x54,0x0, 0x4, 0x7e,0x44,0x0, 0xff,0x69,0x12,
|
||||
0x0, 0x2, 0xb, 0x2a,0x0, 0x79,0x30,0x0, 0x1e,0x7e,0x34,0x1, 0x0, 0x7e,0x24,0x10,
|
||||
0x0, 0x9f,0x0, 0x59,0x12,0x0, 0x2, 0x1b,0x28,0x0, 0xb, 0x26,0x1b,0x34,0x78,0xf3,
|
||||
0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x10,0x1c,
|
||||
0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x10,0x20,
|
||||
0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x11,0x54,
|
||||
0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x12,0xa8,
|
||||
0x7e,0x35,0x25,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x12,0xb0,0x7e,
|
||||
0x35,0x25,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8, 0x7a,0x1f,0x12,0xac,0x7e,0x35,
|
||||
0x25,0x2e,0x34,0x0, 0xa, 0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0xa, 0x7a,0x1f,0x10,
|
||||
0xc, 0x7e,0x35,0x25,0x2e,0x34,0x0, 0xa, 0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x12,0xfc,0x7e,0x34,0x2, 0x63,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x12,0xc0,0x7e,0x34,0x2, 0x7a,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0xa,
|
||||
0x7a,0x1f,0x12,0x40,0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x11,0x84,0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x11,0x7c,0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x11,0x88,0x7e,0x34,0x2, 0x67,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0xa,
|
||||
0x7a,0x1f,0x11,0xa8,0x7e,0x34,0x2, 0x79,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0xa,
|
||||
0x7a,0x1f,0x13,0x30,0x7e,0x34,0x2, 0x79,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0xa,
|
||||
0x7a,0x1f,0x11,0x98,0x7e,0x34,0x2, 0x79,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x11,0x90,0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x11,0x94,0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x10,0x40,0x7e,0x34,0x2, 0x88,0x7d,0x23,0x6d,0x33,0x2e,0x18,0x0, 0x8,
|
||||
0x7a,0x1f,0x10,0x24,0x22,0xa9,0xc4,0xe1,0xa9,0xc0,0xe1,0xa9,0xd0,0xce,0xd2,0xcc,
|
||||
0x7e,0x34,0xff,0xff,0x7e,0x54,0x0, 0x4, 0x7e,0x44,0x0, 0xff,0x69,0x12,0x0, 0x2,
|
||||
0xb, 0x2a,0x0, 0x79,0x30,0x0, 0x6, 0x7e,0x34,0x0, 0x1, 0x1b,0xa, 0x30,0xa9,0xc1,
|
||||
0xe2,0xa9,0xc2,0xe2,0xd2,0x9e,0xc2,0x9d,0x43,0xeb,0xb4,0x7e,0x34,0x0, 0xef,0x7e,
|
||||
0x54,0x0, 0x4, 0x7e,0x44,0x0, 0xff,0x69,0x12,0x0, 0x2, 0xb, 0x2a,0x0, 0x79,0x30,
|
||||
0x0, 0x18,0x2e,0x14,0x0, 0xa, 0xb, 0xa, 0x30,0x5e,0x70,0xfc,0x1b,0xa, 0x30,0x7e,
|
||||
0x34,0x0, 0x3, 0x7e,0x54,0x0, 0x4, 0x7e,0x44,0x0, 0xff,0x69,0x12,0x0, 0x2, 0xb,
|
||||
0x2a,0x0, 0x79,0x30,0x0, 0x8, 0x7e,0x34,0x0, 0x8, 0x79,0x30,0x0, 0x4, 0x91,0xf2,
|
||||
0xd2,0xac,0x22,0xc2,0xad,0x75,0x91,0x0, 0xc2,0x90,0xc2,0x91,0xa9,0xc0,0x93,0x75,
|
||||
0x92,0x70,0xc2,0xc0,0xa9,0xd5,0xb7,0xd2,0xbd,0xd2,0xe8,0xd2,0xad,0x22,0x80,0x14,
|
||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0, 0x7d,0x23,0x1b,0x34,0x4d,0x22,0x78,0xe4,0x22,0xc2,0xa9,0xc2,
|
||||
0x8c,0x43,0x89,0x2, 0x75,0x8c,0x1, 0x75,0x8a,0x0, 0xd2,0xa9,0x22,0xc2,0x8c,0x6d,
|
||||
0x33,0x7a,0x37,0x2, 0x86,0xd2,0x8c,0x22,0x7e,0x37,0x2, 0x86,0xb, 0x34,0x7a,0x37,
|
||||
0x2, 0x86,0x22,0xe1,0x38,0xca,0x39,0xf1,0x38,0xda,0x39,0x32,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0x7c,0xab,0x7e,0x70,0xef,0x7e,0xb3,0x2, 0x44,0x24,0xfd,0x68,0x5c,0x1b,0xb1,0x68,
|
||||
0x48,0x24,0x9f,0x68,0x67,0x1b,0xb2,0x68,0x69,0x24,0xda,0x68,0x1f,0x24,0xc4,0x68,
|
||||
0x53,0x1b,0xb2,0x68,0x51,0x24,0xf5,0x78,0x6e,0x7e,0xa3,0x2, 0x6e,0x7c,0xba,0x4,
|
||||
0x7a,0xb3,0x2, 0x6e,0xa, 0x3a,0x9, 0x73,0x2, 0x51,0x80,0x5b,0x4c,0xaa,0x78,0x5,
|
||||
0x7e,0x70,0x54,0x80,0x52,0xbe,0xa0,0x1, 0x78,0x5, 0x7e,0x70,0x5b,0x80,0x48,0xbe,
|
||||
0xa0,0x2, 0x78,0x43,0x7e,0x70,0xaa,0x80,0x3e,0x4c,0xaa,0x78,0x2, 0x80,0x5, 0xbe,
|
||||
0xa0,0x1, 0x78,0x33,0x7e,0x70,0x1, 0x80,0x2e,0xa, 0x3a,0x2e,0x35,0x25,0x9, 0x73,
|
||||
0x0, 0xa, 0x80,0x23,0x80,0x6, 0x7e,0x73,0x3, 0x8c,0x80,0x1b,0x7e,0x73,0x2, 0x79,
|
||||
0x80,0x15,0x4c,0xaa,0x78,0x8, 0x7e,0x37,0x2, 0x67,0xa, 0x36,0x80,0x9, 0xbe,0xa0,
|
||||
0x1, 0x78,0x4, 0x7e,0x37,0x2, 0x67,0x7c,0xb7,0x22,0x7c,0x97,0x7c,0x8b,0xc2,0x2,
|
||||
0x7e,0xb3,0x2, 0x44,0x14,0x78,0x2, 0x41,0xa2,0x1b,0xb1,0x78,0x2, 0x41,0x22,0x1b,
|
||||
0xb1,0x78,0x2, 0x41,0xa2,0x1b,0xb1,0x78,0x2, 0x41,0x65,0x14,0x78,0x2, 0x41,0x81,
|
||||
0x14,0x78,0x2, 0x41,0x87,0x24,0xf9,0x78,0x2, 0x41,0x9d,0x24,0xbb,0x68,0x55,0x24,
|
||||
0xf6,0x78,0x2, 0x61,0x7e,0x1b,0xb1,0x78,0x2, 0x61,0x6c,0x14,0x78,0x2, 0x61,0x76,
|
||||
0x1b,0xb1,0x78,0x2, 0x41,0xa5,0x14,0x78,0x2, 0x41,0xa7,0x14,0x78,0x2, 0x41,0xa2,
|
||||
0x1b,0xb2,0x78,0x2, 0x41,0xa2,0x24,0xda,0x68,0x2e,0x24,0xe6,0x68,0x28,0x24,0xfa,
|
||||
0x68,0x3f,0x24,0xf1,0x68,0x74,0x24,0xf3,0x78,0x2, 0x41,0xa2,0x24,0xec,0x78,0x2,
|
||||
0x61,0x8c,0x24,0x5, 0x68,0x2, 0x61,0x90,0xbe,0x80,0x1, 0x68,0x2, 0x61,0x90,0x7a,
|
||||
0x93,0x2, 0x6e,0x22,0x61,0x86,0x61,0x86,0xbe,0x80,0x4, 0x50,0xb, 0xe4,0x7a,0xb3,
|
||||
0x2, 0x79,0xa, 0x58,0x19,0x95,0x2, 0x47,0x4c,0x88,0x68,0x2, 0x61,0x90,0xd2,0x2,
|
||||
0x22,0x7c,0xb8,0x14,0x68,0xa, 0x14,0x68,0xf, 0x14,0x68,0x1e,0x24,0x3, 0x78,0x2a,
|
||||
0xa, 0x39,0x7d,0x23,0x6d,0x33,0x80,0xc, 0x7c,0x29,0x6c,0x33,0x6d,0x0, 0x7e,0x1f,
|
||||
0x2, 0x63,0x2f,0x10,0x7a,0x1f,0x2, 0x63,0x80,0x10,0xa, 0x19,0x6d,0x0, 0x7e,0x1f,
|
||||
0x2, 0x63,0x2f,0x10,0x7a,0x1f,0x2, 0x63,0xd2,0x3, 0x7c,0xb8,0x14,0x68,0x19,0x14,
|
||||
0x68,0x27,0x14,0x68,0x26,0x14,0x68,0x25,0x14,0x68,0x2a,0x24,0x5, 0x78,0x48,0x20,
|
||||
0x1, 0x2, 0x41,0xcc,0x41,0xc6,0x41,0xcc,0xa, 0x39,0x7d,0x3, 0x6d,0x11,0x7e,0x35,
|
||||
0x25,0x59,0x13,0x0, 0x2, 0x1b,0x38,0x0, 0x22,0x41,0xef,0x61,0x4, 0x7c,0x69,0x6c,
|
||||
0x77,0x6d,0x22,0x61,0x1c,0xa, 0x59,0x6d,0x44,0x7e,0x25,0x25,0x7d,0x32,0xb, 0x36,
|
||||
0x49,0x13,0x0, 0x2, 0xb, 0x38,0x0, 0x2f,0x2, 0x59,0x13,0x0, 0x2, 0x1b,0x38,0x0,
|
||||
0x6d,0x33,0x59,0x32,0x0, 0x8, 0x22,0x7e,0xb3,0x2, 0x79,0x6c,0xb9,0x7a,0xb3,0x2,
|
||||
0x79,0x7e,0x25,0x25,0x2e,0x24,0x0, 0x8, 0xb, 0x28,0x50,0x7d,0x35,0xb, 0x34,0x1b,
|
||||
0x28,0x30,0x2e,0x55,0x25,0x19,0x95,0x0, 0xa, 0x7e,0x55,0x25,0x49,0x15,0x0, 0x8,
|
||||
0x6d,0x0, 0x49,0x35,0x0, 0x6, 0x49,0x25,0x0, 0x4, 0xbf,0x1, 0x50,0x2, 0x61,0x90,
|
||||
0x20,0x1, 0x3, 0xd3,0x80,0x1, 0xc3,0x92,0x1, 0x7a,0x55,0x23,0x7e,0x34,0x0, 0x2,
|
||||
0x61,0x67,0x7c,0xb8,0x14,0x68,0x15,0x14,0x68,0x14,0x14,0x68,0x13,0x24,0x3, 0x68,
|
||||
0x2, 0x61,0x90,0x20,0x1, 0x2, 0x41,0xcc,0x41,0xc6,0x41,0xcc,0x41,0xd4,0x41,0xef,
|
||||
0xa, 0x59,0x6d,0x44,0x7e,0x15,0x25,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x2f,0x12,
|
||||
0x59,0x31,0x0, 0x2, 0x1b,0x18,0x20,0x7e,0x35,0x25,0x7a,0x35,0x23,0xd2,0x2, 0x7e,
|
||||
0x34,0x0, 0x1, 0x61,0x67,0x75,0xe6,0x0, 0x75,0xe7,0x0, 0xe4,0x7e,0x34,0x1, 0x6,
|
||||
0x7e,0x24,0x0, 0xff,0x7a,0x1b,0xb0,0x7e,0x34,0x1, 0x7, 0x7a,0x1b,0xb0,0xd2,0x6,
|
||||
0x22,0x75,0xe6,0x0, 0xd2,0x9f,0x22,0xbe,0x80,0x1, 0x78,0x5, 0x7a,0x93,0x2, 0x6a,
|
||||
0x22,0xbe,0x80,0x2, 0x68,0x2, 0x61,0x90,0x7a,0x93,0x2, 0x46,0x22,0x7a,0x93,0x2,
|
||||
0x69,0x22,0xd2,0x2, 0x22,0x61,0x86,0x7c,0xb8,0x14,0x68,0x28,0x14,0x68,0x40,0x14,
|
||||
0x68,0x52,0x14,0x68,0x61,0x14,0x68,0x70,0x14,0x78,0x2, 0x61,0x45,0x24,0x6, 0x68,
|
||||
0x2, 0x61,0x90,0x30,0x1, 0x6, 0x7e,0x34,0x0, 0x28,0x80,0x4, 0x7e,0x34,0x1, 0x36,
|
||||
0x7a,0x35,0x25,0x22,0xa, 0x39,0x6d,0x22,0x7e,0x15,0x25,0x59,0x31,0x0, 0x2, 0x1b,
|
||||
0x18,0x20,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x7d,0x23,0x6d,0x33,0x80,0x4e,0xa,
|
||||
0x59,0x7c,0xab,0xe4,0x6d,0x44,0x7e,0x15,0x25,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,
|
||||
0x2f,0x12,0x80,0x39,0xa, 0x59,0x6d,0x44,0x7e,0x15,0x25,0x49,0x31,0x0, 0x2, 0xb,
|
||||
0x18,0x20,0x2f,0x12,0x80,0x27,0xa, 0x39,0x7d,0x23,0x6d,0x33,0x7e,0x15,0x25,0x59,
|
||||
0x31,0x0, 0x6, 0x59,0x21,0x0, 0x4, 0x22,0xa, 0x59,0x7c,0xab,0xe4,0x6d,0x44,0x7e,
|
||||
0x15,0x25,0xb, 0x16,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x2f,0x12,0x59,0x31,0x0,
|
||||
0x2, 0x1b,0x18,0x20,0x22,0xa, 0x59,0x6d,0x44,0x7e,0x35,0x25,0x7d,0x23,0xb, 0x26,
|
||||
0x49,0x12,0x0, 0x2, 0xb, 0x28,0x0, 0x2f,0x2, 0x59,0x12,0x0, 0x2, 0x1b,0x28,0x0,
|
||||
0x7a,0x35,0x23,0x7e,0x34,0x0, 0x3, 0x7a,0x37,0x2, 0x61,0x22,0x7e,0x34,0x0, 0x4,
|
||||
0x7a,0x37,0x2, 0x61,0x80,0x10,0xe4,0x7c,0x78,0x7c,0x69,0x2, 0x18,0x0, 0x7e,0x34,
|
||||
0x0, 0x5, 0x7a,0x37,0x2, 0x61,0xe4,0x7a,0xb3,0x2, 0x79,0x22,0x7a,0x93,0x2, 0x84,
|
||||
0x22,0xca,0x7b,0xca,0x2b,0xca,0x1b,0xca,0xb, 0xd2,0x0, 0x30,0x90,0x22,0xc2,0x90,
|
||||
0x7e,0x71,0x91,0x7e,0xb3,0x2, 0x6b,0x70,0x4, 0x7a,0x73,0x2, 0x44,0x11,0x9a,0x7e,
|
||||
0xb3,0x2, 0x6b,0x4, 0x7a,0xb3,0x2, 0x6b,0x30,0x2, 0x5, 0xe4,0x11,0x0, 0xf5,0x91,
|
||||
0x30,0x91,0xf, 0xc2,0x91,0x7e,0xb3,0x2, 0x6b,0x4, 0x7a,0xb3,0x2, 0x6b,0x11,0x0,
|
||||
0xf5,0x91,0xda,0xb, 0xda,0x1b,0xda,0x2b,0xda,0x7b,0x32,0xca,0xb8,0xa9,0xc0,0x93,
|
||||
0xe4,0x7a,0xb3,0x2, 0x6b,0xda,0xb8,0x32,0x7c,0x7b,0x2e,0x70,0xf9,0x78,0x2, 0x81,
|
||||
0xe0,0x1b,0x70,0x78,0x2, 0x81,0xfc,0x1b,0x70,0x78,0x2, 0xa1,0x2, 0x2e,0x70,0xf9,
|
||||
0x78,0x2, 0xa1,0x13,0x2e,0x70,0xb1,0x78,0x2, 0xa1,0x8c,0x1b,0x71,0x78,0x2, 0xa1,
|
||||
0x79,0x1b,0x70,0x78,0x2, 0xa1,0x83,0x1b,0x71,0x78,0x2, 0xa1,0x1c,0x1b,0x70,0x78,
|
||||
0x2, 0xa1,0x1e,0x2e,0x70,0xd5,0x68,0x1f,0x2e,0x70,0xe6,0x68,0x1a,0x1b,0x70,0x68,
|
||||
0x29,0x1b,0x70,0x78,0x2, 0x81,0xb8,0x1b,0x72,0x68,0xe, 0x2e,0x70,0xf1,0x68,0x32,
|
||||
0x2e,0x70,0x6a,0x68,0x2, 0xa1,0x99,0xa1,0x94,0x7e,0x1f,0x2, 0x63,0x7c,0x76,0x7c,
|
||||
0x65,0xa, 0x24,0x7a,0x1f,0x2, 0x63,0xd2,0x3, 0x22,0x7e,0x15,0x25,0x49,0x31,0x0,
|
||||
0x2, 0xb, 0x18,0x20,0x7c,0x76,0x7c,0x65,0xa, 0x24,0x59,0x31,0x0, 0x2, 0x1b,0x18,
|
||||
0x20,0x22,0x7e,0x14,0x0, 0x4, 0x7e,0x4, 0x0, 0xff,0x69,0x30,0x0, 0x2, 0xb, 0xa,
|
||||
0x20,0x69,0x11,0x0, 0x10,0x6d,0x0, 0x7e,0x35,0x25,0x59,0x13,0x0, 0x6, 0x59,0x3,
|
||||
0x0, 0x4, 0x7a,0x35,0x23,0x7e,0x34,0x0, 0x2, 0x7a,0x37,0x2, 0x61,0x20,0x1, 0x3,
|
||||
0xd3,0x80,0x1, 0xc3,0x92,0x1, 0x30,0x1, 0x6, 0x7e,0x34,0x0, 0x28,0x80,0x4, 0x7e,
|
||||
0x34,0x1, 0x36,0x7a,0x35,0x25,0x80,0x25,0x7e,0x15,0x25,0x49,0x31,0x0, 0x2, 0xb,
|
||||
0x18,0x20,0x7c,0x76,0x7c,0x65,0xa, 0x24,0x59,0x31,0x0, 0x2, 0x1b,0x18,0x20,0x7e,
|
||||
0x35,0x25,0x7a,0x35,0x23,0x7e,0x34,0x0, 0x1, 0x7a,0x37,0x2, 0x61,0x2, 0x4, 0xad,
|
||||
0x75,0xe6,0x0, 0x75,0xe7,0x0, 0xe4,0x7e,0x34,0x1, 0x6, 0x7e,0x24,0x0, 0xff,0x7a,
|
||||
0x1b,0xb0,0x7e,0x34,0x1, 0x7, 0x7a,0x1b,0xb0,0xd2,0x6, 0x22,0x75,0xe6,0x0, 0xd2,
|
||||
0x9f,0x22,0x7e,0x73,0x2, 0x88,0x7a,0x73,0x2, 0x6a,0x7e,0x73,0x2, 0x89,0x7a,0x73,
|
||||
0x2, 0x46,0x22,0x7e,0x73,0x2, 0x88,0x7a,0x73,0x2, 0x69,0x22,0x80,0x76,0x7e,0x73,
|
||||
0x2, 0x89,0xa, 0x37,0x6d,0x22,0x7c,0x67,0x6c,0x77,0x7e,0x33,0x2, 0x88,0xa, 0x13,
|
||||
0x7d,0x1, 0x6d,0x11,0x2f,0x1, 0x7e,0x73,0x2, 0x8a,0xa, 0x37,0x2f,0x10,0x7e,0x15,
|
||||
0x23,0x59,0x31,0x0, 0x2, 0x1b,0x18,0x20,0x7e,0x73,0x2, 0x8c,0xa, 0x37,0x6d,0x22,
|
||||
0x7c,0x67,0x6c,0x77,0x7e,0x13,0x2, 0x8b,0xa, 0x51,0x7d,0x45,0x6d,0x55,0x2f,0x21,
|
||||
0x7e,0x73,0x2, 0x8d,0xa, 0x37,0x2f,0x12,0x59,0x31,0x0, 0x6, 0x59,0x21,0x0, 0x4,
|
||||
0x7e,0x34,0x0, 0x3, 0x7a,0x37,0x2, 0x61,0x22,0x7e,0x34,0x0, 0x4, 0x7a,0x37,0x2,
|
||||
0x61,0x80,0x11,0x74,0x1, 0x6c,0x77,0x6c,0x66,0x2, 0x18,0x0, 0x7e,0x34,0x0, 0x5,
|
||||
0x7a,0x37,0x2, 0x61,0xe4,0x7a,0xb3,0x2, 0x79,0x22,0xca,0x7b,0xca,0x2b,0xca,0x1b,
|
||||
0xca,0xb, 0xc2,0x0, 0x7e,0x14,0x0, 0x4, 0x7e,0x4, 0x0, 0xff,0x69,0x50,0x0, 0x2,
|
||||
0xb, 0xa, 0x40,0xb, 0x2a,0x30,0x4e,0x70,0x80,0x1b,0x2a,0x30,0x69,0x30,0x0, 0x2,
|
||||
0xb, 0xa, 0x20,0x69,0x11,0x0, 0x2, 0x5e,0x14,0xff,0x0, 0x68,0x3f,0xb, 0x1a,0x10,
|
||||
0x4e,0x30,0x8, 0x1b,0x1a,0x10,0x7e,0x14,0x0, 0x4, 0x7e,0x4, 0x0, 0xff,0x69,0x50,
|
||||
0x0, 0x2, 0xb, 0xa, 0x40,0x69,0x12,0x0, 0x2, 0xa, 0x2, 0x1e,0x4, 0x1e,0x4, 0x5e,
|
||||
0x4, 0x0, 0x1, 0x78,0xc, 0xa, 0x12,0x1e,0x14,0x5e,0x14,0x0, 0x1, 0x78,0x2, 0xc1,
|
||||
0x96,0xb, 0x2a,0x10,0x4e,0x30,0x4, 0x1b,0x2a,0x10,0xc1,0x96,0x69,0x11,0x0, 0x2,
|
||||
0x1e,0x14,0x1e,0x14,0x1e,0x14,0x5e,0x14,0x0, 0x1, 0x68,0x6, 0x69,0x51,0x0, 0xe,
|
||||
0x71,0xe8,0x7e,0x34,0x0, 0x4, 0x7e,0x24,0x0, 0xff,0x69,0x11,0x0, 0x2, 0xb, 0x1a,
|
||||
0x0, 0x69,0x30,0x0, 0x2, 0x1e,0x34,0x1e,0x34,0x5e,0x34,0x0, 0x1, 0x68,0x9, 0xb,
|
||||
0xa, 0x30,0x5e,0x70,0xdf,0x1b,0xa, 0x30,0x7e,0x34,0x0, 0x4, 0x7e,0x24,0x0, 0xff,
|
||||
0x69,0x11,0x0, 0x2, 0xb, 0x1a,0x0, 0x69,0x30,0x0, 0x2, 0x1e,0x34,0x5e,0x34,0x0,
|
||||
0x1, 0x68,0xd, 0x2e,0x14,0x0, 0x6, 0xb, 0xa, 0x30,0x4e,0x70,0x2, 0x1b,0xa, 0x30,
|
||||
0x7e,0x34,0x0, 0x4, 0x7e,0x24,0x0, 0xff,0x69,0x11,0x0, 0x2, 0xb, 0x1a,0x0, 0x69,
|
||||
0x30,0x0, 0x2, 0x5e,0x34,0x0, 0x1, 0x68,0xd, 0x2e,0x14,0x0, 0x6, 0xb, 0xa, 0x30,
|
||||
0x4e,0x70,0x1, 0x1b,0xa, 0x30,0x7e,0x34,0xff,0xff,0x7e,0x54,0x0, 0x4, 0x7e,0x44,
|
||||
0x0, 0xff,0x69,0x12,0x0, 0x2, 0xb, 0x2a,0x0, 0x79,0x30,0x0, 0x6, 0xb, 0xa, 0x30,
|
||||
0x5e,0x34,0x0, 0x3, 0x1b,0xa, 0x30,0xda,0xb, 0xda,0x1b,0xda,0x2b,0xda,0x7b,0x32,
|
||||
0x7f,0x50,0x7f,0x41,0x6c,0xaa,0xbe,0x58,0x0, 0x0, 0x38,0x3a,0x7e,0x58,0xff,0xff,
|
||||
0x7e,0xa0,0x1, 0x80,0x31,0x7e,0x18,0x0, 0x80,0x7a,0x1d,0x10,0x7f,0x14,0x7e,0x8,
|
||||
0x3, 0x8d,0x12,0x14,0x93,0x9e,0x58,0x0, 0x80,0x2e,0x48,0x0, 0x80,0x6d,0x44,0x9,
|
||||
0x34,0x3, 0x8d,0x7e,0x1d,0xc, 0x7e,0x1b,0xb0,0x6c,0xb3,0x7a,0x1b,0xb0,0xb, 0x44,
|
||||
0xbe,0x44,0x0, 0x80,0x78,0xe9,0xbe,0x58,0x0, 0x80,0x38,0xc9,0x4c,0xaa,0x68,0x2,
|
||||
0xb, 0x5c,0x7a,0x5d,0x10,0x7f,0x14,0x7e,0x8, 0x3, 0x8d,0x12,0x14,0x93,0x6d,0x44,
|
||||
0x80,0x11,0x9, 0x64,0x3, 0x8d,0x7e,0xd, 0xc, 0x7e,0xb, 0x70,0x6c,0x76,0x7a,0xb,
|
||||
0x70,0xb, 0x44,0x7d,0x34,0x6d,0x22,0xbf,0x15,0x40,0xe7,0x22,0xca,0x3b,0x7f,0x60,
|
||||
0x7f,0x71,0x7e,0x3d,0xc, 0x75,0x14,0x0, 0xa2,0x3, 0xe4,0x33,0x78,0xc, 0x7a,0x3d,
|
||||
0x15,0x7f,0x17,0x7f,0x6, 0x12,0x11,0x6e,0xe1,0xf6,0x7f,0x57,0x7f,0x7, 0x2f,0x3,
|
||||
0x7a,0xd, 0x10,0x7e,0x1f,0x2, 0x63,0xbf,0x1, 0x28,0x2, 0xe1,0xf6,0x4d,0xef,0x78,
|
||||
0x3, 0x75,0x27,0x0, 0xe5,0x27,0xbe,0xb0,0x4, 0x50,0x46,0xe5,0x27,0xa, 0x2b,0x7e,
|
||||
0x34,0x0, 0x4, 0x9d,0x32,0x7a,0x71,0x14,0xa, 0x37,0x6d,0x22,0xbf,0x13,0x28,0x4,
|
||||
0x7c,0xbf,0xf5,0x14,0xe5,0x14,0xa, 0x3b,0xca,0x39,0xe5,0x27,0xa, 0x1b,0x2e,0x14,
|
||||
0x2, 0x6f,0x6d,0x0, 0x7f,0x16,0x12,0x1, 0x20,0x1b,0xfd,0xe5,0x14,0x25,0x27,0xf5,
|
||||
0x27,0xe5,0x14,0xa, 0x3b,0x6d,0x22,0x2f,0x51,0xe5,0x14,0xa, 0x1b,0x2d,0xd1,0x9f,
|
||||
0x31,0xbe,0x38,0x0, 0x0, 0x28,0xa, 0x7a,0x3d,0x15,0x7f,0x15,0x7f,0x6, 0x12,0x11,
|
||||
0x6e,0x7e,0xf, 0x2, 0x63,0x7e,0x1d,0x10,0xbf,0x10,0x78,0x1a,0xe5,0x27,0xb4,0x4,
|
||||
0x15,0x7e,0x18,0x0, 0x4, 0x7a,0x1d,0x15,0x9f,0x11,0x7e,0x8, 0x2, 0x6f,0x12,0x11,
|
||||
0x6e,0x75,0x27,0xff,0xc2,0x3, 0xda,0x3b,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xa9,0xc2,0xb4,0x74,0x9f,0x11,0x68,0x7e,0x8, 0x0, 0xc, 0x7e,0x18,0x0, 0x1, 0x11,
|
||||
0x83,0xa9,0xd2,0xb4,0xe5,0xc, 0x60,0x5, 0xe5,0xc, 0xb4,0xff,0x2, 0xc3,0x22,0xd3,
|
||||
0x22,0xd2,0xc8,0x43,0xed,0xf, 0xc2,0xea,0x75,0xb3,0x13,0xa9,0xd1,0xb4,0xa9,0xc0,
|
||||
0xb4,0x22,0xca,0xf8,0x7e,0xf0,0x10,0x7e,0x34,0x15,0x0, 0xc2,0xa, 0x7d,0x23,0x1b,
|
||||
0x34,0x4d,0x22,0x78,0xf8,0x11,0x0, 0x92,0xa, 0x20,0xa, 0x19,0x75,0xed,0x9f,0xd2,
|
||||
0x8, 0xa9,0xd1,0xea,0xa9,0xd5,0xca,0xa9,0xc1,0xea,0x80,0x1, 0x0, 0x7c,0xaf,0x1b,
|
||||
0xf0,0x4c,0xaa,0x78,0xf7,0xda,0xf8,0x22,0x7c,0x7b,0x7a,0x71,0xb5,0xa9,0x36,0xb3,
|
||||
0xfc,0xa9,0xc6,0xb3,0xd3,0x22,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,
|
||||
0xe5,0xb5,0x22,0x7f,0x61,0x7f,0x70,0x9f,0x11,0x80,0x13,0x75,0xb5,0x0, 0xa9,0x36,
|
||||
0xb3,0xfc,0xa9,0xc6,0xb3,0xe5,0xb5,0x7a,0x7b,0xb0,0xb, 0xf4,0xb, 0x1c,0xbf,0x16,
|
||||
0x40,0xe9,0x22,0xa9,0xc2,0xb4,0x30,0xa, 0x6, 0x74,0x6, 0x11,0x68,0x80,0x4, 0x74,
|
||||
0x4, 0x11,0x68,0xa9,0xd2,0xb4,0x22,0xa9,0xc2,0xb4,0x74,0x5, 0x11,0x68,0x11,0x76,
|
||||
0xa9,0xd2,0xb4,0x30,0xe0,0x2, 0xd3,0x22,0xc3,0x22,0xca,0xf8,0x7f,0x1, 0x7c,0xfb,
|
||||
0x7c,0xb1,0xf5,0x1f,0x7c,0xb2,0xf5,0x1e,0x7c,0xb3,0xf5,0x1d,0xa9,0xc2,0xb4,0x7c,
|
||||
0xbf,0x11,0x68,0xe5,0x1f,0x11,0x68,0xe5,0x1e,0x11,0x68,0xe5,0x1d,0x11,0x68,0xda,
|
||||
0xf8,0x22,0x7f,0x70,0x7f,0x61,0xe5,0x22,0xb4,0x1, 0x1d,0x7e,0x34,0xf0,0x0, 0x7e,
|
||||
0x24,0x0, 0x1, 0xbf,0x61,0x50,0x11,0x7e,0xd, 0x19,0x2f,0x6, 0x7e,0x34,0xe0,0x0,
|
||||
0x7e,0x24,0x0, 0x1, 0xbf,0x1, 0x38,0x55,0xd2,0xa, 0x11,0xa3,0x74,0x2, 0x7f,0x16,
|
||||
0x11,0xca,0x9f,0x11,0x80,0x14,0x7d,0x13,0x2d,0x1f,0x7d,0xe, 0x7e,0xb, 0xb0,0xf5,
|
||||
0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0xb, 0x1c,0x7e,0xd, 0x19,0xbf,0x10,0x40,
|
||||
0xe5,0xa9,0xd2,0xb4,0x12,0x7, 0x2d,0x11,0xb7,0x50,0xa, 0x7e,0x37,0x2, 0x86,0xbe,
|
||||
0x34,0x1, 0xf4,0x28,0xf2,0x7e,0x37,0x2, 0x86,0xbe,0x34,0x1, 0xf4,0x38,0x3, 0x2,
|
||||
0x7, 0x43,0xc2,0x86,0x7e,0x34,0x13,0x88,0x12,0x6, 0xfe,0xd2,0x86,0x22,0xca,0x3b,
|
||||
0x7f,0x30,0x7f,0x51,0x7e,0x4d,0x15,0x7f,0x15,0x5e,0x34,0x0, 0x7f,0x7d,0x53,0x7e,
|
||||
0x44,0x0, 0x80,0x9d,0x45,0x7d,0x34,0x6d,0x22,0xbf,0x14,0x40,0xc, 0x7a,0x4d,0x19,
|
||||
0x7f,0x15,0x7f,0x3, 0x11,0xf2,0xd3,0x80,0x48,0x7d,0x34,0x6d,0x22,0x7a,0x1d,0x19,
|
||||
0x7f,0x15,0x7f,0x3, 0x11,0xf2,0x7d,0x34,0x6d,0x22,0x9f,0x41,0x2f,0x51,0x2d,0x74,
|
||||
0x80,0x19,0x7e,0x18,0x0, 0x80,0x7a,0x1d,0x19,0x7f,0x15,0x7f,0x3, 0x11,0xf2,0x9e,
|
||||
0x48,0x0, 0x80,0x2e,0x74,0x0, 0x80,0x2e,0x58,0x0, 0x80,0xbe,0x48,0x0, 0x80,0x50,
|
||||
0xe1,0xbe,0x48,0x0, 0x0, 0x68,0x9, 0x7a,0x4d,0x19,0x7f,0x15,0x7f,0x3, 0x11,0xf2,
|
||||
0xd3,0xda,0x3b,0x22,0x7c,0x6b,0xd2,0xa, 0x11,0xa3,0x74,0x20,0xca,0xb8,0xa, 0x36,
|
||||
0x6d,0x22,0x74,0xc, 0x2f,0x11,0x14,0x78,0xfb,0xda,0xb8,0x11,0xca,0xa9,0xd2,0xb4,
|
||||
0x12,0x7, 0x2d,0x11,0xb7,0x50,0xa, 0x7e,0x37,0x2, 0x86,0xbe,0x34,0x1, 0xf4,0x28,
|
||||
0xf2,0x7e,0x37,0x2, 0x86,0xbe,0x34,0x1, 0xf4,0x38,0x5, 0x12,0x7, 0x43,0xd3,0x22,
|
||||
0xc2,0x86,0x7e,0x34,0x13,0x88,0x12,0x6, 0xfe,0xd2,0x86,0xc3,0x22,0xd2,0xa, 0x11,
|
||||
0xa3,0xa9,0xc2,0xb4,0x74,0x60,0x11,0x68,0xa9,0xd2,0xb4,0x11,0xb7,0x40,0xfc,0xd3,
|
||||
0x22,0x7c,0x7b,0xa9,0xc2,0xb4,0xa9,0xc6,0xb3,0x75,0xb5,0x5, 0xa9,0x36,0xb3,0xfc,
|
||||
0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0,
|
||||
0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x71,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,
|
||||
0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,
|
||||
0xb3,0xfc,0xa9,0xc6,0xb3,0x7e,0x61,0xb5,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,
|
||||
0xc6,0xb3,0x7e,0x71,0xb5,0xa9,0xd2,0xb4,0x7c,0x46,0x7c,0x64,0x22,0x7d,0x43,0x7c,
|
||||
0x5b,0xa, 0x58,0x7d,0x34,0x7c,0x47,0xa9,0xc2,0xb4,0xa9,0xc6,0xb3,0x75,0xb5,0x1,
|
||||
0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,
|
||||
0xb3,0x75,0xb5,0x0, 0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x51,0xb5,0xa9,0x36,
|
||||
0xb3,0xfc,0xa9,0xc6,0xb3,0xf5,0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0x7a,0x41,
|
||||
0xb5,0xa9,0x36,0xb3,0xfc,0xa9,0xc6,0xb3,0xa9,0xd2,0xb4,0x22,0x7c,0x7b,0xbe,0x70,
|
||||
0x0, 0x28,0x2, 0x61,0x22,0x74,0x1, 0x7e,0x34,0xdf,0xff,0x51,0x9d,0x74,0x6, 0x51,
|
||||
0x41,0x7d,0x13,0x6c,0x33,0x7d,0x31,0x51,0x9d,0x74,0x6, 0x7d,0x31,0x51,0x9d,0x74,
|
||||
0x6, 0x7d,0x31,0x51,0x9d,0x74,0x2, 0x51,0x41,0x7d,0x13,0x4e,0x30,0x1, 0x7d,0x31,
|
||||
0x41,0x9d,0x74,0x6, 0x51,0x41,0x7d,0x13,0x7e,0x30,0xa5,0x7d,0x31,0x51,0x9d,0x7e,
|
||||
0x30,0xf, 0x74,0x6, 0x7d,0x31,0x51,0x9d,0x7e,0x30,0x6a,0x74,0x6, 0x7d,0x31,0x51,
|
||||
0x9d,0x7e,0x34,0x0, 0x5, 0x2, 0x6, 0xfe,0xca,0x79,0x7c,0xf7,0x7c,0xeb,0x74,0x1,
|
||||
0x51,0xec,0x74,0x1, 0x6d,0x33,0x51,0x9d,0xe4,0x51,0x41,0x7d,0x13,0x5e,0x14,0x80,
|
||||
0x0, 0x7c,0xf, 0x6c,0x11,0x3e,0x4, 0x4d,0x10,0x7d,0x31,0x51,0x9d,0x6d,0x0, 0xbe,
|
||||
0xe0,0x1, 0x78,0x6, 0x7e,0x14,0x0, 0x8, 0x80,0x2, 0x7d,0x10,0x74,0x4, 0x7d,0x31,
|
||||
0x51,0x9d,0x4e,0x30,0x10,0x4e,0x30,0x40,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,
|
||||
0x0, 0x19,0x12,0x6, 0xfe,0x4e,0x30,0x1, 0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,
|
||||
0xa2,0x1c,0x12,0x6, 0xfe,0x5e,0x30,0xbf,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,
|
||||
0x0, 0x19,0x12,0x6, 0xfe,0x5e,0x30,0xfe,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,
|
||||
0x0, 0x19,0x12,0x6, 0xfe,0x5e,0x30,0xef,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,
|
||||
0x0, 0x5, 0x12,0x6, 0xfe,0xe4,0x51,0xec,0x7e,0x34,0xff,0xf7,0x74,0x4, 0x51,0x9d,
|
||||
0xda,0x79,0x22,0xca,0xf8,0x7c,0xfb,0x74,0x1, 0x51,0xec,0xe4,0x6d,0x33,0x51,0x9d,
|
||||
0x74,0x1, 0x6d,0x33,0x51,0x9d,0x6d,0x0, 0xbe,0xf0,0x1, 0x78,0x6, 0x7e,0x14,0x0,
|
||||
0x8, 0x80,0x2, 0x7d,0x10,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x4e,0x30,0x10,0x4e,0x30,
|
||||
0x40,0x4e,0x30,0x4, 0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,0x0, 0x19,0x12,0x6,
|
||||
0xfe,0x4e,0x30,0x1, 0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,0xa2,0x1c,0x12,0x6,
|
||||
0xfe,0x5e,0x30,0xbf,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,0x0, 0xa0,0x12,0x6,
|
||||
0xfe,0x5e,0x30,0xfe,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,0x0, 0x19,0x12,0x6,
|
||||
0xfe,0x5e,0x30,0xef,0x74,0x4, 0x7d,0x31,0x51,0x9d,0x7e,0x34,0x0, 0x1, 0x12,0x6,
|
||||
0xfe,0xe4,0x51,0xec,0x7e,0x34,0xff,0xf7,0x74,0x4, 0x51,0x9d,0xda,0xf8,0x22,0x7f,
|
||||
0x1, 0x7c,0xb1,0xf5,0x16,0x7c,0xb2,0xf5,0x15,0x7c,0xb3,0xf5,0x14,0xa9,0xc2,0xb4,
|
||||
0x74,0xb, 0x11,0x68,0xe5,0x16,0x11,0x68,0xe5,0x15,0x11,0x68,0xe5,0x14,0x11,0x68,
|
||||
0xe4,0x1, 0x68,0x7f,0x70,0x7f,0x1, 0x91,0x6f,0x7f,0x7, 0x7e,0x1d,0x10,0x11,0x83,
|
||||
0xa9,0xd2,0xb4,0xd3,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
||||
0x7c,0xa7,0xa, 0xf6,0x6d,0xee,0x60,0x2, 0x1, 0xb0,0x1b,0xa0,0x68,0x23,0x1b,0xa0,
|
||||
0x68,0x2e,0x1b,0xa0,0x68,0x3a,0x1b,0xa0,0x68,0x44,0x1b,0xa0,0x68,0x50,0x1b,0xa0,
|
||||
0x68,0x6d,0x2e,0xa0,0x6, 0x68,0x2, 0x21,0x15,0x7e,0x34,0x0, 0x28,0x7a,0x35,0x25,
|
||||
0x22,0x7d,0xf, 0x6d,0x11,0x7e,0x35,0x25,0x59,0x13,0x0, 0x2, 0x1b,0x38,0x0, 0x22,
|
||||
0x7d,0x4e,0x7c,0x89,0x7d,0x5f,0x7c,0x9a,0x7c,0xab,0xe4,0x7e,0x15,0x25,0x80,0x2e,
|
||||
0x7e,0x15,0x25,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x2f,0x17,0x80,0x29,0x7d,0x2f,
|
||||
0x6d,0x33,0x7e,0x15,0x25,0x59,0x31,0x0, 0x6, 0x59,0x21,0x0, 0x4, 0x22,0x7d,0x4e,
|
||||
0x7c,0x89,0x7d,0x5f,0x7c,0x9a,0x7c,0xab,0xe4,0x7e,0x15,0x25,0xb, 0x16,0x49,0x31,
|
||||
0x0, 0x2, 0xb, 0x18,0x20,0x2f,0x12,0x59,0x31,0x0, 0x2, 0x1b,0x18,0x20,0x22,0x7e,
|
||||
0x35,0x25,0x7d,0x23,0xb, 0x26,0x49,0x12,0x0, 0x2, 0xb, 0x28,0x0, 0x2f,0x7, 0x59,
|
||||
0x12,0x0, 0x2, 0x1b,0x28,0x0, 0x7e,0x24,0x0, 0x6, 0x7a,0x27,0x2, 0x61,0x80,0x5d,
|
||||
0x7e,0x73,0x2, 0x89,0xa, 0x37,0x6d,0x22,0x7c,0x67,0x6c,0x77,0x7e,0x33,0x2, 0x88,
|
||||
0xa, 0x13,0x7d,0x1, 0x6d,0x11,0x2f,0x1, 0x7e,0x73,0x2, 0x8a,0xa, 0x37,0x2f,0x10,
|
||||
0x7e,0x15,0x25,0x59,0x31,0x0, 0x2, 0x1b,0x18,0x20,0x7e,0x73,0x2, 0x8c,0xa, 0x37,
|
||||
0x6d,0x22,0x7c,0x67,0x6c,0x77,0x7e,0x13,0x2, 0x8b,0xa, 0x51,0x7d,0x45,0x6d,0x55,
|
||||
0x2f,0x21,0x7e,0x73,0x2, 0x8d,0xa, 0x37,0x2f,0x12,0x59,0x31,0x0, 0x6, 0x59,0x21,
|
||||
0x0, 0x4, 0x7e,0x34,0x0, 0x6, 0x7a,0x37,0x2, 0x61,0x7e,0x35,0x25,0x7a,0x35,0x23,
|
||||
0xe4,0x7a,0xb3,0x2, 0x79,0x22,0x75,0xa8,0x0, 0x75,0xdf,0x0, 0x12,0x4, 0x56,0x12,
|
||||
0x6, 0x65,0x12,0x10,0x21,0xd2,0x7, 0x12,0x10,0x32,0x12,0x6, 0xe3,0x12,0x7, 0x1d,
|
||||
0xd2,0xaf,0x22,0x7e,0xb3,0x2, 0x69,0xb4,0xc, 0xb, 0xc2,0x86,0x7e,0x34,0x0, 0x64,
|
||||
0x12,0x6, 0xfe,0xd2,0x86,0x22,0x7e,0xa3,0x2, 0x6a,0xbe,0xa0,0xb, 0x78,0x3a,0x7e,
|
||||
0x1f,0x2, 0x63,0xbe,0x18,0x0, 0x0, 0x68,0x12,0x7e,0x14,0xe0,0x0, 0x7e,0x4, 0x0,
|
||||
0x1, 0xbf,0x10,0x38,0x6, 0xa2,0x3, 0xe4,0x33,0x78,0x3, 0x74,0x1, 0x22,0x7e,0x45,
|
||||
0x23,0x49,0xf4,0x0, 0x6, 0x49,0xe4,0x0, 0x4, 0x49,0x34,0x0, 0x2, 0xb, 0x48,0x20,
|
||||
0x2f,0x17,0xbf,0x10,0x40,0xb, 0x74,0x1, 0x22,0xbe,0xa0,0xa, 0x68,0x3, 0x74,0x1,
|
||||
0x22,0xe4,0x22,0x6d,0x33,0x7a,0x37,0x2, 0x61,0x7e,0x34,0x0, 0x28,0x7a,0x35,0x25,
|
||||
0x31,0x16,0x7e,0x37,0x2, 0x61,0x1b,0x34,0x68,0x6d,0x1b,0x35,0x78,0x2, 0x41,0x4f,
|
||||
0x1b,0x34,0x78,0x2, 0x41,0x81,0x1b,0x34,0x78,0x2, 0x61,0x3f,0x1b,0x34,0x78,0x2,
|
||||
0x61,0x70,0xb, 0x36,0x68,0x2, 0x81,0x27,0x6d,0x33,0x7a,0x37,0x2, 0x61,0x7a,0x37,
|
||||
0x2, 0x67,0x31,0x46,0x60,0x2, 0x81,0x27,0x7e,0x15,0x23,0x49,0x31,0x0, 0x6, 0x49,
|
||||
0x21,0x0, 0x4, 0x7a,0x1d,0xc, 0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x2e,0x14,0x0,
|
||||
0xa, 0x6d,0x0, 0x12,0xf, 0x3c,0x7e,0x55,0x23,0x49,0x15,0x0, 0x6, 0x49,0x5, 0x0,
|
||||
0x4, 0x49,0x35,0x0, 0x2, 0xb, 0x58,0x20,0x12,0x0, 0x9d,0x2e,0x34,0x10,0x0, 0x7a,
|
||||
0x37,0x2, 0x67,0x31,0x33,0x81,0x27,0x6d,0x33,0x7a,0x37,0x2, 0x61,0x7a,0x37,0x2,
|
||||
0x67,0x7e,0x18,0x1, 0x0, 0x7a,0x1d,0x10,0x7e,0x15,0x23,0x49,0x31,0x0, 0x2, 0xb,
|
||||
0x18,0x20,0x2e,0x14,0x0, 0xa, 0x6d,0x0, 0x12,0x14,0x93,0x30,0x0, 0x9, 0x7e,0x35,
|
||||
0x23,0x9, 0xb3,0x0, 0xa, 0xf5,0x91,0x31,0x33,0x7e,0x34,0xf0,0x88,0x80,0x2c,0x6d,
|
||||
0x33,0x7a,0x37,0x2, 0x61,0x7a,0x37,0x2, 0x67,0x7e,0x18,0x2, 0x79,0x7a,0x1d,0xc,
|
||||
0x7e,0x55,0x23,0x49,0x35,0x0, 0x2, 0xb, 0x58,0x20,0x49,0x15,0x0, 0x6, 0x49,0x5,
|
||||
0x0, 0x4, 0x12,0xe, 0xc0,0x31,0x33,0x7e,0x34,0xf0,0x55,0x7a,0x37,0x2, 0x67,0x81,
|
||||
0x27,0x75,0x22,0x0, 0x6d,0x33,0x7a,0x37,0x2, 0x61,0x7a,0x37,0x2, 0x67,0x7e,0xb3,
|
||||
0x2, 0x6a,0xb4,0xa, 0xe, 0x30,0x8, 0x6, 0xe4,0x12,0x13,0xe3,0x81,0x1d,0x12,0x12,
|
||||
0x2d,0x81,0x1d,0x7e,0xb3,0x2, 0x6a,0xb4,0xb, 0x67,0x7e,0x1f,0x2, 0x63,0xbe,0x18,
|
||||
0x0, 0x0, 0x78,0x2, 0x81,0x27,0x7e,0x14,0xe0,0x0, 0x7e,0x4, 0x0, 0x1, 0xbf,0x10,
|
||||
0x28,0x2, 0x81,0x27,0xa2,0x3, 0xe4,0x33,0x78,0x2, 0x81,0x27,0x7d,0x13,0x5e,0x14,
|
||||
0xf, 0xff,0x78,0x14,0x74,0xc, 0x7f,0x1, 0x1e,0x14,0x1e,0x4, 0x50,0x3, 0x4e,0x20,
|
||||
0x80,0x14,0x78,0xf4,0x7c,0xb3,0x80,0x12,0x74,0xc, 0x1e,0x34,0x1e,0x24,0x50,0x3,
|
||||
0x4e,0x60,0x80,0x14,0x78,0xf4,0x7f,0x21,0xb, 0x2c,0xf5,0xb, 0x75,0xa, 0x0, 0x80,
|
||||
0x7, 0xe5,0xa, 0x12,0x11,0xe4,0x5, 0xa, 0xe5,0xb, 0xbe,0xb1,0xa, 0x38,0xf2,0x81,
|
||||
0x1d,0x20,0x8, 0x2, 0x81,0x1d,0x7e,0x73,0x2, 0x6a,0xa, 0x57,0x9e,0x54,0x0, 0x80,
|
||||
0xf5,0x8, 0x6d,0x66,0x80,0xd, 0xe4,0x7e,0xa1,0x8, 0xa, 0x3a,0x2d,0x36,0x12,0x13,
|
||||
0x48,0xb, 0x64,0x7e,0x73,0x2, 0x46,0xa, 0x37,0xbd,0x36,0x18,0xe9,0x81,0x1d,0x75,
|
||||
0x22,0x1, 0x6d,0x33,0x7a,0x37,0x2, 0x61,0x6d,0x22,0x7a,0x27,0x2, 0x67,0x30,0x8,
|
||||
0x2, 0x81,0x1d,0x7d,0x63,0xbe,0x64,0x0, 0x1e,0x48,0x6, 0xbe,0x64,0x0, 0x1f,0x48,
|
||||
0x5, 0x7c,0xbd,0x12,0x11,0xe4,0xb, 0x64,0xbe,0x64,0x0, 0x20,0x78,0xe7,0x81,0x1d,
|
||||
0x6d,0x33,0x7a,0x37,0x2, 0x61,0x7a,0x37,0x2, 0x67,0x30,0x8, 0x2, 0x81,0x1d,0x7e,
|
||||
0x15,0x23,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x7d,0x3, 0x5e,0x4, 0xf, 0xff,0x68,
|
||||
0x2, 0x81,0x27,0x49,0x31,0x0, 0x6, 0x49,0x21,0x0, 0x4, 0x4d,0x23,0x78,0x2, 0x81,
|
||||
0x27,0x49,0x31,0x0, 0x2, 0xb, 0x18,0x20,0x74,0xc, 0x1e,0x34,0x1e,0x24,0x50,0x3,
|
||||
0x4e,0x60,0x80,0x14,0x78,0xf4,0x7c,0xb7,0xf5,0x8, 0x49,0x31,0x0, 0x6, 0x49,0x21,
|
||||
0x0, 0x4, 0x7d,0x3, 0x5e,0x4, 0xf, 0xff,0x78,0x1a,0x49,0x31,0x0, 0x6, 0x49,0x21,
|
||||
0x0, 0x4, 0x74,0xc, 0x1e,0x34,0x1e,0x24,0x50,0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,
|
||||
0x7c,0xe7,0x80,0x1a,0x49,0x31,0x0, 0x6, 0x49,0x21,0x0, 0x4, 0x74,0xc, 0x1e,0x34,
|
||||
0x1e,0x24,0x50,0x3, 0x4e,0x60,0x80,0x14,0x78,0xf4,0x7c,0xe7,0xb, 0xe0,0xa, 0x2e,
|
||||
0xe5,0x8, 0xa, 0x3b,0x2d,0x32,0xbe,0x34,0x0, 0x1f,0x18,0x1b,0x6c,0xff,0x80,0x9,
|
||||
0xe5,0x8, 0x2c,0xbf,0x12,0x11,0xe4,0xb, 0xf0,0xbc,0xef,0x38,0xf3,0x7e,0x34,0xf0,
|
||||
0xaa,0x7a,0x37,0x2, 0x67,0x31,0x33,0x20,0x6, 0x2, 0x21,0xa2,0x7e,0x34,0x13,0x88,
|
||||
0x12,0x6, 0xfe,0x7e,0x34,0x13,0x88,0x12,0x6, 0xfe,0x75,0xe9,0xff,0x21,0xa2,0xff,
|
118
drivers/input/touchscreen/hxchipset/Kconfig
Normal file
118
drivers/input/touchscreen/hxchipset/Kconfig
Normal file
|
@ -0,0 +1,118 @@
|
|||
#
|
||||
# Himax Touchscreen driver configuration
|
||||
#
|
||||
|
||||
config TOUCHSCREEN_HIMAX_COMMON
|
||||
tristate "HIMAX chipset i2c touchscreen"
|
||||
depends on TOUCHSCREEN_HIMAX_CHIPSET
|
||||
help
|
||||
This enables support for HIMAX CHIPSET over I2C based touchscreens.
|
||||
|
||||
choice
|
||||
prompt "HIMAX touch IC types"
|
||||
depends on TOUCHSCREEN_HIMAX_COMMON
|
||||
default TOUCHSCREEN_HIMAX_INCELL
|
||||
|
||||
config TOUCHSCREEN_HIMAX_ONCELL
|
||||
bool "HIMAX chipset on-cell function"
|
||||
depends on TOUCHSCREEN_HIMAX_COMMON
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of on-cell function.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_INCELL
|
||||
bool "HIMAX chipset in-cell function"
|
||||
depends on TOUCHSCREEN_HIMAX_COMMON
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of in-cell function.
|
||||
|
||||
endchoice
|
||||
|
||||
# ***************** On-cell Start *****************
|
||||
config TOUCHSCREEN_HIMAX_IC_HX852xH
|
||||
tristate "HIMAX chipset HX852xH function"
|
||||
depends on TOUCHSCREEN_HIMAX_ONCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX852xH.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX852xG
|
||||
tristate "HIMAX chipset HX852xG function"
|
||||
depends on TOUCHSCREEN_HIMAX_ONCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX852xG.
|
||||
|
||||
# ***************** On-cell End *******************
|
||||
# ***************** In-cell Start *****************
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83192
|
||||
tristate "HIMAX chipset HX83192 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83192.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83191
|
||||
tristate "HIMAX chipset HX83191 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83191.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83113
|
||||
tristate "HIMAX chipset HX83113 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83113.
|
||||
|
||||
+config TOUCHSCREEN_HIMAX_IC_HX83112
|
||||
tristate "HIMAX chipset HX83112 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83112.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83111
|
||||
tristate "HIMAX chipset HX83111 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83111.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83106
|
||||
tristate "HIMAX chipset HX83106 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83106.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83103
|
||||
tristate "HIMAX chipset HX83103 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83103.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_IC_HX83102
|
||||
tristate "HIMAX chipset HX83102 function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL
|
||||
help
|
||||
This enables support for HIMAX CHIPSET of HX83102.
|
||||
|
||||
# ***************** In-cell End *******************
|
||||
|
||||
config TOUCHSCREEN_HIMAX_DEBUG
|
||||
bool "HIMAX debug function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL || TOUCHSCREEN_HIMAX_ONCELL
|
||||
help
|
||||
This enables support for HIMAX debug function.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_INSPECT
|
||||
bool "HIMAX inspect function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL || TOUCHSCREEN_HIMAX_ONCELL
|
||||
help
|
||||
This enables support for HIMAX debug function.
|
||||
|
||||
config TOUCHSCREEN_HIMAX_EMBEDDED_FIRMWARE
|
||||
bool "HIMAX embedded firmware function"
|
||||
depends on TOUCHSCREEN_HIMAX_INCELL || TOUCHSCREEN_HIMAX_ONCELL
|
||||
help
|
||||
This enables built-in FW inside kernel as binary array
|
||||
|
||||
config HMX_DB
|
||||
bool "HIMAX driver test over Dragon Board"
|
||||
depends on TOUCHSCREEN_HIMAX_COMMON
|
||||
help
|
||||
This enables support for HIMAX driver test over Dragon Board.
|
||||
|
170
drivers/input/touchscreen/hxchipset/Makefile
Executable file
170
drivers/input/touchscreen/hxchipset/Makefile
Executable file
|
@ -0,0 +1,170 @@
|
|||
# Makefile for the Himax touchscreen drivers.
|
||||
|
||||
ifneq ($(filter y, $(CONFIG_KALLSYMS_ALL)),)
|
||||
ccflags-y += -D__KERNEL_KALLSYMS_ALL_ENABLED__
|
||||
endif
|
||||
|
||||
#ifneq ($(filter y, $(CONFIG_FB)),)
|
||||
# ccflags-y += -DHX_CONFIG_FB
|
||||
#endif
|
||||
|
||||
ifneq ($(filter y, $(CONFIG_DRM)),)
|
||||
ccflags-y += -DHX_CONFIG_DRM
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)),)
|
||||
himax_mmi-objs += himax_debug.o
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_INSPECT)),)
|
||||
himax_mmi-objs += himax_inspection.o
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_INCELL)),)
|
||||
himax_mmi-objs += himax_ic_incell_core.o
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_ONCELL)),)
|
||||
himax_mmi-objs += himax_ic_oncell_core.o
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX852xG)),)
|
||||
ccflags-y += -D__HIMAX_HX852xG_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX852xG.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX852xG.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX852xH)),)
|
||||
ccflags-y += -D__HIMAX_HX852xH_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX852xH.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX852xH.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83102)),)
|
||||
ccflags-y += -D__HIMAX_HX83102_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83102.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83102.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83103)),)
|
||||
ccflags-y += -D__HIMAX_HX83103_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83103.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83103.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83106)),)
|
||||
ccflags-y += -D__HIMAX_HX83106_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83106.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83106.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83111)),)
|
||||
ccflags-y += -D__HIMAX_HX83111_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83111.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83111.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83112)),)
|
||||
ccflags-y += -D__HIMAX_HX83112_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83112.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83112.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83113)),)
|
||||
ccflags-y += -D__HIMAX_HX83113_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83113.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83113.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83192)),)
|
||||
ccflags-y += -D__HIMAX_HX83192_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83192.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83192.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter y m, $(CONFIG_TOUCHSCREEN_HIMAX_IC_HX83191)),)
|
||||
ccflags-y += -D__HIMAX_HX83191_MOD__
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-m += himax_ic_HX83191.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
obj-y += himax_ic_HX83191.o
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(filter m, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
ccflags-y += -D__HIMAX_MOD__
|
||||
himax_mmi-objs += himax_common.o
|
||||
himax_mmi-objs += himax_platform.o
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_EMBEDDED_FIRMWARE)),)
|
||||
himax_mmi-objs += Himax_firmware.o
|
||||
endif
|
||||
obj-m += himax_mmi.o
|
||||
endif
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_COMMON)),)
|
||||
himax_mmi-objs += himax_common.o
|
||||
himax_mmi-objs += himax_platform.o
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_EMBEDDED_FIRMWARE)),)
|
||||
himax_mmi-objs += Himax_firmware.o
|
||||
endif
|
||||
obj-y += himax_mmi.o
|
||||
endif
|
||||
|
||||
ifneq ($(filter y, $(CONFIG_TOUCHSCREEN_HIMAX_EMBEDDED_FIRMWARE)),)
|
||||
ccflags-y += -D__EMBEDDED_FW__
|
||||
|
||||
ld_array_start_str = _binary_$(srctree)/$(src)_Himax_firmware_bin_start
|
||||
ld_array_start_sym = $(subst -,_,$(subst .,_,$(subst /,_,$(ld_array_start_str))))
|
||||
obj_array_start_sym = _binary___Himax_firmware_bin_start
|
||||
|
||||
ld_array_size_str = _binary_$(srctree)/$(src)_Himax_firmware_bin_size
|
||||
ld_array_size_sym = $(subst -,_,$(subst .,_,$(subst /,_,$(ld_array_size_str))))
|
||||
obj_array_size_sym = _binary___Himax_firmware_bin_size
|
||||
|
||||
ld_array_end_str = _binary_$(srctree)/$(src)_Himax_firmware_bin_end
|
||||
ld_array_end_sym = $(subst -,_,$(subst .,_,$(subst /,_,$(ld_array_end_str))))
|
||||
obj_array_end_sym = _binary___Himax_firmware_bin_end
|
||||
|
||||
$(src)/Himax_firmware.o: $(src)/Himax_firmware.bin FORCE
|
||||
$(LD) $(LDFLAGS) -r -b binary $(srctree)/$(src)/Himax_firmware.bin -o $(objtree)/$(obj)/Himax_firmware.o
|
||||
$(OBJCOPY) --redefine-sym $(ld_array_start_sym)=$(obj_array_start_sym) $(objtree)/$(obj)/Himax_firmware.o
|
||||
$(OBJCOPY) --redefine-sym $(ld_array_size_sym)=$(obj_array_size_sym) $(objtree)/$(obj)/Himax_firmware.o
|
||||
$(OBJCOPY) --redefine-sym $(ld_array_end_sym)=$(obj_array_end_sym) $(objtree)/$(obj)/Himax_firmware.o
|
||||
|
||||
endif
|
3405
drivers/input/touchscreen/hxchipset/himax_common.c
Normal file
3405
drivers/input/touchscreen/hxchipset/himax_common.c
Normal file
File diff suppressed because it is too large
Load diff
545
drivers/input/touchscreen/hxchipset/himax_common.h
Normal file
545
drivers/input/touchscreen/hxchipset/himax_common.h
Normal file
|
@ -0,0 +1,545 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for common functions
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef HIMAX_COMMON_H
|
||||
#define HIMAX_COMMON_H
|
||||
|
||||
#include <asm/segment.h>
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/async.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/input/mt.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/pm_wakeup.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/proc_fs.h>
|
||||
#include "himax_platform.h"
|
||||
#include <linux/kallsyms.h>
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
#include <linux/of_gpio.h>
|
||||
#endif
|
||||
|
||||
#define HIMAX_DRIVER_VER "2.0.0.51_HTF065H035_01"
|
||||
|
||||
#define FLASH_DUMP_FILE "/sdcard/HX_Flash_Dump.bin"
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
|
||||
#define HX_TP_PROC_2T2R
|
||||
/*if enable, selftest works in driver*/
|
||||
/*#define HX_TP_SELF_TEST_DRIVER*/
|
||||
#endif
|
||||
/*===========Himax Option function=============*/
|
||||
#define HX_RST_PIN_FUNC
|
||||
#define HX_ESD_RECOVERY
|
||||
|
||||
/*#define HX_NEW_EVENT_STACK_FORMAT*/
|
||||
/*#define HX_AUTO_UPDATE_FW*/
|
||||
/*#define HX_SMART_WAKEUP*/
|
||||
/*#define HX_GESTURE_TRACK*/
|
||||
#define HX_RESUME_SEND_CMD /*Need to enable on TDDI chipset*/
|
||||
/*#define HX_HIGH_SENSE*/
|
||||
/*#define HX_PALM_REPORT*/
|
||||
/*#define HX_USB_DETECT_GLOBAL*/
|
||||
|
||||
/* for MTK special platform.If turning on,
|
||||
* it will report to system by using specific format.
|
||||
*/
|
||||
/*#define HX_PROTOCOL_A*/
|
||||
#define HX_PROTOCOL_B_3PA
|
||||
|
||||
#define HX_ZERO_FLASH
|
||||
|
||||
/*system suspend-chipset power off,
|
||||
*oncell chipset need to enable the definition
|
||||
*/
|
||||
/*#define HX_RESUME_HW_RESET*/
|
||||
|
||||
/*for Himax auto-motive chipset
|
||||
*/
|
||||
/*#define HX_PON_PIN_SUPPORT*/
|
||||
|
||||
/*=============================================*/
|
||||
|
||||
/* Enable it if driver go into suspend/resume twice */
|
||||
/*#undef HX_CONFIG_FB*/
|
||||
|
||||
/* Enable it if driver go into suspend/resume twice */
|
||||
/*#undef HX_CONFIG_DRM*/
|
||||
|
||||
#if defined(HX_CONFIG_FB)
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/fb.h>
|
||||
#elif defined(HX_CONFIG_DRM)
|
||||
#include <drm/drm_panel.h>
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_MOD__)
|
||||
#define HX_USE_KSYM
|
||||
#if !defined(HX_USE_KSYM) || !defined(__KERNEL_KALLSYMS_ALL_ENABLED__)
|
||||
#error Modulized driver must enable HX_USE_KSYM and CONFIG_KALLSYM_ALL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
/* zero flash case, you need to setup the fix_touch_info of module
|
||||
*/
|
||||
#define HX_FIX_TOUCH_INFO
|
||||
#define HX_RESUME_SET_FW
|
||||
#define HX_CODE_OVERLAY
|
||||
/*Independent threads run the notification chain notification function resume
|
||||
*/
|
||||
#define HX_CONTAINER_SPEED_UP
|
||||
#else
|
||||
#define HX_TP_PROC_GUEST_INFO
|
||||
#endif
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
/* FW Auto upgrade case, you need to setup the fix_touch_info of module
|
||||
*/
|
||||
#define HX_FIX_TOUCH_INFO
|
||||
#endif
|
||||
|
||||
#if defined(HX_SMART_WAKEUP)
|
||||
/*This feature need P-sensor driver notified, and FW need to support
|
||||
*/
|
||||
/*#define HX_ULTRA_LOW_POWER*/
|
||||
#endif
|
||||
|
||||
#if defined(HX_CONTAINER_SPEED_UP)
|
||||
/*Resume queue delay work time after LCM RST (unit:ms)
|
||||
*/
|
||||
#define DELAY_TIME 40
|
||||
#endif
|
||||
|
||||
#if defined(HX_CONFIG_FB)
|
||||
int fb_notifier_callback(struct notifier_block *self,
|
||||
unsigned long event, void *data);
|
||||
#elif defined(HX_CONFIG_DRM)
|
||||
int drm_notifier_callback(struct notifier_block *self,
|
||||
unsigned long event, void *data);
|
||||
#endif
|
||||
|
||||
#define HX_MAX_WRITE_SZ (64 * 1024 + 4)
|
||||
|
||||
#define HX_KEY_MAX_COUNT 4
|
||||
#define DEFAULT_RETRY_CNT 3
|
||||
|
||||
#define HX_85XX_A_SERIES_PWON "HX85xxA"
|
||||
#define HX_85XX_B_SERIES_PWON "HX85xxB"
|
||||
#define HX_85XX_C_SERIES_PWON "HX85xxC"
|
||||
#define HX_85XX_D_SERIES_PWON "HX85xxD"
|
||||
#define HX_85XX_E_SERIES_PWON "HX85xxE"
|
||||
#define HX_85XX_ES_SERIES_PWON "HX85xxES"
|
||||
#define HX_85XX_F_SERIES_PWON "HX85xxF"
|
||||
#define HX_85XX_H_SERIES_PWON "HX85xxH"
|
||||
#define HX_83100A_SERIES_PWON "HX83100A"
|
||||
#define HX_83102A_SERIES_PWON "HX83102A"
|
||||
#define HX_83102B_SERIES_PWON "HX83102B"
|
||||
#define HX_83102D_SERIES_PWON "HX83102D"
|
||||
#define HX_83102E_SERIES_PWON "HX83102E"
|
||||
#define HX_83103A_SERIES_PWON "HX83103A"
|
||||
#define HX_83106A_SERIES_PWON "HX83106A"
|
||||
#define HX_83110A_SERIES_PWON "HX83110A"
|
||||
#define HX_83110B_SERIES_PWON "HX83110B"
|
||||
#define HX_83111B_SERIES_PWON "HX83111B"
|
||||
#define HX_83112A_SERIES_PWON "HX83112A"
|
||||
#define HX_83112B_SERIES_PWON "HX83112B"
|
||||
#define HX_83113A_SERIES_PWON "HX83113A"
|
||||
#define HX_83112D_SERIES_PWON "HX83112D"
|
||||
#define HX_83112E_SERIES_PWON "HX83112E"
|
||||
#define HX_83112F_SERIES_PWON "HX83112F"
|
||||
#define HX_83191A_SERIES_PWON "HX83191A"
|
||||
#define HX_83192A_SERIES_PWON "HX83192A"
|
||||
|
||||
#define HX_TP_BIN_CHECKSUM_SW 1
|
||||
#define HX_TP_BIN_CHECKSUM_HW 2
|
||||
#define HX_TP_BIN_CHECKSUM_CRC 3
|
||||
|
||||
#define SHIFTBITS 5
|
||||
|
||||
#define FW_SIZE_32k 32768
|
||||
#define FW_SIZE_60k 61440
|
||||
#define FW_SIZE_64k 65536
|
||||
#define FW_SIZE_124k 126976
|
||||
#define FW_SIZE_128k 131072
|
||||
|
||||
#define NO_ERR 0
|
||||
#define READY_TO_SERVE 1
|
||||
#define WORK_OUT 2
|
||||
#define I2C_FAIL -1
|
||||
#define HX_INIT_FAIL -1
|
||||
#define MEM_ALLOC_FAIL -2
|
||||
#define CHECKSUM_FAIL -3
|
||||
#define GESTURE_DETECT_FAIL -4
|
||||
#define INPUT_REGISTER_FAIL -5
|
||||
#define FW_NOT_READY -6
|
||||
#define LENGTH_FAIL -7
|
||||
#define OPEN_FILE_FAIL -8
|
||||
#define PROBE_FAIL -9
|
||||
#define ERR_WORK_OUT -10
|
||||
#define ERR_STS_WRONG -11
|
||||
#define ERR_TEST_FAIL -12
|
||||
#define HW_CRC_FAIL 1
|
||||
|
||||
#define HX_FINGER_ON 1
|
||||
#define HX_FINGER_LEAVE 2
|
||||
|
||||
#if defined(HX_PALM_REPORT)
|
||||
#define PALM_REPORT 1
|
||||
#define NOT_REPORT -1
|
||||
#endif
|
||||
|
||||
#define PEN_INFO_SZ 12
|
||||
|
||||
#if defined(__EMBEDDED_FW__)
|
||||
extern const uint8_t _binary___Himax_firmware_bin_start[];
|
||||
extern const uint8_t _binary___Himax_firmware_bin_end[];
|
||||
extern struct firmware g_embedded_fw;
|
||||
#endif
|
||||
|
||||
enum HX_TS_PATH {
|
||||
HX_REPORT_COORD = 1,
|
||||
HX_REPORT_SMWP_EVENT,
|
||||
HX_REPORT_COORD_RAWDATA,
|
||||
};
|
||||
|
||||
enum HX_TS_STATUS {
|
||||
HX_TS_GET_DATA_FAIL = -4,
|
||||
HX_ESD_EVENT,
|
||||
HX_CHKSUM_FAIL,
|
||||
HX_PATH_FAIL,
|
||||
HX_TS_NORMAL_END = 0,
|
||||
HX_ESD_REC_OK,
|
||||
HX_READY_SERVE,
|
||||
HX_REPORT_DATA,
|
||||
HX_ESD_WARNING,
|
||||
HX_IC_RUNNING,
|
||||
HX_ZERO_EVENT_COUNT,
|
||||
HX_RST_OK,
|
||||
};
|
||||
|
||||
enum cell_type {
|
||||
CHIP_IS_ON_CELL,
|
||||
CHIP_IS_IN_CELL
|
||||
};
|
||||
#if defined(HX_FIX_TOUCH_INFO)
|
||||
enum fix_touch_info {
|
||||
FIX_HX_RX_NUM = 18,
|
||||
FIX_HX_TX_NUM = 32,
|
||||
FIX_HX_BT_NUM = 0,
|
||||
FIX_HX_X_RES = 1600,
|
||||
FIX_HX_Y_RES = 720,
|
||||
FIX_HX_MAX_PT = 10,
|
||||
FIX_HX_XY_REVERSE = false,
|
||||
FIX_HX_INT_IS_EDGE = true,
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
FIX_HX_RX_NUM_2 = 0,
|
||||
FIX_HX_TX_NUM_2 = 0,
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
#define HX_SPI_OPERATION
|
||||
#define HX_0F_DEBUG
|
||||
#endif
|
||||
struct himax_ic_data {
|
||||
int vendor_fw_ver;
|
||||
int vendor_config_ver;
|
||||
int vendor_touch_cfg_ver;
|
||||
int vendor_display_cfg_ver;
|
||||
int vendor_cid_maj_ver;
|
||||
int vendor_cid_min_ver;
|
||||
int vendor_panel_ver;
|
||||
int vendor_sensor_id;
|
||||
int ic_adc_num;
|
||||
uint8_t vendor_cus_info[12];
|
||||
uint8_t vendor_proj_info[12];
|
||||
uint8_t vendor_ic_id[13];
|
||||
int HX_RX_NUM;
|
||||
int HX_TX_NUM;
|
||||
int HX_BT_NUM;
|
||||
int HX_X_RES;
|
||||
int HX_Y_RES;
|
||||
int HX_MAX_PT;
|
||||
bool HX_XY_REVERSE;
|
||||
bool HX_INT_IS_EDGE;
|
||||
bool HX_PEN_FUNC;
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
int HX_RX_NUM_2;
|
||||
int HX_TX_NUM_2;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct himax_virtual_key {
|
||||
int index;
|
||||
int keycode;
|
||||
int x_range_min;
|
||||
int x_range_max;
|
||||
int y_range_min;
|
||||
int y_range_max;
|
||||
};
|
||||
|
||||
struct himax_target_report_data {
|
||||
int *x;
|
||||
int *y;
|
||||
int *w;
|
||||
int *finger_id;
|
||||
int finger_on;
|
||||
int finger_num;
|
||||
#if defined(HX_SMART_WAKEUP)
|
||||
int SMWP_event_chk;
|
||||
#endif
|
||||
|
||||
int32_t *p_x;
|
||||
int32_t *p_y;
|
||||
int32_t *p_w;
|
||||
int32_t *pen_id;
|
||||
uint32_t *p_hover;
|
||||
int32_t *p_tilt_x;
|
||||
uint32_t *p_btn;
|
||||
uint32_t *p_btn2;
|
||||
int32_t *p_tilt_y;
|
||||
uint32_t *p_on;
|
||||
int pre_p_btn;
|
||||
int pre_p_btn2;
|
||||
|
||||
int ig_count;
|
||||
|
||||
};
|
||||
|
||||
struct himax_report_data {
|
||||
int touch_all_size;
|
||||
int raw_cnt_max;
|
||||
int raw_cnt_rmd;
|
||||
int touch_info_size;
|
||||
uint8_t finger_num;
|
||||
uint8_t finger_on;
|
||||
uint8_t *hx_coord_buf;
|
||||
uint8_t hx_state_info[2];
|
||||
#if defined(HX_SMART_WAKEUP)
|
||||
int event_size;
|
||||
uint8_t *hx_event_buf;
|
||||
#endif
|
||||
|
||||
int rawdata_size;
|
||||
uint8_t diag_cmd;
|
||||
uint8_t *hx_rawdata_buf;
|
||||
uint8_t rawdata_frame_size;
|
||||
};
|
||||
|
||||
struct himax_ts_data {
|
||||
bool initialized;
|
||||
bool suspended;
|
||||
atomic_t suspend_mode;
|
||||
uint8_t x_channel;
|
||||
uint8_t y_channel;
|
||||
uint8_t useScreenRes;
|
||||
uint8_t diag_cmd;
|
||||
char chip_name[30];
|
||||
uint8_t chip_cell_type;
|
||||
|
||||
uint8_t protocol_type;
|
||||
uint8_t first_pressed;
|
||||
uint8_t coord_data_size;
|
||||
uint8_t area_data_size;
|
||||
uint8_t coordInfoSize;
|
||||
uint8_t raw_data_frame_size;
|
||||
uint8_t raw_data_nframes;
|
||||
uint8_t nFinger_support;
|
||||
uint8_t irq_enabled;
|
||||
uint8_t diag_self[50];
|
||||
|
||||
uint16_t finger_pressed;
|
||||
uint16_t last_slot;
|
||||
uint16_t pre_finger_mask;
|
||||
uint16_t old_finger;
|
||||
int hx_point_num;
|
||||
|
||||
|
||||
uint32_t debug_log_level;
|
||||
uint32_t widthFactor;
|
||||
uint32_t heightFactor;
|
||||
uint32_t tw_x_min;
|
||||
uint32_t tw_x_max;
|
||||
uint32_t tw_y_min;
|
||||
uint32_t tw_y_max;
|
||||
uint32_t pl_x_min;
|
||||
uint32_t pl_x_max;
|
||||
uint32_t pl_y_min;
|
||||
uint32_t pl_y_max;
|
||||
|
||||
int rst_gpio;
|
||||
int use_irq;
|
||||
int (*power)(int on);
|
||||
int pre_finger_data[10][2];
|
||||
|
||||
struct device *dev;
|
||||
struct workqueue_struct *himax_wq;
|
||||
struct work_struct work;
|
||||
struct input_dev *input_dev;
|
||||
|
||||
struct input_dev *hx_pen_dev;
|
||||
|
||||
struct hrtimer timer;
|
||||
struct i2c_client *client;
|
||||
struct himax_i2c_platform_data *pdata;
|
||||
struct himax_virtual_key *button;
|
||||
struct mutex rw_lock;
|
||||
atomic_t irq_state;
|
||||
spinlock_t irq_lock;
|
||||
|
||||
/******* SPI-start *******/
|
||||
struct spi_device *spi;
|
||||
int hx_irq;
|
||||
uint8_t *xfer_buff;
|
||||
/******* SPI-end *******/
|
||||
|
||||
int in_self_test;
|
||||
int suspend_resume_done;
|
||||
int bus_speed;
|
||||
|
||||
#if defined(HX_CONFIG_FB) || defined(HX_CONFIG_DRM)
|
||||
struct notifier_block fb_notif;
|
||||
struct workqueue_struct *himax_att_wq;
|
||||
struct delayed_work work_att;
|
||||
#endif
|
||||
|
||||
struct workqueue_struct *flash_wq;
|
||||
struct work_struct flash_work;
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
struct workqueue_struct *himax_update_wq;
|
||||
struct delayed_work work_update;
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
struct workqueue_struct *himax_0f_update_wq;
|
||||
struct delayed_work work_0f_update;
|
||||
#endif
|
||||
|
||||
#if defined(HX_CONTAINER_SPEED_UP)
|
||||
struct workqueue_struct *ts_int_workqueue;
|
||||
struct delayed_work ts_int_work;
|
||||
#endif
|
||||
|
||||
struct workqueue_struct *himax_diag_wq;
|
||||
struct delayed_work himax_diag_delay_wrok;
|
||||
|
||||
#if defined(HX_SMART_WAKEUP)
|
||||
uint8_t SMWP_enable;
|
||||
uint8_t gesture_cust_en[26];
|
||||
struct wakeup_source ts_SMWP_wake_lock;
|
||||
#if defined(HX_ULTRA_LOW_POWER)
|
||||
bool psensor_flag;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(HX_HIGH_SENSE)
|
||||
uint8_t HSEN_enable;
|
||||
#endif
|
||||
|
||||
#if defined(HX_USB_DETECT_GLOBAL)
|
||||
uint8_t usb_connected;
|
||||
uint8_t *cable_config;
|
||||
#endif
|
||||
|
||||
#if defined(HX_TP_PROC_GUEST_INFO)
|
||||
struct workqueue_struct *guest_info_wq;
|
||||
struct work_struct guest_info_work;
|
||||
#endif
|
||||
|
||||
|
||||
};
|
||||
|
||||
struct himax_debug {
|
||||
bool flash_dump_going;
|
||||
void (*fp_ts_dbg_func)(struct himax_ts_data *ts, int start);
|
||||
int (*fp_set_diag_cmd)(struct himax_ic_data *ic_data,
|
||||
struct himax_report_data *hx_touch_data);
|
||||
};
|
||||
|
||||
enum input_protocol_type {
|
||||
PROTOCOL_TYPE_A = 0x00,
|
||||
PROTOCOL_TYPE_B = 0x01,
|
||||
};
|
||||
|
||||
#if defined(HX_HIGH_SENSE)
|
||||
void himax_set_HSEN_func(uint8_t HSEN_enable);
|
||||
#endif
|
||||
|
||||
#if defined(HX_SMART_WAKEUP)
|
||||
void himax_set_SMWP_func(uint8_t SMWP_enable);
|
||||
|
||||
#define GEST_PTLG_ID_LEN (4)
|
||||
#define GEST_PTLG_HDR_LEN (4)
|
||||
#define GEST_PTLG_HDR_ID1 (0xCC)
|
||||
#define GEST_PTLG_HDR_ID2 (0x44)
|
||||
#define GEST_PT_MAX_NUM (128)
|
||||
|
||||
extern uint8_t *wake_event_buffer;
|
||||
#endif
|
||||
|
||||
extern int g_mmi_refcnt;
|
||||
extern int *g_inspt_crtra_flag;
|
||||
extern uint32_t g_hx_chip_inited;
|
||||
/*void himax_HW_reset(uint8_t loadconfig,uint8_t int_off);*/
|
||||
|
||||
int himax_chip_common_suspend(struct himax_ts_data *ts);
|
||||
int himax_chip_common_resume(struct himax_ts_data *ts);
|
||||
|
||||
extern struct filename* (*kp_getname_kernel)(const char *filename);
|
||||
extern struct file * (*kp_file_open_name)(struct filename *name,
|
||||
int flags, umode_t mode);
|
||||
|
||||
struct himax_core_fp;
|
||||
extern struct himax_core_fp g_core_fp;
|
||||
extern struct himax_ts_data *private_ts;
|
||||
extern struct himax_ic_data *ic_data;
|
||||
extern struct device *g_device;
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
|
||||
int himax_debug_init(void);
|
||||
int himax_debug_remove(void);
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_INSPECT)
|
||||
extern char *g_rslt_data;
|
||||
extern void (*fp_himax_self_test_init)(void);
|
||||
#endif
|
||||
|
||||
int himax_parse_dt(struct himax_ts_data *ts,
|
||||
struct himax_i2c_platform_data *pdata);
|
||||
int himax_report_data(struct himax_ts_data *ts, int ts_path, int ts_status);
|
||||
|
||||
int himax_report_data_init(void);
|
||||
|
||||
int himax_dev_set(struct himax_ts_data *ts);
|
||||
int himax_input_register_device(struct input_dev *input_dev);
|
||||
|
||||
#endif
|
3033
drivers/input/touchscreen/hxchipset/himax_debug.c
Normal file
3033
drivers/input/touchscreen/hxchipset/himax_debug.c
Normal file
File diff suppressed because it is too large
Load diff
164
drivers/input/touchscreen/hxchipset/himax_debug.h
Normal file
164
drivers/input/touchscreen/hxchipset/himax_debug.h
Normal file
|
@ -0,0 +1,164 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for debug nodes
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef H_HIMAX_DEBUG
|
||||
#define H_HIMAX_DEBUG
|
||||
|
||||
#include "himax_platform.h"
|
||||
#include "himax_common.h"
|
||||
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
extern u8 HX_ESD_RESET_ACTIVATE;
|
||||
extern int hx_EB_event_flag;
|
||||
extern int hx_EC_event_flag;
|
||||
extern int hx_ED_event_flag;
|
||||
#endif
|
||||
|
||||
#define HIMAX_PROC_VENDOR_FILE "vendor"
|
||||
extern struct proc_dir_entry *himax_proc_vendor_file;
|
||||
|
||||
#define HIMAX_PROC_PEN_POS_FILE "pen_pos"
|
||||
|
||||
int himax_touch_proc_init(void);
|
||||
void himax_touch_proc_deinit(void);
|
||||
extern int himax_int_en_set(void);
|
||||
|
||||
extern uint8_t byte_length;
|
||||
extern uint8_t register_command[4];
|
||||
extern uint8_t cfg_flag;
|
||||
|
||||
#define HIMAX_PROC_DIAG_FOLDER "diag"
|
||||
struct proc_dir_entry *himax_proc_diag_dir;
|
||||
#define HIMAX_PROC_STACK_FILE "stack"
|
||||
extern struct proc_dir_entry *himax_proc_stack_file;
|
||||
#define HIMAX_PROC_DELTA_FILE "delta_s"
|
||||
extern struct proc_dir_entry *himax_proc_delta_file;
|
||||
#define HIMAX_PROC_DC_FILE "dc_s"
|
||||
extern struct proc_dir_entry *himax_proc_dc_file;
|
||||
#define HIMAX_PROC_BASELINE_FILE "baseline_s"
|
||||
extern struct proc_dir_entry *himax_proc_baseline_file;
|
||||
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
extern uint32_t *diag_mutual_2;
|
||||
|
||||
int32_t *getMutualBuffer_2(void);
|
||||
void setMutualBuffer_2(uint8_t x_num, uint8_t y_num);
|
||||
#endif
|
||||
extern int32_t *diag_mutual;
|
||||
extern int32_t *diag_mutual_new;
|
||||
extern int32_t *diag_mutual_old;
|
||||
extern uint8_t diag_max_cnt;
|
||||
extern uint8_t hx_state_info[2];
|
||||
extern uint8_t diag_coor[128];
|
||||
extern int32_t *diag_self;
|
||||
extern int32_t *diag_self_new;
|
||||
extern int32_t *diag_self_old;
|
||||
int32_t *getMutualBuffer(void);
|
||||
int32_t *getMutualNewBuffer(void);
|
||||
int32_t *getMutualOldBuffer(void);
|
||||
int32_t *getSelfBuffer(void);
|
||||
int32_t *getSelfNewBuffer(void);
|
||||
int32_t *getSelfOldBuffer(void);
|
||||
void setMutualBuffer(uint8_t x_num, uint8_t y_num);
|
||||
void setMutualNewBuffer(uint8_t x_num, uint8_t y_num);
|
||||
void setMutualOldBuffer(uint8_t x_num, uint8_t y_num);
|
||||
uint8_t process_type;
|
||||
uint8_t mode_flag;
|
||||
uint8_t overflow;
|
||||
|
||||
#define HIMAX_PROC_DEBUG_FILE "debug"
|
||||
extern struct proc_dir_entry *himax_proc_debug_file;
|
||||
extern bool fw_update_complete;
|
||||
extern int handshaking_result;
|
||||
extern unsigned char debug_level_cmd;
|
||||
extern uint8_t cmd_set[8];
|
||||
extern uint8_t mutual_set_flag;
|
||||
|
||||
#define HIMAX_PROC_FLASH_DUMP_FILE "flash_dump"
|
||||
extern struct proc_dir_entry *himax_proc_flash_dump_file;
|
||||
extern int Flash_Size;
|
||||
extern uint8_t *flash_buffer;
|
||||
extern uint8_t g_flash_cmd;
|
||||
extern uint8_t g_flash_progress;
|
||||
extern bool g_flash_dump_rst; /*Fail = 0, Pass = 1*/
|
||||
void setFlashBuffer(void);
|
||||
|
||||
enum flash_dump_prog {
|
||||
START,
|
||||
ONGOING,
|
||||
FINISHED,
|
||||
};
|
||||
|
||||
extern uint32_t **raw_data_array;
|
||||
extern uint8_t X_NUM4;
|
||||
extern uint8_t Y_NUM;
|
||||
extern uint8_t sel_type;
|
||||
|
||||
/* Moved from debug.c */
|
||||
extern struct himax_debug *debug_data;
|
||||
extern unsigned char IC_CHECKSUM;
|
||||
extern int i2c_error_count;
|
||||
extern struct proc_dir_entry *himax_touch_proc_dir;
|
||||
|
||||
#if defined(HX_TP_PROC_GUEST_INFO)
|
||||
extern struct hx_guest_info *g_guest_info_data;
|
||||
extern char *g_guest_info_item[];
|
||||
#endif
|
||||
|
||||
extern int himax_input_register(struct himax_ts_data *ts);
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
extern bool Is_2T2R;
|
||||
#endif
|
||||
|
||||
#if defined(HX_RST_PIN_FUNC)
|
||||
extern void himax_ic_reset(uint8_t loadconfig, uint8_t int_off);
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
extern char *i_CTPM_firmware_name;
|
||||
#endif
|
||||
|
||||
extern uint8_t HX_PROC_SEND_FLAG;
|
||||
extern struct himax_target_report_data *g_target_report_data;
|
||||
extern struct himax_report_data *hx_touch_data;
|
||||
extern int g_ts_dbg;
|
||||
|
||||
/* Moved from debug.c end */
|
||||
#define BUF_SIZE 1024
|
||||
#define CMD_NUM 15
|
||||
char *dbg_cmd_str[] = {
|
||||
"crc_test",
|
||||
"fw_debug",
|
||||
"attn",
|
||||
"layout",
|
||||
"dd_debug",
|
||||
"esd_cnt",
|
||||
"senseonoff",
|
||||
"debug_level",
|
||||
"guest_info",
|
||||
"int_en",
|
||||
"register",
|
||||
"reset",
|
||||
"diag_arr",
|
||||
"diag",
|
||||
NULL
|
||||
};
|
||||
|
||||
int dbg_cmd_flag;
|
||||
char *dbg_cmd_par;
|
||||
ssize_t (*dbg_func_ptr_r[CMD_NUM])(char *buf, size_t len);
|
||||
ssize_t (*dbg_func_ptr_w[CMD_NUM])(char *buf, size_t len);
|
||||
#endif
|
1754
drivers/input/touchscreen/hxchipset/himax_ic_HX83102.c
Normal file
1754
drivers/input/touchscreen/hxchipset/himax_ic_HX83102.c
Normal file
File diff suppressed because it is too large
Load diff
58
drivers/input/touchscreen/hxchipset/himax_ic_HX83102.h
Normal file
58
drivers/input/touchscreen/hxchipset/himax_ic_HX83102.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for HX83102 chipset
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "himax_platform.h"
|
||||
#include "himax_common.h"
|
||||
#include "himax_ic_core.h"
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define hx83102ab_fw_addr_sorting_mode_en 0x100007FC
|
||||
#define hx83102ab_fw_addr_selftest_addr_en 0x100007F8
|
||||
#define hx83102ab_data_adc_cfg_1 0x10007B00
|
||||
#define hx83102a_data_df_rx 48
|
||||
#define hx83102a_data_df_tx 24
|
||||
#define hx83102a_data_df_x_res 2160
|
||||
#define hx83102a_data_df_y_res 3840
|
||||
#define hx83102a_data_adc_num 100
|
||||
#define hx83102b_data_df_x_res 720
|
||||
#define hx83102b_data_df_y_res 1280
|
||||
#define hx83102b_data_adc_num 64
|
||||
|
||||
#define hx83102d_fw_addr_raw_out_sel 0x800204f4
|
||||
#define hx83102d_zf_data_adc_cfg_1 0x10007B00
|
||||
#define hx83102d_zf_data_adc_cfg_2 0x10006A00
|
||||
#define hx83102d_zf_data_adc_cfg_3 0x10007500
|
||||
#define hx83102d_zf_data_bor_prevent_info 0x10007268
|
||||
#define hx83102d_zf_data_notch_info 0x10007300
|
||||
#define hx83102d_zf_func_info_en 0x10007FD0
|
||||
#define hx83102d_zf_po_sub_func 0x10005A00
|
||||
#define hx83102d_zf_data_sram_start_addr 0x20000000
|
||||
#define hx83102d_data_df_x_res 720
|
||||
#define hx83102d_data_df_y_res 1280
|
||||
#define hx83102d_adr_osc_en 0x9000009C
|
||||
#define hx83102d_adr_osc_pw 0x90000280
|
||||
#define hx83102d_data_adc_num 48
|
||||
|
||||
#define hx83102e_fw_addr_raw_out_sel 0x100072EC
|
||||
#define hx83102e_ic_adr_tcon_rst 0x80020004
|
||||
#define hx83102e_data_df_rx 48
|
||||
#define hx83102e_data_df_tx 30
|
||||
#define hx83102e_data_df_x_res 1200
|
||||
#define hx83102e_data_df_y_res 1920
|
||||
#define hx83102e_data_adc_num 100
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
extern u8 HX_ESD_RESET_ACTIVATE;
|
||||
#endif
|
993
drivers/input/touchscreen/hxchipset/himax_ic_core.h
Normal file
993
drivers/input/touchscreen/hxchipset/himax_ic_core.h
Normal file
|
@ -0,0 +1,993 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for ic core functions
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __HIMAX_IC_CORE_H__
|
||||
#define __HIMAX_IC_CORE_H__
|
||||
|
||||
#include "himax_platform.h"
|
||||
#include "himax_common.h"
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define DATA_LEN_8 8
|
||||
#define DATA_LEN_4 4
|
||||
#define ADDR_LEN_4 4
|
||||
#define FLASH_RW_MAX_LEN 256
|
||||
#define FLASH_WRITE_BURST_SZ 8
|
||||
#define PROGRAM_SZ 48
|
||||
#define MAX_I2C_TRANS_SZ 128
|
||||
#define HIMAX_REG_RETRY_TIMES 5
|
||||
#define FW_BIN_16K_SZ 0x4000
|
||||
#define HIMAX_TOUCH_DATA_SIZE 128
|
||||
#define MASK_BIT_0 0x01
|
||||
#define MASK_BIT_1 0x02
|
||||
#define MASK_BIT_2 0x04
|
||||
|
||||
#define FW_SECTOR_PER_BLOCK 8
|
||||
#define FW_PAGE_PER_SECTOR 64
|
||||
#define FW_PAGE_SEZE 128
|
||||
#define HX256B 0x100
|
||||
#define HX1K 0x400
|
||||
#define HX4K 0x1000
|
||||
#define HX_32K_SZ 0x8000
|
||||
#define HX_40K_SZ 0xA000
|
||||
#define HX_48K_SZ 0xC000
|
||||
#define HX64K 0x10000
|
||||
#define HX124K 0x1f000
|
||||
#define HX4000K 0x1000000
|
||||
|
||||
#define HX_NORMAL_MODE 1
|
||||
#define HX_SORTING_MODE 2
|
||||
#define HX_CHANGE_MODE_FAIL (-1)
|
||||
#define HX_RW_REG_FAIL (-1)
|
||||
#define HX_DRIVER_MAX_IC_NUM 12
|
||||
|
||||
#if defined(__HIMAX_HX852xG_MOD__)
|
||||
#define HX_MOD_KSYM_HX852xG HX_MOD_KSYM_HX852xG
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX852xH_MOD__)
|
||||
#define HX_MOD_KSYM_HX852xH HX_MOD_KSYM_HX852xH
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83102_MOD__)
|
||||
#define HX_MOD_KSYM_HX83102 HX_MOD_KSYM_HX83102
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83103_MOD__)
|
||||
#define HX_MOD_KSYM_HX83103 HX_MOD_KSYM_HX83103
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83106_MOD__)
|
||||
#define HX_MOD_KSYM_HX83106 HX_MOD_KSYM_HX83106
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83111_MOD__)
|
||||
#define HX_MOD_KSYM_HX83111 HX_MOD_KSYM_HX83111
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83112_MOD__)
|
||||
#define HX_MOD_KSYM_HX83112 HX_MOD_KSYM_HX83112
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83191_MOD__)
|
||||
#define HX_MOD_KSYM_HX83191 HX_MOD_KSYM_HX83191
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83192_MOD__)
|
||||
#define HX_MOD_KSYM_HX83192 HX_MOD_KSYM_HX83192
|
||||
#endif
|
||||
|
||||
#if defined(__HIMAX_HX83113_MOD__)
|
||||
#define HX_MOD_KSYM_HX83113 HX_MOD_KSYM_HX83113
|
||||
#endif
|
||||
|
||||
/* CORE_INIT */
|
||||
/* CORE_IC */
|
||||
/* CORE_FW */
|
||||
/* CORE_FLASH */
|
||||
/* CORE_SRAM */
|
||||
/* CORE_DRIVER */
|
||||
|
||||
#define HX_0F_DEBUG
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW) || defined(HX_ZERO_FLASH)
|
||||
extern char *i_CTPM_firmware_name;
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
extern int g_f_0f_updat;
|
||||
#endif
|
||||
|
||||
#if defined(HX_TP_PROC_GUEST_INFO)
|
||||
extern struct hx_guest_info *g_guest_info_data;
|
||||
#endif
|
||||
|
||||
void himax_mcu_in_cmd_struct_free(void);
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_ONCELL)
|
||||
void himax_mcu_on_cmd_struct_free(void);
|
||||
#endif
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
extern int g_i_FW_VER;
|
||||
extern int g_i_CFG_VER;
|
||||
extern int g_i_CID_MAJ;
|
||||
extern int g_i_CID_MIN;
|
||||
extern unsigned char *i_CTPM_FW;
|
||||
#endif
|
||||
|
||||
extern unsigned long FW_VER_MAJ_FLASH_ADDR;
|
||||
extern unsigned long FW_VER_MIN_FLASH_ADDR;
|
||||
extern unsigned long CFG_VER_MAJ_FLASH_ADDR;
|
||||
extern unsigned long CFG_VER_MIN_FLASH_ADDR;
|
||||
extern unsigned long CID_VER_MAJ_FLASH_ADDR;
|
||||
extern unsigned long CID_VER_MIN_FLASH_ADDR;
|
||||
|
||||
extern unsigned long FW_VER_MAJ_FLASH_LENG;
|
||||
extern unsigned long FW_VER_MIN_FLASH_LENG;
|
||||
extern unsigned long CFG_VER_MAJ_FLASH_LENG;
|
||||
extern unsigned long CFG_VER_MIN_FLASH_LENG;
|
||||
extern unsigned long CID_VER_MAJ_FLASH_LENG;
|
||||
extern unsigned long CID_VER_MIN_FLASH_LENG;
|
||||
|
||||
extern unsigned char IC_CHECKSUM;
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
extern int g_zero_event_count;
|
||||
#endif
|
||||
|
||||
#if defined(HX_RST_PIN_FUNC)
|
||||
extern u8 HX_HW_RESET_ACTIVATE;
|
||||
void himax_rst_gpio_set(int pinnum, uint8_t value);
|
||||
#endif
|
||||
|
||||
#if defined(HX_USB_DETECT_GLOBAL)
|
||||
void himax_cable_detect_func(bool force_renew);
|
||||
#endif
|
||||
|
||||
int himax_report_data_init(void);
|
||||
extern int i2c_error_count;
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
extern u8 HX_ESD_RESET_ACTIVATE;
|
||||
#endif
|
||||
|
||||
/* CORE_INIT */
|
||||
int himax_mcu_in_cmd_struct_init(void);
|
||||
void himax_mcu_in_cmd_init(void);
|
||||
|
||||
int himax_mcu_on_cmd_struct_init(void);
|
||||
void himax_mcu_on_cmd_init(void);
|
||||
void himax_parse_assign_cmd(uint32_t addr, uint8_t *cmd, int len);
|
||||
|
||||
extern void (*himax_mcu_cmd_struct_free)(void);
|
||||
/* CORE_INIT */
|
||||
|
||||
#if defined(HX_TP_PROC_GUEST_INFO)
|
||||
#define HX_GUEST_INFO_FLASH_SADDR 0x20000
|
||||
#define HX_GUEST_INFO_SIZE 10
|
||||
#define HX_GUEST_INFO_LEN_SIZE 4
|
||||
#define HX_GUEST_INFO_ID_SIZE 4
|
||||
|
||||
struct hx_guest_info {
|
||||
int g_guest_info_ongoing; /* 0 stop, 1 ongoing */
|
||||
uint8_t g_guest_str[10][128];
|
||||
uint8_t g_guest_str_in_format[10][128];
|
||||
uint8_t g_guest_data_type[10];
|
||||
int g_guest_data_len[10];
|
||||
int g_guest_info_type;
|
||||
};
|
||||
#endif
|
||||
|
||||
/* CORE_IC */
|
||||
#define ic_adr_ahb_addr_byte_0 0x00
|
||||
#define ic_adr_ahb_rdata_byte_0 0x08
|
||||
#define ic_adr_ahb_access_direction 0x0c
|
||||
#define ic_adr_conti 0x13
|
||||
#define ic_adr_incr4 0x0D
|
||||
#define ic_adr_i2c_psw_lb 0x31
|
||||
#define ic_adr_i2c_psw_ub 0x32
|
||||
#define ic_cmd_ahb_access_direction_read 0x00
|
||||
#define ic_cmd_conti 0x31
|
||||
#define ic_cmd_incr4 0x10
|
||||
#define ic_cmd_i2c_psw_lb 0x27
|
||||
#define ic_cmd_i2c_psw_ub 0x95
|
||||
#define ic_adr_tcon_on_rst 0x80020020
|
||||
#define ic_addr_adc_on_rst 0x80020094
|
||||
#define ic_adr_psl 0x900000A0
|
||||
#define ic_adr_cs_central_state 0x900000A8
|
||||
#define ic_cmd_rst 0x00000000
|
||||
#define ic_adr_osc_en 0x900880A8
|
||||
#define ic_adr_osc_pw 0x900880E0
|
||||
|
||||
#define on_ic_adr_ahb_addr_byte_0 0x00
|
||||
#define on_ic_adr_ahb_rdata_byte_0 0x08
|
||||
#define on_ic_adr_ahb_access_direction 0x0c
|
||||
#define on_ic_adr_conti 0x13
|
||||
#define on_ic_adr_incr4 0x0D
|
||||
#define on_ic_cmd_ahb_access_direction_read 0x00
|
||||
#define on_ic_cmd_conti 0x31
|
||||
#define on_ic_cmd_incr4 0x10
|
||||
#define on_ic_adr_mcu_ctrl 0x82
|
||||
#define on_ic_cmd_mcu_on 0x25
|
||||
#define on_ic_cmd_mcu_off 0xDA
|
||||
#define on_ic_adr_sleep_ctrl 0x99
|
||||
#define on_ic_cmd_sleep_in 0x80
|
||||
#define on_ic_adr_tcon_ctrl 0x80020000
|
||||
#define on_ic_cmd_tcon_on 0x00000000
|
||||
#define on_ic_adr_wdg_ctrl 0x9000800C
|
||||
#define on_ic_cmd_wdg_psw 0x0000AC53
|
||||
#define on_ic_adr_wdg_cnt_ctrl 0x90008010
|
||||
#define on_ic_cmd_wdg_cnt_clr 0x000035CA
|
||||
/* CORE_IC */
|
||||
|
||||
/* CORE_FW */
|
||||
#define fw_addr_system_reset 0x90000018
|
||||
#define fw_addr_safe_mode_release_pw 0x90000098
|
||||
#define fw_addr_ctrl_fw 0x9000005c
|
||||
#define fw_addr_flag_reset_event 0x900000e4
|
||||
#define fw_addr_hsen_enable 0x10007F14
|
||||
#define fw_addr_smwp_enable 0x10007F10
|
||||
#define fw_usb_detect_addr 0x10007F38
|
||||
#define fw_addr_program_reload_from 0x00000000
|
||||
#define fw_addr_program_reload_to 0x08000000
|
||||
#define fw_addr_program_reload_page_write 0x0000fb00
|
||||
#define fw_addr_raw_out_sel 0x800204b4
|
||||
#define fw_addr_reload_status 0x80050000
|
||||
#define fw_addr_reload_crc32_result 0x80050018
|
||||
#define fw_addr_reload_addr_from 0x80050020
|
||||
#define fw_addr_reload_addr_cmd_beat 0x80050028
|
||||
#define fw_data_system_reset 0x00000055
|
||||
#define fw_data_safe_mode_release_pw_active 0x00000053
|
||||
#define fw_data_safe_mode_release_pw_reset 0x00000000
|
||||
#define fw_data_clear 0x00000000
|
||||
#define fw_data_fw_stop 0x000000A5
|
||||
#define fw_data_program_reload_start 0x0A3C3000
|
||||
#define fw_data_program_reload_compare 0x04663000
|
||||
#define fw_data_program_reload_break 0x15E75678
|
||||
#define fw_addr_selftest_addr_en 0x10007F18
|
||||
#define fw_addr_selftest_result_addr 0x10007f24
|
||||
#define fw_data_selftest_request 0x00006AA6
|
||||
#define fw_addr_criteria_addr 0x10007f1c
|
||||
#define fw_data_criteria_aa_top 0x64
|
||||
#define fw_data_criteria_aa_bot 0x00
|
||||
#define fw_data_criteria_key_top 0x64
|
||||
#define fw_data_criteria_key_bot 0x00
|
||||
#define fw_data_criteria_avg_top 0x64
|
||||
#define fw_data_criteria_avg_bot 0x00
|
||||
#define fw_addr_set_frame_addr 0x10007294
|
||||
#define fw_data_set_frame 0x0000000A
|
||||
#define fw_data_selftest_ack_hb 0xa6
|
||||
#define fw_data_selftest_ack_lb 0x6a
|
||||
#define fw_data_selftest_pass 0xaa
|
||||
#define fw_data_normal_cmd 0x00
|
||||
#define fw_data_normal_status 0x99
|
||||
#define fw_data_sorting_cmd 0xaa
|
||||
#define fw_data_sorting_status 0xcc
|
||||
#define fw_data_idle_dis_pwd 0x17
|
||||
#define fw_data_idle_en_pwd 0x1f
|
||||
#define fw_addr_sorting_mode_en 0x10007f04
|
||||
#define fw_addr_fw_mode_status 0x10007088
|
||||
#define fw_addr_icid_addr 0x900000d0
|
||||
#define fw_addr_fw_ver_addr 0x10007004
|
||||
#define fw_addr_fw_cfg_addr 0x10007084
|
||||
#define fw_addr_fw_vendor_addr 0x10007000
|
||||
#define fw_addr_cus_info 0x10007008
|
||||
#define fw_addr_proj_info 0x10007014
|
||||
#define fw_addr_fw_state_addr 0x900000f8
|
||||
#define fw_addr_fw_dbg_msg_addr 0x10007f40
|
||||
#define fw_addr_chk_fw_status 0x900000a8
|
||||
#define fw_addr_dd_handshak_addr 0x900000fc
|
||||
#define fw_addr_dd_data_addr 0x10007f80
|
||||
#define fw_data_dd_request 0xaa
|
||||
#define fw_data_dd_ack 0xbb
|
||||
#define fw_data_rawdata_ready_hb 0xa3
|
||||
#define fw_data_rawdata_ready_lb 0x3a
|
||||
#define fw_addr_ahb_addr 0x11
|
||||
#define fw_data_ahb_dis 0x00
|
||||
#define fw_data_ahb_en 0x01
|
||||
#define fw_addr_event_addr 0x30
|
||||
#define fw_func_handshaking_pwd 0xA55AA55A
|
||||
#define fw_func_handshaking_end 0x77887788
|
||||
#define fw_addr_ulpm_33 0x33
|
||||
#define fw_addr_ulpm_34 0x34
|
||||
#define fw_data_ulpm_11 0x11
|
||||
#define fw_data_ulpm_22 0x22
|
||||
#define fw_data_ulpm_33 0x33
|
||||
#define fw_data_ulpm_aa 0xAA
|
||||
|
||||
#define on_fw_addr_smwp_enable 0xA2
|
||||
#define on_fw_usb_detect_addr 0xA4
|
||||
#define on_fw_addr_program_reload_from 0x00000000
|
||||
#define on_fw_addr_raw_out_sel 0x98
|
||||
#define on_fw_addr_flash_checksum 0x80000044
|
||||
#define on_fw_data_flash_checksum 0x00000491
|
||||
#define on_fw_addr_crc_value 0x80000050
|
||||
#define on_fw_data_safe_mode_release_pw_active 0x00000053
|
||||
#define on_fw_data_safe_mode_release_pw_reset 0x00000000
|
||||
#define on_fw_addr_criteria_addr 0x9A
|
||||
#define on_fw_data_selftest_pass 0xaa
|
||||
#define on_fw_addr_reK_crtl 0x8000000C
|
||||
#define on_fw_data_reK_en 0x02
|
||||
#define on_fw_data_reK_dis 0xFD
|
||||
#define on_fw_data_rst_init 0xF0
|
||||
#define on_fw_data_dc_set 0x02
|
||||
#define on_fw_data_bank_set 0x03
|
||||
#define on_fw_addr_selftest_addr_en 0x98
|
||||
#define on_fw_addr_selftest_result_addr 0x9B
|
||||
#define on_fw_data_selftest_request 0x06
|
||||
#define on_fw_data_thx_avg_mul_dc_lsb 0x22
|
||||
#define on_fw_data_thx_avg_mul_dc_msb 0x0B
|
||||
#define on_fw_data_thx_mul_dc_up_low_bud 0x64
|
||||
#define on_fw_data_thx_avg_slf_dc_lsb 0x14
|
||||
#define on_fw_data_thx_avg_slf_dc_msb 0x05
|
||||
#define on_fw_data_thx_slf_dc_up_low_bud 0x64
|
||||
#define on_fw_data_thx_slf_bank_up 0x40
|
||||
#define on_fw_data_thx_slf_bank_low 0x00
|
||||
#define on_fw_data_idle_dis_pwd 0x40
|
||||
#define on_fw_data_idle_en_pwd 0x00
|
||||
#define on_fw_addr_fw_mode_status 0x99
|
||||
#define on_fw_addr_icid_addr 0x900000d0
|
||||
#define on_fw_addr_fw_ver_start 0x90
|
||||
#define on_fw_data_rawdata_ready_hb 0xa3
|
||||
#define on_fw_data_rawdata_ready_lb 0x3a
|
||||
#define on_fw_addr_ahb_addr 0x11
|
||||
#define on_fw_data_ahb_dis 0x00
|
||||
#define on_fw_data_ahb_en 0x01
|
||||
#define on_fw_addr_event_addr 0x30
|
||||
/* CORE_FW */
|
||||
|
||||
/* CORE_FLASH */
|
||||
#define flash_addr_ctrl_base 0x80000000
|
||||
#define flash_addr_spi200_trans_fmt (flash_addr_ctrl_base + 0x10)
|
||||
#define flash_addr_spi200_trans_ctrl (flash_addr_ctrl_base + 0x20)
|
||||
#define flash_addr_spi200_cmd (flash_addr_ctrl_base + 0x24)
|
||||
#define flash_addr_spi200_addr (flash_addr_ctrl_base + 0x28)
|
||||
#define flash_addr_spi200_data (flash_addr_ctrl_base + 0x2c)
|
||||
#define flash_addr_spi200_fifo_rst (flash_addr_ctrl_base + 0x30)
|
||||
#define flash_addr_spi200_rst_status (flash_addr_ctrl_base + 0x34)
|
||||
#define flash_addr_spi200_flash_speed (flash_addr_ctrl_base + 0x40)
|
||||
#define flash_addr_spi200_bt_num (flash_addr_ctrl_base + 0xe8)
|
||||
#define flash_data_spi200_txfifo_rst 0x00000004
|
||||
#define flash_data_spi200_rxfifo_rst 0x00000002
|
||||
#define flash_data_spi200_trans_fmt 0x00020780
|
||||
#define flash_data_spi200_trans_ctrl_1 0x42000003
|
||||
#define flash_data_spi200_trans_ctrl_2 0x47000000
|
||||
#define flash_data_spi200_trans_ctrl_3 0x67000000
|
||||
#define flash_data_spi200_trans_ctrl_4 0x610ff000
|
||||
#define flash_data_spi200_trans_ctrl_5 0x694002ff
|
||||
#define flash_data_spi200_trans_ctrl_6 0x42000000
|
||||
#define flash_data_spi200_trans_ctrl_7 0x6940020f
|
||||
#define flash_data_spi200_cmd_1 0x00000005
|
||||
#define flash_data_spi200_cmd_2 0x00000006
|
||||
#define flash_data_spi200_cmd_3 0x000000C7
|
||||
#define flash_data_spi200_cmd_4 0x000000D8
|
||||
#define flash_data_spi200_cmd_5 0x00000020
|
||||
#define flash_data_spi200_cmd_6 0x00000002
|
||||
#define flash_data_spi200_cmd_7 0x0000003b
|
||||
#define flash_data_spi200_cmd_8 0x00000003
|
||||
#define flash_data_spi200_addr 0x00000000
|
||||
|
||||
#define on_flash_addr_ctrl_base 0x80000000
|
||||
#define on_flash_addr_ctrl_auto 0x80000004
|
||||
#define on_flash_data_main_erase 0x0000A50D
|
||||
#define on_flash_data_auto 0xA5
|
||||
#define on_flash_data_main_read 0x03
|
||||
#define on_flash_data_page_write 0x05
|
||||
#define on_flash_data_spp_read 0x10
|
||||
#define on_flash_data_sfr_read 0x14
|
||||
#define on_flash_addr_ahb_ctrl 0x80000020
|
||||
#define on_flash_data_ahb_squit 0x00000001
|
||||
#define on_flash_addr_unlock_0 0x00000000
|
||||
#define on_flash_addr_unlock_4 0x00000004
|
||||
#define on_flash_addr_unlock_8 0x00000008
|
||||
#define on_flash_addr_unlock_c 0x0000000C
|
||||
#define on_flash_data_cmd0 0x28178EA0
|
||||
#define on_flash_data_cmd1 0x0A0E03FF
|
||||
#define on_flash_data_cmd2 0x8C203D0C
|
||||
#define on_flash_data_cmd3 0x00300263
|
||||
#define on_flash_data_lock 0x03400000
|
||||
/* CORE_FLASH */
|
||||
|
||||
/* CORE_SRAM */
|
||||
#define sram_adr_mkey 0x100070E8
|
||||
#define sram_adr_rawdata_addr 0x10000000
|
||||
#define sram_adr_rawdata_end 0x00000000
|
||||
#define sram_passwrd_start 0x5AA5
|
||||
#define sram_passwrd_end 0xA55A
|
||||
|
||||
#define on_sram_adr_rawdata_addr 0x080002E0
|
||||
#define on_sram_adr_rawdata_end 0x00000000
|
||||
#define on_sram_cmd_conti 0x44332211
|
||||
#define on_sram_cmd_fin 0x00000000
|
||||
#define on_sram_passwrd_start 0x5AA5
|
||||
#define on_sram_passwrd_end 0xA55A
|
||||
/* CORE_SRAM */
|
||||
|
||||
/* CORE_DRIVER */
|
||||
#define driver_addr_fw_define_flash_reload 0x10007f00
|
||||
#define driver_addr_fw_define_2nd_flash_reload 0x100072c0
|
||||
#define driver_data_fw_define_flash_reload_dis 0x0000a55a
|
||||
#define driver_data_fw_define_flash_reload_en 0x00000000
|
||||
#define driver_addr_fw_define_int_is_edge 0x10007088
|
||||
#define driver_addr_fw_define_rxnum_txnum_maxpt 0x100070f4
|
||||
#define driver_data_fw_define_rxnum_txnum_maxpt_sorting 0x00000008
|
||||
#define driver_data_fw_define_rxnum_txnum_maxpt_normal 0x00000014
|
||||
#define driver_addr_fw_define_xy_res_enable 0x100070f8
|
||||
#define driver_addr_fw_define_x_y_res 0x100070fc
|
||||
#define driver_data_df_rx 36
|
||||
#define driver_data_df_tx 18
|
||||
#define driver_data_df_pt 10
|
||||
#define driver_data_df_x_res 1080
|
||||
#define driver_data_df_y_res 1920
|
||||
#define on_driver_addr_fw_define_int_is_edge 0x10007088
|
||||
#define on_driver_data_df_rx 28
|
||||
#define on_driver_data_df_tx 14
|
||||
#define on_driver_data_df_pt 10
|
||||
#define on_driver_data_df_x_res 1080
|
||||
#define on_driver_data_df_y_res 1920
|
||||
#if !defined(HX_NEW_EVENT_STACK_FORMAT)
|
||||
#define on_driver_addr_fw_rx_tx_maxpt_num 0x0800001C
|
||||
#define on_driver_addr_fw_xy_rev_int_edge 0x0800000C
|
||||
#define on_driver_addr_fw_define_x_y_res 0x08000030
|
||||
#else
|
||||
#define on_driver_addr_fw_rx_tx_maxpt_num 0x08000004
|
||||
#define on_driver_addr_fw_maxpt_bt_num 0x0800000C
|
||||
#define on_driver_addr_fw_xy_rev_int_edge 0x08000110
|
||||
#define on_driver_addr_fw_define_x_y_res 0x08000010
|
||||
#endif
|
||||
|
||||
/* CORE_DRIVER */
|
||||
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
#define zf_data_dis_flash_reload 0x00009AA9
|
||||
#define zf_addr_system_reset 0x90000018
|
||||
#define zf_data_system_reset 0x00000055
|
||||
#define zf_data_sram_start_addr 0x08000000
|
||||
#define zf_data_cfg_info 0x10007000
|
||||
#define zf_data_fw_cfg_1 0x10007084
|
||||
#define zf_data_fw_cfg_2 0x10007264
|
||||
#define zf_data_fw_cfg_3 0x10007300
|
||||
#define zf_data_adc_cfg_1 0x10006A00
|
||||
#define zf_data_adc_cfg_2 0x10007B28
|
||||
#define zf_data_adc_cfg_3 0x10007AF0
|
||||
#define zf_data_map_table 0x10007500
|
||||
/* #define zf_data_mode_switch 0x10007294*/
|
||||
#define zf_addr_sts_chk 0x900000A8
|
||||
#define zf_data_activ_sts 0x05
|
||||
#define zf_addr_activ_relod 0x90000048
|
||||
#define zf_data_activ_in 0xEC
|
||||
|
||||
#if defined(HX_CODE_OVERLAY)
|
||||
#define ovl_section_num 3
|
||||
#define ovl_gesture_request 0x11
|
||||
#define ovl_gesture_reply 0x22
|
||||
#define ovl_border_request 0x55
|
||||
#define ovl_border_reply 0x66
|
||||
#define ovl_sorting_request 0x99
|
||||
#define ovl_sorting_reply 0xAA
|
||||
#define ovl_fault 0xFF
|
||||
#endif
|
||||
|
||||
struct zf_info {
|
||||
uint8_t sram_addr[4];
|
||||
int write_size;
|
||||
uint32_t fw_addr;
|
||||
uint32_t cfg_addr;
|
||||
};
|
||||
#endif
|
||||
|
||||
struct ic_operation {
|
||||
uint8_t addr_ahb_addr_byte_0[1];
|
||||
uint8_t addr_ahb_rdata_byte_0[1];
|
||||
uint8_t addr_ahb_access_direction[1];
|
||||
uint8_t addr_conti[1];
|
||||
uint8_t addr_incr4[1];
|
||||
uint8_t adr_i2c_psw_lb[1];
|
||||
uint8_t adr_i2c_psw_ub[1];
|
||||
uint8_t data_ahb_access_direction_read[1];
|
||||
uint8_t data_conti[1];
|
||||
uint8_t data_incr4[1];
|
||||
uint8_t data_i2c_psw_lb[1];
|
||||
uint8_t data_i2c_psw_ub[1];
|
||||
uint8_t addr_tcon_on_rst[4];
|
||||
uint8_t addr_adc_on_rst[4];
|
||||
uint8_t addr_psl[4];
|
||||
uint8_t addr_cs_central_state[4];
|
||||
uint8_t data_rst[4];
|
||||
uint8_t adr_osc_en[4];
|
||||
uint8_t adr_osc_pw[4];
|
||||
};
|
||||
|
||||
struct fw_operation {
|
||||
uint8_t addr_system_reset[4];
|
||||
uint8_t addr_safe_mode_release_pw[4];
|
||||
uint8_t addr_ctrl_fw_isr[4];
|
||||
uint8_t addr_flag_reset_event[4];
|
||||
uint8_t addr_hsen_enable[4];
|
||||
uint8_t addr_smwp_enable[4];
|
||||
uint8_t addr_program_reload_from[4];
|
||||
uint8_t addr_program_reload_to[4];
|
||||
uint8_t addr_program_reload_page_write[4];
|
||||
uint8_t addr_raw_out_sel[4];
|
||||
uint8_t addr_reload_status[4];
|
||||
uint8_t addr_reload_crc32_result[4];
|
||||
uint8_t addr_reload_addr_from[4];
|
||||
uint8_t addr_reload_addr_cmd_beat[4];
|
||||
uint8_t addr_selftest_addr_en[4];
|
||||
uint8_t addr_criteria_addr[4];
|
||||
uint8_t addr_set_frame_addr[4];
|
||||
uint8_t addr_selftest_result_addr[4];
|
||||
uint8_t addr_sorting_mode_en[4];
|
||||
uint8_t addr_fw_mode_status[4];
|
||||
uint8_t addr_icid_addr[4];
|
||||
uint8_t addr_fw_ver_addr[4];
|
||||
uint8_t addr_fw_cfg_addr[4];
|
||||
uint8_t addr_fw_vendor_addr[4];
|
||||
uint8_t addr_cus_info[4];
|
||||
uint8_t addr_proj_info[4];
|
||||
uint8_t addr_fw_state_addr[4];
|
||||
uint8_t addr_fw_dbg_msg_addr[4];
|
||||
uint8_t addr_chk_fw_status[4];
|
||||
uint8_t addr_dd_handshak_addr[4];
|
||||
uint8_t addr_dd_data_addr[4];
|
||||
uint8_t data_system_reset[4];
|
||||
uint8_t data_safe_mode_release_pw_active[4];
|
||||
uint8_t data_safe_mode_release_pw_reset[4];
|
||||
uint8_t data_clear[4];
|
||||
uint8_t data_fw_stop[4];
|
||||
uint8_t data_program_reload_start[4];
|
||||
uint8_t data_program_reload_compare[4];
|
||||
uint8_t data_program_reload_break[4];
|
||||
uint8_t data_selftest_request[4];
|
||||
uint8_t data_criteria_aa_top[1];
|
||||
uint8_t data_criteria_aa_bot[1];
|
||||
uint8_t data_criteria_key_top[1];
|
||||
uint8_t data_criteria_key_bot[1];
|
||||
uint8_t data_criteria_avg_top[1];
|
||||
uint8_t data_criteria_avg_bot[1];
|
||||
uint8_t data_set_frame[4];
|
||||
uint8_t data_selftest_ack_hb[1];
|
||||
uint8_t data_selftest_ack_lb[1];
|
||||
uint8_t data_selftest_pass[1];
|
||||
uint8_t data_normal_cmd[1];
|
||||
uint8_t data_normal_status[1];
|
||||
uint8_t data_sorting_cmd[1];
|
||||
uint8_t data_sorting_status[1];
|
||||
uint8_t data_dd_request[1];
|
||||
uint8_t data_dd_ack[1];
|
||||
uint8_t data_idle_dis_pwd[1];
|
||||
uint8_t data_idle_en_pwd[1];
|
||||
uint8_t data_rawdata_ready_hb[1];
|
||||
uint8_t data_rawdata_ready_lb[1];
|
||||
uint8_t addr_ahb_addr[1];
|
||||
uint8_t data_ahb_dis[1];
|
||||
uint8_t data_ahb_en[1];
|
||||
uint8_t addr_event_addr[1];
|
||||
uint8_t addr_usb_detect[4];
|
||||
uint8_t addr_ulpm_33[1];
|
||||
uint8_t addr_ulpm_34[1];
|
||||
uint8_t data_ulpm_11[1];
|
||||
uint8_t data_ulpm_22[1];
|
||||
uint8_t data_ulpm_33[1];
|
||||
uint8_t data_ulpm_aa[1];
|
||||
};
|
||||
|
||||
struct flash_operation {
|
||||
uint8_t addr_spi200_trans_fmt[4];
|
||||
uint8_t addr_spi200_trans_ctrl[4];
|
||||
uint8_t addr_spi200_fifo_rst[4];
|
||||
uint8_t addr_spi200_rst_status[4];
|
||||
uint8_t addr_spi200_flash_speed[4];
|
||||
uint8_t addr_spi200_cmd[4];
|
||||
uint8_t addr_spi200_addr[4];
|
||||
uint8_t addr_spi200_data[4];
|
||||
uint8_t addr_spi200_bt_num[4];
|
||||
|
||||
uint8_t data_spi200_txfifo_rst[4];
|
||||
uint8_t data_spi200_rxfifo_rst[4];
|
||||
uint8_t data_spi200_trans_fmt[4];
|
||||
uint8_t data_spi200_trans_ctrl_1[4];
|
||||
uint8_t data_spi200_trans_ctrl_2[4];
|
||||
uint8_t data_spi200_trans_ctrl_3[4];
|
||||
uint8_t data_spi200_trans_ctrl_4[4];
|
||||
uint8_t data_spi200_trans_ctrl_5[4];
|
||||
uint8_t data_spi200_trans_ctrl_6[4];
|
||||
uint8_t data_spi200_trans_ctrl_7[4];
|
||||
uint8_t data_spi200_cmd_1[4];
|
||||
uint8_t data_spi200_cmd_2[4];
|
||||
uint8_t data_spi200_cmd_3[4];
|
||||
uint8_t data_spi200_cmd_4[4];
|
||||
uint8_t data_spi200_cmd_5[4];
|
||||
uint8_t data_spi200_cmd_6[4];
|
||||
uint8_t data_spi200_cmd_7[4];
|
||||
uint8_t data_spi200_cmd_8[4];
|
||||
uint8_t data_spi200_addr[4];
|
||||
};
|
||||
|
||||
struct sram_operation {
|
||||
uint8_t addr_mkey[4];
|
||||
uint8_t addr_rawdata_addr[4];
|
||||
uint8_t addr_rawdata_end[4];
|
||||
uint8_t passwrd_start[2];
|
||||
uint8_t passwrd_end[2];
|
||||
};
|
||||
|
||||
struct driver_operation {
|
||||
uint8_t addr_fw_define_flash_reload[4];
|
||||
uint8_t addr_fw_define_2nd_flash_reload[4];
|
||||
uint8_t addr_fw_define_int_is_edge[4];
|
||||
uint8_t addr_fw_define_rxnum_txnum_maxpt[4];
|
||||
uint8_t addr_fw_define_xy_res_enable[4];
|
||||
uint8_t addr_fw_define_x_y_res[4];
|
||||
uint8_t data_df_rx[1];
|
||||
uint8_t data_df_tx[1];
|
||||
uint8_t data_df_pt[1];
|
||||
uint8_t data_df_x_res[2];
|
||||
uint8_t data_df_y_res[2];
|
||||
uint8_t data_fw_define_flash_reload_dis[4];
|
||||
uint8_t data_fw_define_flash_reload_en[4];
|
||||
uint8_t data_fw_define_rxnum_txnum_maxpt_sorting[4];
|
||||
uint8_t data_fw_define_rxnum_txnum_maxpt_normal[4];
|
||||
};
|
||||
|
||||
struct zf_operation {
|
||||
uint8_t data_dis_flash_reload[4];
|
||||
uint8_t addr_system_reset[4];
|
||||
uint8_t data_system_reset[4];
|
||||
uint8_t data_sram_start_addr[4];
|
||||
uint8_t data_sram_clean[4];
|
||||
uint8_t data_cfg_info[4];
|
||||
uint8_t data_fw_cfg_1[4];
|
||||
uint8_t data_fw_cfg_2[4];
|
||||
uint8_t data_fw_cfg_3[4];
|
||||
uint8_t data_adc_cfg_1[4];
|
||||
uint8_t data_adc_cfg_2[4];
|
||||
uint8_t data_adc_cfg_3[4];
|
||||
uint8_t data_map_table[4];
|
||||
/* uint8_t data_mode_switch[4];*/
|
||||
uint8_t addr_sts_chk[4];
|
||||
uint8_t data_activ_sts[1];
|
||||
uint8_t addr_activ_relod[4];
|
||||
uint8_t data_activ_in[1];
|
||||
};
|
||||
|
||||
struct himax_core_command_operation {
|
||||
struct ic_operation *ic_op;
|
||||
struct fw_operation *fw_op;
|
||||
struct flash_operation *flash_op;
|
||||
struct sram_operation *sram_op;
|
||||
struct driver_operation *driver_op;
|
||||
struct zf_operation *zf_op;
|
||||
};
|
||||
|
||||
struct on_ic_operation {
|
||||
uint8_t addr_ahb_addr_byte_0[1];
|
||||
uint8_t addr_ahb_rdata_byte_0[1];
|
||||
uint8_t addr_ahb_access_direction[1];
|
||||
uint8_t addr_conti[1];
|
||||
uint8_t addr_incr4[1];
|
||||
uint8_t adr_mcu_ctrl[1];
|
||||
uint8_t data_ahb_access_direction_read[1];
|
||||
uint8_t data_conti[1];
|
||||
uint8_t data_incr4[1];
|
||||
uint8_t cmd_mcu_on[1];
|
||||
uint8_t cmd_mcu_off[1];
|
||||
uint8_t adr_sleep_ctrl[1];
|
||||
uint8_t cmd_sleep_in[1];
|
||||
uint8_t adr_tcon_ctrl[4];
|
||||
uint8_t cmd_tcon_on[4];
|
||||
uint8_t adr_wdg_ctrl[4];
|
||||
uint8_t cmd_wdg_psw[4];
|
||||
uint8_t adr_wdg_cnt_ctrl[4];
|
||||
uint8_t cmd_wdg_cnt_clr[4];
|
||||
};
|
||||
|
||||
struct on_fw_operation {
|
||||
uint8_t addr_smwp_enable[1];
|
||||
uint8_t addr_program_reload_from[4];
|
||||
uint8_t addr_raw_out_sel[1];
|
||||
uint8_t addr_flash_checksum[4];
|
||||
uint8_t data_flash_checksum[4];
|
||||
uint8_t addr_crc_value[4];
|
||||
uint8_t addr_reload_status[4];
|
||||
uint8_t addr_reload_crc32_result[4];
|
||||
uint8_t addr_reload_addr_from[4];
|
||||
uint8_t addr_reload_addr_cmd_beat[4];
|
||||
uint8_t addr_set_frame_addr[4];
|
||||
uint8_t addr_fw_mode_status[1];
|
||||
uint8_t addr_icid_addr[4];
|
||||
uint8_t addr_fw_ver_start[1];
|
||||
uint8_t data_safe_mode_release_pw_active[4];
|
||||
uint8_t data_safe_mode_release_pw_reset[4];
|
||||
uint8_t data_clear[4];
|
||||
uint8_t addr_criteria_addr[1];
|
||||
uint8_t data_selftest_pass[1];
|
||||
uint8_t addr_reK_crtl[4];
|
||||
uint8_t data_reK_en[1];
|
||||
uint8_t data_reK_dis[1];
|
||||
uint8_t data_rst_init[1];
|
||||
uint8_t data_dc_set[1];
|
||||
uint8_t data_bank_set[1];
|
||||
uint8_t addr_selftest_addr_en[1];
|
||||
uint8_t addr_selftest_result_addr[1];
|
||||
uint8_t data_selftest_request[1];
|
||||
uint8_t data_thx_avg_mul_dc_lsb[1];
|
||||
uint8_t data_thx_avg_mul_dc_msb[1];
|
||||
uint8_t data_thx_mul_dc_up_low_bud[1];
|
||||
uint8_t data_thx_avg_slf_dc_lsb[1];
|
||||
uint8_t data_thx_avg_slf_dc_msb[1];
|
||||
uint8_t data_thx_slf_dc_up_low_bud[1];
|
||||
uint8_t data_thx_slf_bank_up[1];
|
||||
uint8_t data_thx_slf_bank_low[1];
|
||||
uint8_t data_idle_dis_pwd[1];
|
||||
uint8_t data_idle_en_pwd[1];
|
||||
uint8_t data_rawdata_ready_hb[1];
|
||||
uint8_t data_rawdata_ready_lb[1];
|
||||
uint8_t addr_ahb_addr[1];
|
||||
uint8_t data_ahb_dis[1];
|
||||
uint8_t data_ahb_en[1];
|
||||
uint8_t addr_event_addr[1];
|
||||
uint8_t addr_usb_detect[1];
|
||||
};
|
||||
|
||||
struct on_flash_operation {
|
||||
uint8_t addr_ctrl_base[4];
|
||||
uint8_t addr_ctrl_auto[4];
|
||||
uint8_t data_main_erase[4];
|
||||
uint8_t data_auto[1];
|
||||
uint8_t data_main_read[1];
|
||||
uint8_t data_page_write[1];
|
||||
uint8_t data_sfr_read[1];
|
||||
uint8_t data_spp_read[1];
|
||||
uint8_t addr_ahb_ctrl[4];
|
||||
uint8_t data_ahb_squit[4];
|
||||
|
||||
uint8_t addr_unlock_0[4];
|
||||
uint8_t addr_unlock_4[4];
|
||||
uint8_t addr_unlock_8[4];
|
||||
uint8_t addr_unlock_c[4];
|
||||
uint8_t data_cmd0[4];
|
||||
uint8_t data_cmd1[4];
|
||||
uint8_t data_cmd2[4];
|
||||
uint8_t data_cmd3[4];
|
||||
uint8_t data_lock[4];
|
||||
};
|
||||
|
||||
struct on_sram_operation {
|
||||
uint8_t addr_rawdata_addr[4];
|
||||
uint8_t addr_rawdata_end[4];
|
||||
uint8_t data_conti[4];
|
||||
uint8_t data_fin[4];
|
||||
uint8_t passwrd_start[2];
|
||||
uint8_t passwrd_end[2];
|
||||
};
|
||||
|
||||
struct on_driver_operation {
|
||||
uint8_t addr_fw_define_int_is_edge[4];
|
||||
uint8_t addr_fw_rx_tx_maxpt_num[4];
|
||||
#if defined(HX_NEW_EVENT_STACK_FORMAT)
|
||||
uint8_t addr_fw_maxpt_bt_num[4];
|
||||
#endif
|
||||
uint8_t addr_fw_xy_rev_int_edge[4];
|
||||
uint8_t addr_fw_define_x_y_res[4];
|
||||
uint8_t data_fw_define_rxnum_txnum_maxpt_sorting[4];
|
||||
uint8_t data_fw_define_rxnum_txnum_maxpt_normal[4];
|
||||
uint8_t data_df_rx[1];
|
||||
uint8_t data_df_tx[1];
|
||||
uint8_t data_df_pt[1];
|
||||
uint8_t data_df_x_res[2];
|
||||
uint8_t data_df_y_res[2];
|
||||
};
|
||||
|
||||
struct himax_on_core_command_operation {
|
||||
struct on_ic_operation *ic_op;
|
||||
struct on_fw_operation *fw_op;
|
||||
struct on_flash_operation *flash_op;
|
||||
struct on_sram_operation *sram_op;
|
||||
struct on_driver_operation *driver_op;
|
||||
};
|
||||
|
||||
struct himax_chip_detect {
|
||||
bool (*fp_chip_detect)(void);
|
||||
};
|
||||
|
||||
struct himax_chip_entry {
|
||||
struct himax_chip_detect *core_chip_dt;
|
||||
uint32_t hx_ic_dt_num;
|
||||
};
|
||||
|
||||
struct himax_core_fp {
|
||||
/* CORE_IC */
|
||||
void (*fp_burst_enable)(uint8_t auto_add_4_byte);
|
||||
int (*fp_register_read)(uint8_t *read_addr, uint32_t read_length,
|
||||
uint8_t *read_data, uint8_t cfg_flag);
|
||||
/*int (*fp_flash_write_burst)(uint8_t *reg_byte, uint8_t *write_data);*/
|
||||
/*void (*fp_flash_write_burst_lenth)(uint8_t *reg_byte,
|
||||
* uint8_t *write_data, uint32_t length);
|
||||
*/
|
||||
int (*fp_register_write)(uint8_t *write_addr, uint32_t write_length,
|
||||
uint8_t *write_data, uint8_t cfg_flag);
|
||||
void (*fp_interface_on)(void);
|
||||
void (*fp_sense_on)(uint8_t FlashMode);
|
||||
void (*fp_tcon_on)(void);
|
||||
bool (*fp_watch_dog_off)(void);
|
||||
bool (*fp_sense_off)(bool check_en);
|
||||
void (*fp_sleep_in)(void);
|
||||
bool (*fp_wait_wip)(int Timing);
|
||||
void (*fp_init_psl)(void);
|
||||
void (*fp_resume_ic_action)(void);
|
||||
void (*fp_suspend_ic_action)(void);
|
||||
void (*fp_power_on_init)(void);
|
||||
bool (*fp_dd_clk_set)(bool enable);
|
||||
void (*fp_dd_reg_en)(bool enable);
|
||||
bool (*fp_dd_reg_write)(uint8_t addr, uint8_t pa_num, int len,
|
||||
uint8_t *data, uint8_t bank);
|
||||
bool (*fp_dd_reg_read)(uint8_t addr, uint8_t pa_num, int len,
|
||||
uint8_t *data, uint8_t bank);
|
||||
bool (*fp_ic_id_read)(void);
|
||||
bool (*fp_slave_tcon_reset)(void);
|
||||
bool (*fp_slave_adc_reset_slave)(void);
|
||||
bool (*fp_slave_wdt_off_slave)(void);
|
||||
/* CORE_IC */
|
||||
|
||||
/* CORE_FW */
|
||||
void (*fp_parse_raw_data)(struct himax_report_data *hx_touch_data,
|
||||
int mul_num,
|
||||
int self_num,
|
||||
uint8_t diag_cmd,
|
||||
int16_t *mutual_data,
|
||||
int16_t *self_data);
|
||||
void (*fp_system_reset)(void);
|
||||
int (*fp_Calculate_CRC_with_AP)(unsigned char *FW_content,
|
||||
int CRC_from_FW,
|
||||
int len);
|
||||
uint32_t (*fp_check_CRC)(uint8_t *start_addr, int reload_length);
|
||||
void (*fp_set_reload_cmd)(uint8_t *write_data,
|
||||
int idx,
|
||||
uint32_t cmd_from,
|
||||
uint32_t cmd_to,
|
||||
uint32_t cmd_beat);
|
||||
bool (*fp_program_reload)(void);
|
||||
void (*fp_set_SMWP_enable)(uint8_t SMWP_enable, bool suspended);
|
||||
void (*fp_set_HSEN_enable)(uint8_t HSEN_enable, bool suspended);
|
||||
void (*fp_diag_register_set)(uint8_t diag_command,
|
||||
uint8_t storage_type, bool is_dirly);
|
||||
#if defined(HX_TP_SELF_TEST_DRIVER)
|
||||
void (*fp_control_reK)(bool enable);
|
||||
#endif
|
||||
int (*fp_chip_self_test)(struct seq_file *s, void *v);
|
||||
void (*fp_idle_mode)(int disable);
|
||||
void (*fp_reload_disable)(int disable);
|
||||
bool (*fp_check_chip_version)(void);
|
||||
int (*fp_read_ic_trigger_type)(void);
|
||||
int (*fp_read_i2c_status)(void);
|
||||
void (*fp_read_FW_ver)(void);
|
||||
bool (*fp_read_event_stack)(uint8_t *buf, uint8_t length);
|
||||
void (*fp_return_event_stack)(void);
|
||||
bool (*fp_calculateChecksum)(bool change_iref, uint32_t size);
|
||||
int (*fp_read_FW_status)(uint8_t *state_addr, uint8_t *tmp_addr);
|
||||
void (*fp_irq_switch)(int switch_on);
|
||||
int (*fp_assign_sorting_mode)(uint8_t *tmp_data);
|
||||
int (*fp_check_sorting_mode)(uint8_t *tmp_data);
|
||||
int (*fp_get_max_dc)(void);
|
||||
uint8_t (*fp_read_DD_status)(uint8_t *cmd_set, uint8_t *tmp_data);
|
||||
int (*fp_ulpm_in)(void);
|
||||
int (*fp_black_gest_ctrl)(bool enable);
|
||||
int (*_diff_overlay_bin)(void);
|
||||
/* CORE_FW */
|
||||
|
||||
/* CORE_FLASH */
|
||||
void (*fp_chip_erase)(void);
|
||||
bool (*fp_block_erase)(int start_addr, int length);
|
||||
bool (*fp_sector_erase)(int start_addr);
|
||||
void (*fp_flash_programming)(uint8_t *FW_content, int FW_Size);
|
||||
void (*fp_flash_page_write)(uint8_t *write_addr, int length,
|
||||
uint8_t *write_data);
|
||||
int (*fp_fts_ctpm_fw_upgrade_with_sys_fs_32k)(unsigned char *fw,
|
||||
int len, bool change_iref);
|
||||
int (*fp_fts_ctpm_fw_upgrade_with_sys_fs_60k)(unsigned char *fw,
|
||||
int len, bool change_iref);
|
||||
int (*fp_fts_ctpm_fw_upgrade_with_sys_fs_64k)(unsigned char *fw,
|
||||
int len, bool change_iref);
|
||||
int (*fp_fts_ctpm_fw_upgrade_with_sys_fs_124k)(unsigned char *fw,
|
||||
int len, bool change_iref);
|
||||
int (*fp_fts_ctpm_fw_upgrade_with_sys_fs_128k)(unsigned char *fw,
|
||||
int len, bool change_iref);
|
||||
void (*fp_flash_dump_func)(uint8_t local_flash_command,
|
||||
int Flash_Size, uint8_t *flash_buffer);
|
||||
bool (*fp_flash_lastdata_check)(uint32_t size);
|
||||
bool (*fp_ahb_squit)(void);
|
||||
void (*fp_flash_read)(uint8_t *r_data, int start_addr, int length);
|
||||
bool (*fp_sfr_rw)(uint8_t *addr, int length,
|
||||
uint8_t *data, uint8_t rw_ctrl);
|
||||
bool (*fp_lock_flash)(void);
|
||||
bool (*fp_unlock_flash)(void);
|
||||
void (*fp_init_auto_func)(void);
|
||||
int (*_diff_overlay_flash)(void);
|
||||
/* CORE_FLASH */
|
||||
|
||||
/* CORE_SRAM */
|
||||
void (*fp_sram_write)(uint8_t *FW_content);
|
||||
bool (*fp_sram_verify)(uint8_t *FW_File, int FW_Size);
|
||||
bool (*fp_get_DSRAM_data)(uint8_t *info_data, bool DSRAM_Flag);
|
||||
/* CORE_SRAM */
|
||||
|
||||
/* CORE_DRIVER */
|
||||
void (*fp_chip_init)(void);
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
int (*fp_fw_ver_bin)(void);
|
||||
#endif
|
||||
void (*fp_pin_reset)(void);
|
||||
void (*fp_touch_information)(void);
|
||||
void (*fp_reload_config)(void);
|
||||
int (*fp_get_touch_data_size)(void);
|
||||
void (*fp_usb_detect_set)(uint8_t *cable_config);
|
||||
int (*fp_hand_shaking)(void);
|
||||
int (*fp_determin_diag_rawdata)(int diag_command);
|
||||
int (*fp_determin_diag_storage)(int diag_command);
|
||||
int (*fp_cal_data_len)(int raw_cnt_rmd, int HX_MAX_PT, int raw_cnt_max);
|
||||
bool (*fp_diag_check_sum)(struct himax_report_data *hx_touch_data);
|
||||
void (*fp_diag_parse_raw_data)(struct himax_report_data *hx_touch_data,
|
||||
int mul_num,
|
||||
int self_num,
|
||||
uint8_t diag_cmd,
|
||||
int32_t *mutual_data,
|
||||
int32_t *self_data);
|
||||
void (*fp_ic_reset)(uint8_t loadconfig, uint8_t int_off);
|
||||
int (*fp_ic_esd_recovery)(int hx_esd_event,
|
||||
int hx_zero_event, int length);
|
||||
void (*fp_esd_ic_reset)(void);
|
||||
void (*fp_resend_cmd_func)(bool suspended);
|
||||
#if defined(HX_TP_PROC_GUEST_INFO)
|
||||
int (*guest_info_get_status)(void);
|
||||
int (*read_guest_info)(void);
|
||||
#endif
|
||||
/* CORE_DRIVER */
|
||||
#if defined(HX_ZERO_FLASH)
|
||||
void (*fp_clean_sram_0f)(uint8_t *addr, int write_len, int type);
|
||||
void (*fp_write_sram_0f)(const struct firmware *fw_entry,
|
||||
uint8_t *addr,
|
||||
int start_index,
|
||||
uint32_t write_len);
|
||||
int (*fp_write_sram_0f_crc)(const struct firmware *fw_entry,
|
||||
uint8_t *addr,
|
||||
int start_index,
|
||||
uint32_t write_len);
|
||||
void (*fp_firmware_update_0f)(const struct firmware *fw_entry);
|
||||
int (*fp_0f_operation_dirly)(void);
|
||||
int (*fp_0f_op_file_dirly)(char *file_name);
|
||||
void (*fp_0f_operation)(struct work_struct *work);
|
||||
int (*fp_0f_esd_check)(void);
|
||||
void (*fp_0f_reload_to_active)(void);
|
||||
#if defined(HX_0F_DEBUG)
|
||||
void (*fp_read_sram_0f)(const struct firmware *fw_entry,
|
||||
uint8_t *addr,
|
||||
int start_index,
|
||||
int read_len);
|
||||
void (*fp_read_all_sram)(uint8_t *addr, int read_len);
|
||||
void (*fp_firmware_read_0f)(const struct firmware *fw_entry, int type);
|
||||
void (*fp_0f_operation_check)(int type);
|
||||
#endif
|
||||
#if defined(HX_CODE_OVERLAY)
|
||||
int (*fp_0f_overlay)(int ovl_type, int mode);
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif
|
4731
drivers/input/touchscreen/hxchipset/himax_ic_incell_core.c
Normal file
4731
drivers/input/touchscreen/hxchipset/himax_ic_incell_core.c
Normal file
File diff suppressed because it is too large
Load diff
2305
drivers/input/touchscreen/hxchipset/himax_inspection.c
Normal file
2305
drivers/input/touchscreen/hxchipset/himax_inspection.c
Normal file
File diff suppressed because it is too large
Load diff
292
drivers/input/touchscreen/hxchipset/himax_inspection.h
Normal file
292
drivers/input/touchscreen/hxchipset/himax_inspection.h
Normal file
|
@ -0,0 +1,292 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for inspection functions
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "himax_platform.h"
|
||||
#include "himax_common.h"
|
||||
#include "himax_ic_core.h"
|
||||
|
||||
/*#define HX_GAP_TEST*/
|
||||
/*#define HX_INSP_LP_TEST*/
|
||||
/*#define HX_ACT_IDLE_TEST*/
|
||||
|
||||
#define HX_RSLT_OUT_PATH "/sdcard/"
|
||||
#define HX_RSLT_OUT_FILE "hx_test_result.txt"
|
||||
#define PI(x...) pr_cont(x)
|
||||
#define HX_SZ_ICID 60
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
extern u8 HX_ESD_RESET_ACTIVATE;
|
||||
#endif
|
||||
|
||||
#define BS_RAWDATA 10
|
||||
#define BS_NOISE 10
|
||||
#define BS_OPENSHORT 0
|
||||
#define BS_LPWUG 1
|
||||
#define BS_LP_dile 1
|
||||
#define BS_ACT_IDLE 1
|
||||
|
||||
/* skip notch & dummy */
|
||||
#define SKIP_NOTCH_START 5
|
||||
#define SKIP_NOTCH_END 10
|
||||
/* TX+SKIP_NOTCH_START */
|
||||
#define SKIP_DUMMY_START 23
|
||||
/* TX+SKIP_NOTCH_END*/
|
||||
#define SKIP_DUMMY_END 28
|
||||
|
||||
|
||||
#define NOISEFRAME (BS_NOISE+1)
|
||||
#define NORMAL_IDLE_RAWDATA_NOISEFRAME 10
|
||||
#define LP_RAWDATAFRAME 1
|
||||
#define LP_NOISEFRAME 1
|
||||
#define LP_IDLE_RAWDATAFRAME 1
|
||||
#define LP_IDLE_NOISEFRAME 1
|
||||
|
||||
#define OTHERSFRAME 2
|
||||
|
||||
#define UNIFMAX 500
|
||||
|
||||
|
||||
/*Himax MP Password*/
|
||||
#define PWD_OPEN_START 0x77
|
||||
#define PWD_OPEN_END 0x88
|
||||
#define PWD_SHORT_START 0x11
|
||||
#define PWD_SHORT_END 0x33
|
||||
#define PWD_RAWDATA_START 0x00
|
||||
#define PWD_RAWDATA_END 0x99
|
||||
#define PWD_NOISE_START 0x00
|
||||
#define PWD_NOISE_END 0x99
|
||||
#define PWD_SORTING_START 0xAA
|
||||
#define PWD_SORTING_END 0xCC
|
||||
|
||||
|
||||
#define PWD_ACT_IDLE_START 0x22
|
||||
#define PWD_ACT_IDLE_END 0x44
|
||||
|
||||
|
||||
|
||||
#define PWD_LP_START 0x55
|
||||
#define PWD_LP_END 0x66
|
||||
|
||||
#define PWD_LP_IDLE_START 0x50
|
||||
#define PWD_LP_IDLE_END 0x60
|
||||
|
||||
#define PWD_TURN_ON_MPAP_OVL 0x107380
|
||||
|
||||
/*Himax DataType*/
|
||||
#define DATA_SORTING 0x0A
|
||||
#define DATA_OPEN 0x0B
|
||||
#define DATA_MICRO_OPEN 0x0C
|
||||
#define DATA_SHORT 0x0A
|
||||
#define DATA_RAWDATA 0x0A
|
||||
#define DATA_NOISE 0x0F
|
||||
#define DATA_BACK_NORMAL 0x00
|
||||
#define DATA_LP_RAWDATA 0x0C
|
||||
#define DATA_LP_NOISE 0x0F
|
||||
#define DATA_ACT_IDLE_RAWDATA 0x0A
|
||||
#define DATA_ACT_IDLE_NOISE 0x0F
|
||||
#define DATA_LP_IDLE_RAWDATA 0x0A
|
||||
#define DATA_LP_IDLE_NOISE 0x0F
|
||||
|
||||
/*Himax Data Ready Password*/
|
||||
#define Data_PWD0 0xA5
|
||||
#define Data_PWD1 0x5A
|
||||
|
||||
/* ASCII format */
|
||||
#define ASCII_LF (0x0A)
|
||||
#define ASCII_CR (0x0D)
|
||||
#define ASCII_COMMA (0x2C)
|
||||
#define ASCII_ZERO (0x30)
|
||||
#define CHAR_EL '\0'
|
||||
#define CHAR_NL '\n'
|
||||
#define ACSII_SPACE (0x20)
|
||||
/* INSOECTION Setting */
|
||||
|
||||
void himax_inspection_init(void);
|
||||
extern int *g_test_item_flag;
|
||||
extern int HX_CRITERIA_ITEM;
|
||||
extern int *g_test_item_flag;
|
||||
extern char *g_himax_inspection_mode[];
|
||||
|
||||
/*Inspection register*/
|
||||
#define addr_normal_noise_thx 0x1000708C
|
||||
#define addr_lpwug_noise_thx 0x10007090
|
||||
#define addr_recal_thx 0x10007090
|
||||
#define addr_palm_num 0x100070A8
|
||||
#define addr_weight_sup 0x100072C8
|
||||
#define addr_normal_weight_a 0x1000709C
|
||||
#define addr_lpwug_weight_a 0x100070A0
|
||||
#define addr_weight_b 0x10007094
|
||||
#define addr_max_dc 0x10007FC8
|
||||
#define addr_skip_frame 0x100070F4
|
||||
#define addr_neg_noise_sup 0x10007FD8
|
||||
#define data_neg_noise 0x7F0C0000
|
||||
#define addr_ctrl_mpap_ovl 0x100073EC
|
||||
|
||||
/*Need to map *g_himax_inspection_mode[]*/
|
||||
enum THP_INSPECTION_ENUM {
|
||||
HX_OPEN,
|
||||
HX_MICRO_OPEN,
|
||||
HX_SHORT,
|
||||
HX_RAWDATA,
|
||||
HX_BPN_RAWDATA,
|
||||
HX_SC,
|
||||
HX_WT_NOISE,
|
||||
HX_ABS_NOISE,
|
||||
HX_SORTING,
|
||||
|
||||
HX_GAPTEST_RAW,
|
||||
/*HX_GAPTEST_RAW_X,*/
|
||||
/*HX_GAPTEST_RAW_Y,*/
|
||||
|
||||
HX_ACT_IDLE_RAWDATA,
|
||||
HX_ACT_IDLE_BPN_RAWDATA,
|
||||
HX_ACT_IDLE_NOISE,
|
||||
/*LPWUG test must put after Normal test*/
|
||||
HX_LP_RAWDATA,
|
||||
HX_LP_BPN_RAWDATA,
|
||||
HX_LP_WT_NOISE,
|
||||
HX_LP_ABS_NOISE,
|
||||
HX_LP_IDLE_RAWDATA,
|
||||
HX_LP_IDLE_BPN_RAWDATA,
|
||||
HX_LP_IDLE_NOISE,
|
||||
|
||||
HX_BACK_NORMAL,/*Must put in the end*/
|
||||
};
|
||||
|
||||
|
||||
enum HX_CRITERIA_ENUM {
|
||||
IDX_RAWMIN = 0,
|
||||
IDX_RAWMAX,
|
||||
IDX_BPN_RAWMIN,
|
||||
IDX_BPN_RAWMAX,
|
||||
IDX_SCMIN,
|
||||
IDX_SCMAX,
|
||||
IDX_SC_GOLDEN,
|
||||
IDX_SHORTMIN,
|
||||
IDX_SHORTMAX,
|
||||
IDX_OPENMIN,
|
||||
IDX_OPENMAX,
|
||||
IDX_M_OPENMIN,
|
||||
IDX_M_OPENMAX,
|
||||
IDX_WT_NOISEMIN,
|
||||
IDX_WT_NOISEMAX,
|
||||
IDX_ABS_NOISEMIN,
|
||||
IDX_ABS_NOISEMAX,
|
||||
IDX_SORTMIN,
|
||||
IDX_SORTMAX,
|
||||
|
||||
IDX_GAP_HOR_RAWMAX,
|
||||
IDX_GAP_HOR_RAWMIN,
|
||||
IDX_GAP_VER_RAWMAX,
|
||||
IDX_GAP_VER_RAWMIN,
|
||||
|
||||
IDX_ACT_IDLE_NOISE_MIN,
|
||||
IDX_ACT_IDLE_NOISE_MAX,
|
||||
IDX_ACT_IDLE_RAWDATA_MIN,
|
||||
IDX_ACT_IDLE_RAWDATA_MAX,
|
||||
IDX_ACT_IDLE_RAW_BPN_MIN,
|
||||
IDX_ACT_IDLE_RAW_BPN_MAX,
|
||||
|
||||
IDX_LP_WT_NOISEMIN,
|
||||
IDX_LP_WT_NOISEMAX,
|
||||
IDX_LP_NOISE_ABS_MIN,
|
||||
IDX_LP_NOISE_ABS_MAX,
|
||||
IDX_LP_RAWDATA_MIN,
|
||||
IDX_LP_RAWDATA_MAX,
|
||||
IDX_LP_RAW_BPN_MIN,
|
||||
IDX_LP_RAW_BPN_MAX,
|
||||
|
||||
IDX_LP_IDLE_NOISE_MIN,
|
||||
IDX_LP_IDLE_NOISE_MAX,
|
||||
IDX_LP_IDLE_RAWDATA_MIN,
|
||||
IDX_LP_IDLE_RAWDATA_MAX,
|
||||
IDX_LP_IDLE_RAW_BPN_MIN,
|
||||
IDX_LP_IDLE_RAW_BPN_MAX,
|
||||
};
|
||||
|
||||
#define ERR_SFT 4
|
||||
/* Error code of Inspection */
|
||||
enum HX_INSP_ERR_ENUM {
|
||||
/* OK */
|
||||
HX_INSP_OK = 0,
|
||||
|
||||
/* Criteria file error*/
|
||||
HX_INSP_EFILE = 1,
|
||||
|
||||
/* Get raw data errors */
|
||||
HX_INSP_EGETRAW = 1 << 1,
|
||||
|
||||
/* Memory allocate errors */
|
||||
HX_INSP_MEMALLCTFAIL = 1 << 2,
|
||||
|
||||
/* Switch mode error*/
|
||||
HX_INSP_ESWITCHMODE = 1 << 3,
|
||||
|
||||
/* Sensor open error */
|
||||
HX_EOPEN = 1 << (HX_OPEN + ERR_SFT),
|
||||
|
||||
/* Sensor micro open error */
|
||||
HX_EMOPEN = 1 << (HX_MICRO_OPEN + ERR_SFT),
|
||||
|
||||
/* Sensor short error */
|
||||
HX_ESHORT = 1 << (HX_SHORT + ERR_SFT),
|
||||
|
||||
/* Raw data error */
|
||||
HX_ERAW = 1 << (HX_RAWDATA + ERR_SFT),
|
||||
|
||||
/* Raw data BPN error */
|
||||
HX_EBPNRAW = 1 << (HX_BPN_RAWDATA + ERR_SFT),
|
||||
|
||||
/* Get SC errors */
|
||||
HX_ESC = 1 << (HX_SC + ERR_SFT),
|
||||
|
||||
/* Noise error */
|
||||
HX_WT_ENOISE = 1 << (HX_WT_NOISE + ERR_SFT),
|
||||
|
||||
/* Noise error */
|
||||
HX_ABS_ENOISE = 1 << (HX_ABS_NOISE + ERR_SFT),
|
||||
|
||||
/* Sorting error*/
|
||||
HX_ESORT = 1 << (HX_SORTING + ERR_SFT),
|
||||
|
||||
/* Raw Data GAP */
|
||||
HX_EGAP_RAW = 1 << (HX_GAPTEST_RAW + ERR_SFT),
|
||||
|
||||
/* ACT_IDLE RAW ERROR */
|
||||
HX_EACT_IDLE_RAW = 1 << (HX_ACT_IDLE_RAWDATA + ERR_SFT),
|
||||
|
||||
/* ACT_IDLE NOISE ERROR */
|
||||
HX_EACT_IDLE_NOISE = 1 << (HX_ACT_IDLE_NOISE + ERR_SFT),
|
||||
|
||||
/* LPWUG RAW ERROR */
|
||||
HX_ELP_RAW = 1 << (HX_LP_RAWDATA + ERR_SFT),
|
||||
|
||||
/* LPWUG NOISE ERROR */
|
||||
HX_ELP_WT_NOISE = 1 << (HX_LP_WT_NOISE + ERR_SFT),
|
||||
|
||||
/* LPWUG NOISE ERROR */
|
||||
HX_ELP_ABS_NOISE = 1 << (HX_LP_ABS_NOISE + ERR_SFT),
|
||||
|
||||
/* LPWUG IDLE RAW ERROR */
|
||||
HX_ELP_IDLE_RAW = 1 << (HX_LP_IDLE_RAWDATA + ERR_SFT),
|
||||
|
||||
/* LPWUG IDLE NOISE ERROR */
|
||||
HX_ELP_IDLE_NOISE = 1 << (HX_LP_IDLE_NOISE + ERR_SFT),
|
||||
HX_EACT_IDLE_BPNRAW = 1 << (HX_ACT_IDLE_BPN_RAWDATA + ERR_SFT),
|
||||
HX_ELP_BPNRAW = 1 << (HX_LP_BPN_RAWDATA + ERR_SFT),
|
||||
HX_ELP_IDLE_BPNRAW = 1 << (HX_LP_IDLE_BPN_RAWDATA + ERR_SFT),
|
||||
};
|
||||
|
||||
extern void himax_inspect_data_clear(void);
|
398
drivers/input/touchscreen/hxchipset/himax_modular.h
Normal file
398
drivers/input/touchscreen/hxchipset/himax_modular.h
Normal file
|
@ -0,0 +1,398 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for modularize functions
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __HIMAX_MODULAR_H__
|
||||
#define __HIMAX_MODULAR_H__
|
||||
|
||||
#include "himax_modular_table.h"
|
||||
|
||||
static bool (*this_detect_fp)(void);
|
||||
|
||||
#if defined(HX_USE_KSYM)
|
||||
static void himax_add_chip_dt(bool (*detect_fp)(void))
|
||||
{
|
||||
int32_t idx;
|
||||
struct himax_chip_entry *entry;
|
||||
|
||||
this_detect_fp = detect_fp;
|
||||
idx = himax_get_ksym_idx();
|
||||
if (idx < 0) {
|
||||
/*TODO: No entry, handle this error*/
|
||||
E("%s: no entry exist, please insert ic module first!",
|
||||
__func__);
|
||||
} else {
|
||||
entry = (void *)kallsyms_lookup_name(himax_ksym_lookup[idx]);
|
||||
if (/*!(entry->core_chip_dt)*/isEmpty(idx) == 1) {
|
||||
entry->core_chip_dt = kcalloc(HX_DRIVER_MAX_IC_NUM,
|
||||
sizeof(struct himax_chip_detect), GFP_KERNEL);
|
||||
if (entry->core_chip_dt == NULL) {
|
||||
E("%s: Failed to allocate core_chip_dt\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
entry->hx_ic_dt_num = 0;
|
||||
}
|
||||
entry->core_chip_dt[entry->hx_ic_dt_num++].fp_chip_detect =
|
||||
detect_fp;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void himax_add_chip_dt(bool (*detect_fp)(void))
|
||||
{
|
||||
this_detect_fp = detect_fp;
|
||||
if (himax_ksym_lookup.core_chip_dt == NULL) {
|
||||
himax_ksym_lookup.core_chip_dt = kcalloc(HX_DRIVER_MAX_IC_NUM,
|
||||
sizeof(struct himax_chip_detect), GFP_KERNEL);
|
||||
if (himax_ksym_lookup.core_chip_dt == NULL) {
|
||||
E("%s: Failed to allocate core_chip_dt\n", __func__);
|
||||
return;
|
||||
}
|
||||
himax_ksym_lookup.hx_ic_dt_num = 0;
|
||||
}
|
||||
|
||||
himax_ksym_lookup.core_chip_dt
|
||||
[himax_ksym_lookup.hx_ic_dt_num].fp_chip_detect = detect_fp;
|
||||
himax_ksym_lookup.hx_ic_dt_num++;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void free_chip_dt_table(void)
|
||||
{
|
||||
int i, j, idx;
|
||||
struct himax_chip_entry *entry;
|
||||
|
||||
idx = himax_get_ksym_idx();
|
||||
if (idx >= 0) {
|
||||
if (isEmpty(idx) != 0) {
|
||||
I("%s: no chip registered or entry clean up\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
entry = get_chip_entry_by_index(idx);
|
||||
|
||||
for (i = 0; i < entry->hx_ic_dt_num; i++) {
|
||||
if (entry->core_chip_dt
|
||||
[i].fp_chip_detect == this_detect_fp) {
|
||||
if (i == (entry->hx_ic_dt_num - 1)) {
|
||||
entry->core_chip_dt
|
||||
[i].fp_chip_detect = NULL;
|
||||
entry->hx_ic_dt_num = 0;
|
||||
} else {
|
||||
for (j = i; j < entry
|
||||
->hx_ic_dt_num; j++)
|
||||
entry->core_chip_dt
|
||||
[i].fp_chip_detect =
|
||||
entry->core_chip_dt
|
||||
[j].fp_chip_detect;
|
||||
|
||||
entry->core_chip_dt
|
||||
[j].fp_chip_detect = NULL;
|
||||
entry->hx_ic_dt_num--;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (entry->hx_ic_dt_num == 0) {
|
||||
kfree(entry->core_chip_dt);
|
||||
entry->core_chip_dt = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(HX_USE_KSYM)
|
||||
#define setup_symbol(sym) ({kp_##sym = &(sym); kp_##sym; })
|
||||
#define setup_symbol_func(sym) ({kp_##sym = (sym); kp_##sym; })
|
||||
#else
|
||||
#define setup_symbol(sym) ({kp_##sym = (void *)kallsyms_lookup_name(#sym); \
|
||||
kp_##sym; })
|
||||
#define setup_symbol_func(sym) setup_symbol(sym)
|
||||
#endif
|
||||
|
||||
#define assert_on_symbol(sym) \
|
||||
do { \
|
||||
if (!setup_symbol(sym)) { \
|
||||
E("%s: setup %s failed!\n", __func__, #sym); \
|
||||
ret = -1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define assert_on_symbol_func(sym) \
|
||||
do { \
|
||||
if (!setup_symbol_func(sym)) { \
|
||||
E("%s: setup %s failed!\n", __func__, #sym); \
|
||||
ret = -1; \
|
||||
} \
|
||||
} while (0)
|
||||
#if !defined(__HIMAX_HX852xH_MOD__) && !defined(__HIMAX_HX852xG_MOD__)
|
||||
static struct fw_operation **kp_pfw_op;
|
||||
static struct ic_operation **kp_pic_op;
|
||||
static struct flash_operation **kp_pflash_op;
|
||||
static struct driver_operation **kp_pdriver_op;
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH) && defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
static struct zf_operation **kp_pzf_op;
|
||||
static int *kp_G_POWERONOF;
|
||||
#endif
|
||||
|
||||
static unsigned char *kp_IC_CHECKSUM;
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
static u8 *kp_HX_ESD_RESET_ACTIVATE;
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH) && defined(HX_CODE_OVERLAY)
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
static uint8_t **kp_ovl_idx;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static unsigned long *kp_FW_VER_MAJ_FLASH_ADDR;
|
||||
static unsigned long *kp_FW_VER_MIN_FLASH_ADDR;
|
||||
static unsigned long *kp_CFG_VER_MAJ_FLASH_ADDR;
|
||||
static unsigned long *kp_CFG_VER_MIN_FLASH_ADDR;
|
||||
static unsigned long *kp_CID_VER_MAJ_FLASH_ADDR;
|
||||
static unsigned long *kp_CID_VER_MIN_FLASH_ADDR;
|
||||
|
||||
static unsigned long *kp_FW_VER_MAJ_FLASH_LENG;
|
||||
static unsigned long *kp_FW_VER_MIN_FLASH_LENG;
|
||||
static unsigned long *kp_CFG_VER_MAJ_FLASH_LENG;
|
||||
static unsigned long *kp_CFG_VER_MIN_FLASH_LENG;
|
||||
static unsigned long *kp_CID_VER_MAJ_FLASH_LENG;
|
||||
static unsigned long *kp_CID_VER_MIN_FLASH_LENG;
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
static int *kp_g_i_FW_VER;
|
||||
static int *kp_g_i_CFG_VER;
|
||||
static int *kp_g_i_CID_MAJ;
|
||||
static int *kp_g_i_CID_MIN;
|
||||
static unsigned char **kp_i_CTPM_FW;
|
||||
#endif
|
||||
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
static bool *kp_Is_2T2R;
|
||||
#endif
|
||||
|
||||
#if defined(HX_USB_DETECT_GLOBAL)
|
||||
static void (*kp_himax_cable_detect_func)(bool force_renew);
|
||||
#endif
|
||||
|
||||
#if defined(HX_RST_PIN_FUNC)
|
||||
static void (*kp_himax_rst_gpio_set)(int pinnum, uint8_t value);
|
||||
#endif
|
||||
|
||||
static struct himax_ts_data **kp_private_ts;
|
||||
static struct himax_core_fp *kp_g_core_fp;
|
||||
static struct himax_ic_data **kp_ic_data;
|
||||
|
||||
#if defined(__HIMAX_HX852xH_MOD__) || defined(__HIMAX_HX852xG_MOD__)
|
||||
#if defined(__HIMAX_HX852xG_MOD__)
|
||||
static struct on_driver_operation **kp_on_pdriver_op;
|
||||
#endif
|
||||
static void (*kp_himax_mcu_on_cmd_init)(void);
|
||||
static int (*kp_himax_mcu_on_cmd_struct_init)(void);
|
||||
#else
|
||||
static void (*kp_himax_mcu_in_cmd_init)(void);
|
||||
static int (*kp_himax_mcu_in_cmd_struct_init)(void);
|
||||
#endif
|
||||
static void (*kp_himax_parse_assign_cmd)(uint32_t addr, uint8_t *cmd,
|
||||
int len);
|
||||
|
||||
static int (*kp_himax_bus_read)(uint8_t command, uint8_t *data,
|
||||
uint32_t length, uint8_t toRetry);
|
||||
static int (*kp_himax_bus_write)(uint8_t command, uint8_t *data,
|
||||
uint32_t length, uint8_t toRetry);
|
||||
static int (*kp_himax_bus_write_command)(uint8_t command, uint8_t toRetry);
|
||||
static void (*kp_himax_int_enable)(int enable);
|
||||
static int (*kp_himax_ts_register_interrupt)(void);
|
||||
static uint8_t (*kp_himax_int_gpio_read)(int pinnum);
|
||||
static int (*kp_himax_gpio_power_config)(struct himax_i2c_platform_data *pdata);
|
||||
|
||||
#if !defined(HX_USE_KSYM)
|
||||
#if !defined(__HIMAX_HX852xH_MOD__) && !defined(__HIMAX_HX852xG_MOD__)
|
||||
extern struct fw_operation *pfw_op;
|
||||
extern struct ic_operation *pic_op;
|
||||
extern struct flash_operation *pflash_op;
|
||||
extern struct driver_operation *pdriver_op;
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH) && defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
extern struct zf_operation *pzf_op;
|
||||
extern int G_POWERONOF;
|
||||
#endif
|
||||
|
||||
extern unsigned char IC_CHECKSUM;
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
extern u8 HX_ESD_RESET_ACTIVATE;
|
||||
#endif
|
||||
|
||||
#if defined(HX_ZERO_FLASH) && defined(HX_CODE_OVERLAY)
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
extern uint8_t *ovl_idx;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern unsigned long FW_VER_MAJ_FLASH_ADDR;
|
||||
extern unsigned long FW_VER_MIN_FLASH_ADDR;
|
||||
extern unsigned long CFG_VER_MAJ_FLASH_ADDR;
|
||||
extern unsigned long CFG_VER_MIN_FLASH_ADDR;
|
||||
extern unsigned long CID_VER_MAJ_FLASH_ADDR;
|
||||
extern unsigned long CID_VER_MIN_FLASH_ADDR;
|
||||
|
||||
extern unsigned long FW_VER_MAJ_FLASH_LENG;
|
||||
extern unsigned long FW_VER_MIN_FLASH_LENG;
|
||||
extern unsigned long CFG_VER_MAJ_FLASH_LENG;
|
||||
extern unsigned long CFG_VER_MIN_FLASH_LENG;
|
||||
extern unsigned long CID_VER_MAJ_FLASH_LENG;
|
||||
extern unsigned long CID_VER_MIN_FLASH_LENG;
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
extern int g_i_FW_VER;
|
||||
extern int g_i_CFG_VER;
|
||||
extern int g_i_CID_MAJ;
|
||||
extern int g_i_CID_MIN;
|
||||
extern unsigned char *i_CTPM_FW;
|
||||
#endif
|
||||
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
extern bool Is_2T2R;
|
||||
#endif
|
||||
|
||||
#if defined(HX_USB_DETECT_GLOBAL)
|
||||
extern void (himax_cable_detect_func)(bool force_renew);
|
||||
#endif
|
||||
|
||||
#if defined(HX_RST_PIN_FUNC)
|
||||
extern void (himax_rst_gpio_set)(int pinnum, uint8_t value);
|
||||
#endif
|
||||
|
||||
extern struct himax_ts_data *private_ts;
|
||||
extern struct himax_core_fp g_core_fp;
|
||||
extern struct himax_ic_data *ic_data;
|
||||
|
||||
#if defined(__HIMAX_HX852xH_MOD__) || defined(__HIMAX_HX852xG_MOD__)
|
||||
#if defined(__HIMAX_HX852xG_MOD__)
|
||||
extern struct on_driver_operation *on_pdriver_op;
|
||||
#endif
|
||||
extern void (himax_mcu_on_cmd_init)(void);
|
||||
extern int (himax_mcu_on_cmd_struct_init)(void);
|
||||
#else
|
||||
extern void (himax_mcu_in_cmd_init)(void);
|
||||
extern int (himax_mcu_in_cmd_struct_init)(void);
|
||||
#endif
|
||||
extern void (himax_parse_assign_cmd)(uint32_t addr, uint8_t *cmd, int len);
|
||||
|
||||
extern int (himax_bus_read)(uint8_t command, uint8_t *data, uint32_t length,
|
||||
uint8_t toRetry);
|
||||
extern int (himax_bus_write)(uint8_t command, uint8_t *data, uint32_t length,
|
||||
uint8_t toRetry);
|
||||
extern int (himax_bus_write_command)(uint8_t command, uint8_t toRetry);
|
||||
extern void (himax_int_enable)(int enable);
|
||||
extern int (himax_ts_register_interrupt)(void);
|
||||
extern uint8_t (himax_int_gpio_read)(int pinnum);
|
||||
extern int (himax_gpio_power_config)(struct himax_i2c_platform_data *pdata);
|
||||
#endif
|
||||
|
||||
static int32_t himax_ic_setup_external_symbols(void)
|
||||
{
|
||||
int32_t ret = 0;
|
||||
|
||||
#if !defined(__HIMAX_HX852xH_MOD__) && !defined(__HIMAX_HX852xG_MOD__)
|
||||
assert_on_symbol(pfw_op);
|
||||
assert_on_symbol(pic_op);
|
||||
assert_on_symbol(pflash_op);
|
||||
assert_on_symbol(pdriver_op);
|
||||
#endif
|
||||
|
||||
assert_on_symbol(private_ts);
|
||||
assert_on_symbol(g_core_fp);
|
||||
assert_on_symbol(ic_data);
|
||||
|
||||
#if defined(__HIMAX_HX852xH_MOD__) || defined(__HIMAX_HX852xG_MOD__)
|
||||
#if defined(__HIMAX_HX852xG_MOD__)
|
||||
assert_on_symbol(on_pdriver_op);
|
||||
#endif
|
||||
assert_on_symbol_func(himax_mcu_on_cmd_init);
|
||||
assert_on_symbol_func(himax_mcu_on_cmd_struct_init);
|
||||
#else
|
||||
assert_on_symbol_func(himax_mcu_in_cmd_init);
|
||||
assert_on_symbol_func(himax_mcu_in_cmd_struct_init);
|
||||
#endif
|
||||
assert_on_symbol_func(himax_parse_assign_cmd);
|
||||
assert_on_symbol_func(himax_bus_read);
|
||||
assert_on_symbol_func(himax_bus_write);
|
||||
assert_on_symbol_func(himax_bus_write_command);
|
||||
assert_on_symbol_func(himax_int_enable);
|
||||
assert_on_symbol_func(himax_ts_register_interrupt);
|
||||
assert_on_symbol_func(himax_int_gpio_read);
|
||||
assert_on_symbol_func(himax_gpio_power_config);
|
||||
|
||||
#if defined(HX_ZERO_FLASH) && defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
assert_on_symbol(pzf_op);
|
||||
assert_on_symbol(G_POWERONOF);
|
||||
#endif
|
||||
|
||||
assert_on_symbol(IC_CHECKSUM);
|
||||
|
||||
assert_on_symbol(FW_VER_MAJ_FLASH_ADDR);
|
||||
assert_on_symbol(FW_VER_MIN_FLASH_ADDR);
|
||||
assert_on_symbol(CFG_VER_MAJ_FLASH_ADDR);
|
||||
assert_on_symbol(CFG_VER_MIN_FLASH_ADDR);
|
||||
assert_on_symbol(CID_VER_MAJ_FLASH_ADDR);
|
||||
assert_on_symbol(CID_VER_MIN_FLASH_ADDR);
|
||||
|
||||
assert_on_symbol(FW_VER_MAJ_FLASH_LENG);
|
||||
assert_on_symbol(FW_VER_MIN_FLASH_LENG);
|
||||
assert_on_symbol(CFG_VER_MAJ_FLASH_LENG);
|
||||
assert_on_symbol(CFG_VER_MIN_FLASH_LENG);
|
||||
assert_on_symbol(CID_VER_MAJ_FLASH_LENG);
|
||||
assert_on_symbol(CID_VER_MIN_FLASH_LENG);
|
||||
|
||||
#if defined(HX_AUTO_UPDATE_FW)
|
||||
assert_on_symbol(g_i_FW_VER);
|
||||
assert_on_symbol(g_i_CFG_VER);
|
||||
assert_on_symbol(g_i_CID_MAJ);
|
||||
assert_on_symbol(g_i_CID_MIN);
|
||||
assert_on_symbol(i_CTPM_FW);
|
||||
#endif
|
||||
|
||||
#if defined(HX_TP_PROC_2T2R)
|
||||
assert_on_symbol(Is_2T2R);
|
||||
#endif
|
||||
|
||||
#if defined(HX_USB_DETECT_GLOBAL)
|
||||
assert_on_symbol_func(himax_cable_detect_func);
|
||||
#endif
|
||||
|
||||
#if defined(HX_RST_PIN_FUNC)
|
||||
assert_on_symbol_func(himax_rst_gpio_set);
|
||||
#endif
|
||||
|
||||
#if defined(HX_ESD_RECOVERY)
|
||||
assert_on_symbol(HX_ESD_RESET_ACTIVATE);
|
||||
#endif
|
||||
#if defined(HX_ZERO_FLASH) && defined(HX_CODE_OVERLAY)
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_INCELL)
|
||||
assert_on_symbol(ovl_idx);
|
||||
#endif
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
156
drivers/input/touchscreen/hxchipset/himax_modular_table.h
Normal file
156
drivers/input/touchscreen/hxchipset/himax_modular_table.h
Normal file
|
@ -0,0 +1,156 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for modularize functions
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef __HIMAX_MODULAR_TABLE_H__
|
||||
#define __HIMAX_MODULAR_TABLE_H__
|
||||
|
||||
#include "himax_ic_core.h"
|
||||
|
||||
#define TO_STR(VAR) #VAR
|
||||
|
||||
enum modular_table {
|
||||
MODULE_NOT_FOUND = -1,
|
||||
MODULE_FOUND,
|
||||
MODULE_EMPTY,
|
||||
};
|
||||
|
||||
#if defined(HX_USE_KSYM)
|
||||
#define DECLARE(sym) struct himax_chip_entry sym; \
|
||||
EXPORT_SYMBOL(sym)
|
||||
static const char * const himax_ksym_lookup[] = {
|
||||
#if defined(HX_MOD_KSYM_HX852xG)
|
||||
TO_STR(HX_MOD_KSYM_HX852xG),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX852xH)
|
||||
TO_STR(HX_MOD_KSYM_HX852xH),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83102)
|
||||
TO_STR(HX_MOD_KSYM_HX83102),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83103)
|
||||
TO_STR(HX_MOD_KSYM_HX83103),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83106)
|
||||
TO_STR(HX_MOD_KSYM_HX83106),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83111)
|
||||
TO_STR(HX_MOD_KSYM_HX83111),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83112)
|
||||
TO_STR(HX_MOD_KSYM_HX83112),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83113)
|
||||
TO_STR(HX_MOD_KSYM_HX83113),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83192)
|
||||
TO_STR(HX_MOD_KSYM_HX83192),
|
||||
#endif
|
||||
#if defined(HX_MOD_KSYM_HX83191)
|
||||
TO_STR(HX_MOD_KSYM_HX83191),
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
||||
static struct himax_chip_entry *get_chip_entry_by_index(int32_t idx)
|
||||
{
|
||||
return (void *)kallsyms_lookup_name(himax_ksym_lookup[idx]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return 1 when specified entry is empty, 0 when not, -1 when index error
|
||||
*/
|
||||
static int32_t isEmpty(int32_t idx)
|
||||
{
|
||||
int32_t size = sizeof(himax_ksym_lookup) / sizeof(char *);
|
||||
struct himax_chip_entry *entry;
|
||||
|
||||
if (idx < 0 || idx >= size)
|
||||
return MODULE_NOT_FOUND;
|
||||
|
||||
entry = get_chip_entry_by_index(idx);
|
||||
if (entry)
|
||||
return (entry->core_chip_dt == NULL)?MODULE_EMPTY:MODULE_FOUND;
|
||||
|
||||
return MODULE_NOT_FOUND;
|
||||
}
|
||||
|
||||
/*
|
||||
* Search for created entry, if not existed, return 1st
|
||||
* Return index of himax_ksym_lookup
|
||||
*/
|
||||
static int32_t himax_get_ksym_idx(void)
|
||||
{
|
||||
int32_t i, first = -1;
|
||||
int32_t size = sizeof(himax_ksym_lookup) / sizeof(char *);
|
||||
struct himax_chip_entry *entry;
|
||||
|
||||
I("%s: symtable size: %d\n", __func__, size);
|
||||
for (i = 0; i < size; i++) {
|
||||
if (himax_ksym_lookup[i] == NULL)
|
||||
break;
|
||||
|
||||
I("%s: %s\n", __func__, himax_ksym_lookup[i]);
|
||||
entry = get_chip_entry_by_index(i);
|
||||
if (entry) {
|
||||
if (first < 0)
|
||||
first = i;
|
||||
if (isEmpty(i) == 0)
|
||||
return i;
|
||||
}
|
||||
}
|
||||
if (first >= 0)
|
||||
return first;
|
||||
/*incorrect use state, means no ic defined*/
|
||||
return MODULE_NOT_FOUND;
|
||||
}
|
||||
|
||||
#else
|
||||
#define DECLARE(sym)
|
||||
extern struct himax_chip_entry himax_ksym_lookup;
|
||||
|
||||
static struct himax_chip_entry *get_chip_entry_by_index(int32_t idx)
|
||||
{
|
||||
return &himax_ksym_lookup;
|
||||
}
|
||||
|
||||
static int32_t isEmpty(int32_t idx)
|
||||
{
|
||||
struct himax_chip_entry *entry;
|
||||
|
||||
if (idx < 0)
|
||||
return MODULE_NOT_FOUND;
|
||||
|
||||
entry = get_chip_entry_by_index(idx);
|
||||
if (entry)
|
||||
return (entry->core_chip_dt == NULL)?MODULE_EMPTY:MODULE_FOUND;
|
||||
|
||||
return MODULE_NOT_FOUND;
|
||||
}
|
||||
|
||||
static int32_t himax_get_ksym_idx(void)
|
||||
{
|
||||
int32_t size;
|
||||
|
||||
size = himax_ksym_lookup.hx_ic_dt_num;
|
||||
|
||||
I("%s: symtable size: %d\n", __func__, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
1130
drivers/input/touchscreen/hxchipset/himax_platform.c
Normal file
1130
drivers/input/touchscreen/hxchipset/himax_platform.c
Normal file
File diff suppressed because it is too large
Load diff
143
drivers/input/touchscreen/hxchipset/himax_platform.h
Normal file
143
drivers/input/touchscreen/hxchipset/himax_platform.h
Normal file
|
@ -0,0 +1,143 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Himax Android Driver Sample Code for QCT platform
|
||||
*
|
||||
* Copyright (C) 2019 Himax Corporation.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef HIMAX_PLATFORM_H
|
||||
#define HIMAX_PLATFORM_H
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/interrupt.h>
|
||||
#if defined(CONFIG_HMX_DB)
|
||||
#include <linux/regulator/consumer.h>
|
||||
#endif
|
||||
|
||||
#define HIMAX_SPI_FIFO_POLLING
|
||||
#define HIMAX_I2C_RETRY_TIMES 3
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_HIMAX_DEBUG)
|
||||
#define D(x...) pr_debug("[HXTP] " x)
|
||||
#define I(x...) pr_info("[HXTP] " x)
|
||||
#define W(x...) pr_warn("[HXTP][WARNING] " x)
|
||||
#define E(x...) pr_err("[HXTP][ERROR] " x)
|
||||
#define DIF(x...) \
|
||||
do { \
|
||||
if (debug_flag) \
|
||||
pr_debug("[HXTP][DEBUG] " x) \
|
||||
} while (0)
|
||||
#else
|
||||
#define D(x...)
|
||||
#define I(x...)
|
||||
#define W(x...)
|
||||
#define E(x...)
|
||||
#define DIF(x...)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_HMX_DB)
|
||||
/* Analog voltage @2.7 V */
|
||||
#define HX_VTG_MIN_UV 2700000
|
||||
#define HX_VTG_MAX_UV 3300000
|
||||
#define HX_ACTIVE_LOAD_UA 15000
|
||||
#define HX_LPM_LOAD_UA 10
|
||||
/* Digital voltage @1.8 V */
|
||||
#define HX_VTG_DIG_MIN_UV 1800000
|
||||
#define HX_VTG_DIG_MAX_UV 1800000
|
||||
#define HX_ACTIVE_LOAD_DIG_UA 10000
|
||||
#define HX_LPM_LOAD_DIG_UA 10
|
||||
|
||||
#define HX_I2C_VTG_MIN_UV 1800000
|
||||
#define HX_I2C_VTG_MAX_UV 1800000
|
||||
#define HX_I2C_LOAD_UA 10000
|
||||
#define HX_I2C_LPM_LOAD_UA 10
|
||||
#endif
|
||||
|
||||
#define HIMAX_common_NAME "himax_tp"
|
||||
#define HIMAX_I2C_ADDR 0x48
|
||||
#define INPUT_DEV_NAME "himax-touchscreen"
|
||||
|
||||
struct himax_i2c_platform_data {
|
||||
int abs_x_min;
|
||||
int abs_x_max;
|
||||
int abs_x_fuzz;
|
||||
int abs_y_min;
|
||||
int abs_y_max;
|
||||
int abs_y_fuzz;
|
||||
int abs_pressure_min;
|
||||
int abs_pressure_max;
|
||||
int abs_pressure_fuzz;
|
||||
int abs_width_min;
|
||||
int abs_width_max;
|
||||
int screenWidth;
|
||||
int screenHeight;
|
||||
uint8_t fw_version;
|
||||
uint8_t tw_id;
|
||||
uint8_t powerOff3V3;
|
||||
uint8_t cable_config[2];
|
||||
uint8_t protocol_type;
|
||||
int gpio_irq;
|
||||
int gpio_reset;
|
||||
int gpio_3v3_en;
|
||||
int (*power)(int on);
|
||||
void (*reset)(void);
|
||||
struct himax_virtual_key *virtual_key;
|
||||
struct kobject *vk_obj;
|
||||
struct kobj_attribute *vk2Use;
|
||||
|
||||
int hx_config_size;
|
||||
#if defined(CONFIG_HMX_DB)
|
||||
bool i2c_pull_up;
|
||||
bool digital_pwr_regulator;
|
||||
int reset_gpio;
|
||||
u32 reset_gpio_flags;
|
||||
int irq_gpio;
|
||||
u32 irq_gpio_flags;
|
||||
|
||||
struct regulator *vcc_ana; /* For Dragon Board */
|
||||
struct regulator *vcc_dig; /* For Dragon Board */
|
||||
struct regulator *vcc_i2c; /* For Dragon Board */
|
||||
#endif
|
||||
};
|
||||
|
||||
extern struct himax_ic_data *ic_data;
|
||||
extern struct himax_ts_data *private_ts;
|
||||
int himax_chip_common_init(void);
|
||||
void himax_chip_common_deinit(void);
|
||||
|
||||
void himax_ts_work(struct himax_ts_data *ts);
|
||||
enum hrtimer_restart himax_ts_timer_func(struct hrtimer *timer);
|
||||
extern int himax_bus_read(uint8_t command, uint8_t *data,
|
||||
uint32_t length, uint8_t toRetry);
|
||||
extern int himax_bus_write(uint8_t command, uint8_t *data,
|
||||
uint32_t length, uint8_t toRetry);
|
||||
extern int himax_bus_write_command(uint8_t command, uint8_t toRetry);
|
||||
extern void himax_int_enable(int enable);
|
||||
extern int himax_ts_register_interrupt(void);
|
||||
int himax_ts_unregister_interrupt(void);
|
||||
extern uint8_t himax_int_gpio_read(int pinnum);
|
||||
|
||||
extern int himax_gpio_power_config(struct himax_i2c_platform_data *pdata);
|
||||
void himax_gpio_power_deconfig(struct himax_i2c_platform_data *pdata);
|
||||
|
||||
#if defined(HX_CONFIG_FB)
|
||||
extern int fb_notifier_callback(struct notifier_block *self,
|
||||
unsigned long event, void *data);
|
||||
#elif defined(HX_CONFIG_DRM)
|
||||
extern int drm_notifier_callback(struct notifier_block *self,
|
||||
unsigned long event, void *data);
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -37,6 +37,11 @@
|
|||
#define QPNP_VIB_MAX_PLAY_MS 15000
|
||||
#define QPNP_VIB_OVERDRIVE_PLAY_MS 30
|
||||
|
||||
#ifdef CONFIG_AF_NOISE_ELIMINATION
|
||||
extern int mot_actuator_on_vibrate_start(void);
|
||||
extern int mot_actuator_on_vibrate_stop(void);
|
||||
#endif
|
||||
|
||||
struct vib_ldo_chip {
|
||||
struct led_classdev cdev;
|
||||
struct regmap *regmap;
|
||||
|
@ -54,6 +59,10 @@ struct vib_ldo_chip {
|
|||
u64 vib_play_ms;
|
||||
bool vib_enabled;
|
||||
bool disable_overdrive;
|
||||
|
||||
bool dis_short_long;
|
||||
int dis_long_ms;
|
||||
int vmax_uV_long;
|
||||
};
|
||||
|
||||
static inline int qpnp_vib_ldo_poll_status(struct vib_ldo_chip *chip)
|
||||
|
@ -111,10 +120,23 @@ static int qpnp_vib_ldo_set_voltage(struct vib_ldo_chip *chip, int new_uV)
|
|||
static inline int qpnp_vib_ldo_enable(struct vib_ldo_chip *chip, bool enable)
|
||||
{
|
||||
int ret;
|
||||
#ifdef CONFIG_AF_NOISE_ELIMINATION
|
||||
static int mot_actuator_started = 0;
|
||||
#endif
|
||||
|
||||
if (chip->vib_enabled == enable)
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_AF_NOISE_ELIMINATION
|
||||
if ((chip->vib_play_ms > 80) && (enable)) {
|
||||
mot_actuator_on_vibrate_start();
|
||||
mot_actuator_started = 1;
|
||||
}
|
||||
if(!enable && (mot_actuator_started == 1 )) {
|
||||
mot_actuator_on_vibrate_stop();
|
||||
mot_actuator_started = 0;
|
||||
}
|
||||
#endif
|
||||
ret = regmap_update_bits(chip->regmap,
|
||||
chip->base + QPNP_VIB_LDO_REG_EN_CTL,
|
||||
QPNP_VIB_LDO_EN,
|
||||
|
@ -144,6 +166,13 @@ static int qpnp_vibrator_play_on(struct vib_ldo_chip *chip)
|
|||
int ret;
|
||||
|
||||
volt_uV = chip->vmax_uV;
|
||||
if (chip->dis_short_long) {
|
||||
pr_warn("vib in dis short and long, play ms=%d, dis_longms=%d, vmax_uV=%d, vmax_uV_long=%d\n",
|
||||
chip->vib_play_ms, chip->dis_long_ms, chip->vmax_uV, chip->vmax_uV_long);
|
||||
if (chip->vib_play_ms > chip->dis_long_ms) {
|
||||
volt_uV = chip->vmax_uV_long;
|
||||
}
|
||||
}
|
||||
if (!chip->disable_overdrive)
|
||||
volt_uV = chip->overdrive_volt_uV ? chip->overdrive_volt_uV
|
||||
: min(chip->vmax_uV * 2, QPNP_VIB_LDO_VMAX_UV);
|
||||
|
@ -386,6 +415,29 @@ static int qpnp_vib_parse_dt(struct device *dev, struct vib_ldo_chip *chip)
|
|||
return ret;
|
||||
}
|
||||
|
||||
chip->dis_short_long = of_property_read_bool(dev->of_node,
|
||||
"qcom,vib-dis-short-long");
|
||||
if (chip->dis_short_long) {
|
||||
pr_warn("read dis_short_long true");
|
||||
ret = of_property_read_u32(dev->of_node, "qcom,vib-dis-short-long-val",
|
||||
&chip->dis_long_ms);
|
||||
if (ret < 0) {
|
||||
pr_err("qcom,vib-dis-short-long-val property read failed, ret=%d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
pr_warn("read dis_long_ms=%d\n", chip->dis_long_ms);
|
||||
|
||||
ret = of_property_read_u32(dev->of_node, "qcom,vib-ldo-volt-uv-long",
|
||||
&chip->vmax_uV_long);
|
||||
if (ret < 0) {
|
||||
pr_err("qcom,vib-ldo-volt-uv-long property read failed, ret=%d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
pr_warn("read vmax_uV_long=%d\n", chip->vmax_uV_long);
|
||||
}
|
||||
|
||||
chip->disable_overdrive = of_property_read_bool(dev->of_node,
|
||||
"qcom,disable-overdrive");
|
||||
|
||||
|
|
|
@ -2884,16 +2884,17 @@ static int crypt_map(struct dm_target *ti, struct bio *bio)
|
|||
* - for REQ_PREFLUSH device-mapper core ensures that no IO is in-flight
|
||||
* - for REQ_OP_DISCARD caller must use flush if IO ordering matters
|
||||
*/
|
||||
// BEGIN IKSWR-71527 lutcho@motorola.com 2021/05/11
|
||||
// bio_should_skip_dm_default_key(bio) reverted
|
||||
if (unlikely(bio->bi_opf & REQ_PREFLUSH ||
|
||||
bio_op(bio) == REQ_OP_DISCARD ||
|
||||
bio_should_skip_dm_default_key(bio))) {
|
||||
bio_op(bio) == REQ_OP_DISCARD )){
|
||||
bio_set_dev(bio, cc->dev->bdev);
|
||||
if (bio_sectors(bio))
|
||||
bio->bi_iter.bi_sector = cc->start +
|
||||
dm_target_offset(ti, bio->bi_iter.bi_sector);
|
||||
return DM_MAPIO_REMAPPED;
|
||||
}
|
||||
|
||||
// END IKSWR-71527
|
||||
/*
|
||||
* Check if bio is too large, split as needed.
|
||||
*/
|
||||
|
|
|
@ -3087,6 +3087,11 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data,
|
|||
goto unload_exit;
|
||||
}
|
||||
|
||||
if (!memcmp(data->client.app_name, "prov", strlen("prov"))) {
|
||||
pr_debug("Do not unload prov app from tz\n");
|
||||
goto unload_exit;
|
||||
}
|
||||
|
||||
__qseecom_cleanup_app(data);
|
||||
__qseecom_reentrancy_check_if_no_app_blocked(TZ_OS_APP_SHUTDOWN_ID);
|
||||
|
||||
|
@ -9673,6 +9678,9 @@ static int qseecom_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
mutex_lock(&qsee_bw_mutex);
|
||||
mutex_lock(&clk_access_lock);
|
||||
|
||||
INIT_WORK(&qseecom.bw_inactive_req_ws,
|
||||
qseecom_bw_inactive_req_work);
|
||||
|
||||
if (qseecom.current_mode != INACTIVE) {
|
||||
ret = msm_bus_scale_client_update_request(
|
||||
qseecom.qsee_perf_client, INACTIVE);
|
||||
|
|
|
@ -108,3 +108,6 @@ config MMC_CRYPTO
|
|||
Enabling this makes it possible for the kernel to use the crypto
|
||||
capabilities of the MMC device (if present) to perform crypto
|
||||
operations on data being transferred to/from the device.
|
||||
config SD_INSERT_DEBOUNCE_DELAY_LONGER
|
||||
bool "add the debounce time when sdcard insert"
|
||||
default n
|
||||
|
|
|
@ -39,11 +39,21 @@ static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
|
|||
struct mmc_gpio *ctx = host->slot.handler_priv;
|
||||
int present = host->ops->get_cd(host);
|
||||
|
||||
pr_debug("%s: cd gpio irq, gpio state %d (CARD_%s)\n",
|
||||
pr_info("%s: cd gpio irq, gpio state %d (CARD_%s)\n",
|
||||
mmc_hostname(host), present, present?"INSERT":"REMOVAL");
|
||||
|
||||
host->trigger_card_event = true;
|
||||
mmc_detect_change(host, msecs_to_jiffies(ctx->cd_debounce_delay_ms));
|
||||
|
||||
#ifdef CONFIG_SD_INSERT_DEBOUNCE_DELAY_LONGER
|
||||
if(present){
|
||||
mmc_detect_change(host, msecs_to_jiffies(1500));
|
||||
}
|
||||
else{
|
||||
mmc_detect_change(host, msecs_to_jiffies(ctx->cd_debounce_delay_ms));
|
||||
}
|
||||
#else //other project not use this function
|
||||
mmc_detect_change(host, msecs_to_jiffies(ctx->cd_debounce_delay_ms));
|
||||
#endif
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue