fw_config
	field TOUCHSCREEN_SOURCE 39 40
		option TOUCHSCREEN_UNPROVISIONED 0
		option TOUCHSCREEN_ELAN1001 1
		option TOUCHSCREEN_ELAN9008 2
	end
end

fw_config
	field AUDIO_CODEC_SOURCE 41 43
		option AUDIO_CODEC_UNPROVISIONED 0
		option AUDIO_CODEC_ALC5682 1
		option AUDIO_CODEC_ALC5682I_VS 2
	end
end

chip soc/intel/jasperlake

	# Intel Common SoC Config
	#+-------------------+---------------------------+
	#| Field             |  Value                    |
	#+-------------------+---------------------------+
	#| GSPI0             | cr50 TPM. Early init is   |
	#|                   | required to set up a BAR  |
	#|                   | for TPM communication     |
	#|                   | before memory is up       |
	#| I2C0              | Trackpad                  |
	#| I2C2              | Touchscreen               |
	#| I2C4              | Audio                     |
	#+-------------------+---------------------------+
	register "common_soc_config" = "{
		.gspi[0] = {
			.speed_mhz = 1,
			.early_init = 1,
		},
		.i2c[0] = {
			.speed = I2C_SPEED_FAST,
			.speed_config[0] = {
				.speed = I2C_SPEED_FAST,
				.scl_lcnt = 190,
				.scl_hcnt = 100,
				.sda_hold = 40,
			}
		},
		.i2c[2] = {
			.speed = I2C_SPEED_FAST,
			.speed_config[0] = {
				.speed = I2C_SPEED_FAST,
				.scl_lcnt = 190,
				.scl_hcnt = 100,
				.sda_hold = 40,
			}
		},
		.i2c[4] = {
			.speed = I2C_SPEED_FAST,
			.speed_config[0] = {
				.speed = I2C_SPEED_FAST,
				.scl_lcnt = 190,
				.scl_hcnt = 100,
				.sda_hold = 40,
			}
		},
	}"

	register "SerialIoI2cMode" = "{
		[PchSerialIoIndexI2C0]  = PchSerialIoPci,
		[PchSerialIoIndexI2C1]  = PchSerialIoDisabled,
		[PchSerialIoIndexI2C2]  = PchSerialIoPci,
		[PchSerialIoIndexI2C3]  = PchSerialIoDisabled,
		[PchSerialIoIndexI2C4]  = PchSerialIoPci,
	}"

	# USB Port Configuration
	register "usb2_ports[5]" = "USB2_PORT_MID(OC_SKIP)"     # Camera

	register "tcc_offset" = "8"     # TCC of 97C

	# Core Display Clock Frequency selection
	register "cd_clock" = "CD_CLOCK_172_8_MHZ"

	device domain 0 on
		device pci 04.0 on
			# Default DPTF Policy for all Dedede boards if not overridden
			chip drivers/intel/dptf
				## Passive Policy
				register "policies.passive" = "{
					[0] = DPTF_PASSIVE(CPU, CPU,           67, 1000),
					[1] = DPTF_PASSIVE(CHARGER, TEMP_SENSOR_0, 62, 1000),
					[2] = DPTF_PASSIVE(CPU, TEMP_SENSOR_1, 58, 1000),
					[3] = DPTF_PASSIVE(CPU, TEMP_SENSOR_2, 40, 1000)
				}"

				## Critical Policy
				register "policies.critical" = "{
					[0] = DPTF_CRITICAL(CPU,           105, SHUTDOWN),
					[1] = DPTF_CRITICAL(TEMP_SENSOR_0, 98, SHUTDOWN),
					[2] = DPTF_CRITICAL(TEMP_SENSOR_1, 80, SHUTDOWN),
					[3] = DPTF_CRITICAL(TEMP_SENSOR_2, 80, SHUTDOWN)
				}"

				## Power Limits Control
				register "controls.power_limits" = "{
					.pl1 = {
						.min_power = 6000,
						.max_power = 6000,
						.time_window_min = 1 * MSECS_PER_SEC,
						.time_window_max = 1 * MSECS_PER_SEC,
						.granularity = 200,
					},
					.pl2 = {
						.min_power = 20000,
						.max_power = 20000,
						.time_window_min = 1 * MSECS_PER_SEC,
						.time_window_max = 1 * MSECS_PER_SEC,
						.granularity = 1000,
					}
				}"

				register "options.tsr[0].desc" = ""Charger""
				register "options.tsr[1].desc" = ""Vcore""
				register "options.tsr[2].desc" = ""Ambient""

				## Charger Performance Control (Control, mA)
				register "controls.charger_perf" = "{
					[0] = {  32, 2048 },
					[1] = {  28, 1792 },
					[2] = {  24, 1536 },
					[3] = {  20, 1280 }
				}"

				device generic 0 on end
			end
		end # SA Thermal device
		device pci 14.0 on
			chip drivers/usb/acpi
				device usb 0.0 on
					chip drivers/usb/acpi
						register "desc" = ""Camera""
						register "type" = "UPC_TYPE_INTERNAL"
						device usb 2.5 on end
					end
				end
			end
		end # USB xHCI

		device pci 15.0 on
			chip drivers/i2c/generic
				register "hid" = ""ELAN0000""
				register "desc" = ""ELAN Touchpad""
				register "irq" = "ACPI_IRQ_WAKE_EDGE_LOW(GPP_B3_IRQ)"
				register "wake" = "GPE0_DW0_03"
				register "probed" = "1"
				device i2c 15 on end
			end
			chip drivers/i2c/hid
				register "generic.hid" = ""ELAN2702""
				register "generic.desc" = ""ELAN Touchpad""
				register "generic.irq" = "ACPI_IRQ_WAKE_LEVEL_LOW(GPP_B3_IRQ)"
				register "generic.wake" = "GPE0_DW0_03"
				register "generic.probed" = "1"
				register "hid_desc_reg_offset" = "0x01"
				device i2c 15 on end
			end
		end
		device pci 15.2 on
			chip drivers/i2c/generic
				register "hid" = ""ELAN0001""
				register "desc" = ""ELAN Touchscreen""
				register "irq" = "ACPI_IRQ_EDGE_LOW(GPP_D4_IRQ)"
				register "probed" = "1"
				register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPP_D5)"
				register "reset_delay_ms" = "20"
				register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D6)"
				register "enable_delay_ms" = "1"
				register "has_power_resource" = "1"
				device i2c 10 on
					probe TOUCHSCREEN_SOURCE TOUCHSCREEN_ELAN1001
					probe TOUCHSCREEN_SOURCE TOUCHSCREEN_UNPROVISIONED
				end
			end
			chip drivers/i2c/hid
				register "generic.hid" = ""ELAN9008""
				register "generic.desc" = ""ELAN Touchscreen""
				register "generic.irq" = "ACPI_IRQ_LEVEL_LOW(GPP_D4_IRQ)"
				register "generic.probed" = "1"
				register "generic.reset_gpio" =
							"ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPP_D5)"
				register "generic.enable_gpio" =
							"ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D6)"
				register "generic.enable_delay_ms" = "7"
				register "generic.reset_delay_ms" = "70"
				register "generic.has_power_resource" = "1"
				register "hid_desc_reg_offset" = "0x01"
				device i2c 10 on
					probe TOUCHSCREEN_SOURCE TOUCHSCREEN_ELAN9008
				end
			end
		end # I2C 2
		device pci 19.0 on
			chip drivers/i2c/generic
				register "hid" = ""10EC5682""
				register "name" = ""RT58""
				register "desc" = ""Realtek RT5682""
				register "irq_gpio" = "ACPI_GPIO_IRQ_EDGE_BOTH(GPP_D16)"
				register "property_count" = "1"
				register "property_list[0].type" = "ACPI_DP_TYPE_INTEGER"
				register "property_list[0].name" = ""realtek,jd-src""
				register "property_list[0].integer" = "1"
				device i2c 1a on
					probe AUDIO_CODEC_SOURCE AUDIO_CODEC_ALC5682
					probe AUDIO_CODEC_SOURCE AUDIO_CODEC_UNPROVISIONED
				end
			end
			chip drivers/i2c/generic
				register "hid" = ""RTL5682""
				register "name" = ""RT58""
				register "desc" = ""Realtek RT5682""
				register "irq_gpio" = "ACPI_GPIO_IRQ_EDGE_BOTH(GPP_D16)"
				register "property_count" = "1"
				register "property_list[0].type" = "ACPI_DP_TYPE_INTEGER"
				register "property_list[0].name" = ""realtek,jd-src""
				register "property_list[0].integer" = "1"
				device i2c 1a on
					probe AUDIO_CODEC_SOURCE AUDIO_CODEC_ALC5682I_VS
				end
			end
			chip drivers/i2c/generic
				register "hid" = ""10EC1015""
				register "desc" = ""Realtek SPK AMP L""
				register "uid" = "0"
				device i2c 28 on
					probe AUDIO_AMP RT1015_I2C
					probe AUDIO_AMP UNPROVISIONED
				end
			end
			chip drivers/i2c/generic
				register "hid" = ""10EC1015""
				register "desc" = ""Realtek SPK AMP R""
				register "uid" = "1"
				device i2c 29 on
					probe AUDIO_AMP RT1015_I2C
					probe AUDIO_AMP UNPROVISIONED
				end
			end
		end
		device pci 1f.3 on
			chip drivers/generic/alc1015
				register "sdb" =  "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPP_D17)"
				device generic 0 on
					probe AUDIO_AMP RT1015P_AUTO
				end
			end
		end # Intel HDA
	end
end
