# SPDX-License-Identifier: GPL-2.0-or-later
fw_config
	field KB_BL 0
		option KB_BL_ABSENT 0
		option KB_BL_PRESENT 1
	end
	field FP 1
		option FP_ABSENT 0
		option FP_PRESENT 1
	end
	field WLAN 2 3
		option WLAN_WCN6856 0
		option WLAN_RTL8852 1
	end
	field WWAN 4 5
		option WWAN_DIASABLED 0
		option WWAN_L850GL 1
	end
	field STORAGE 6
		option STORAGE_EMMC 0
		option STORAGE_SSD 1
	end
	field KB_MAP 7
		option KB_MAP_PRIVACY 0
		option KB_MAP_NO_PRIVACY 1
	end
end

chip soc/amd/cezanne

	register "usb_phy_custom" = "1"
	register "usb_phy" = "{
		/* Left USB C0 Port */
		.Usb2PhyPort[0] = {
			.compdstune = 5,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 1,
			.txpreemppulsetune = 0,
			.txrisetune = 1,
			.txvreftune = 9,
			.txhsxvtune = 3,
			.txrestune = 1,
		},
		/* Left USB A0 Port or WWAN */
		.Usb2PhyPort[1] = {
			.compdstune = 5,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 1,
			.txpreemppulsetune = 0,
			.txrisetune = 1,
			.txvreftune = 9,
			.txhsxvtune = 3,
			.txrestune = 1,
		},
		/* User facing camera */
		.Usb2PhyPort[2] = {
			.compdstune = 1,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 2,
			.txpreemppulsetune = 0,
			.txrisetune = 2,
			.txvreftune = 3,
			.txhsxvtune = 3,
			.txrestune = 2,
		},
		/* World facing camera */
		.Usb2PhyPort[3] = {
			.compdstune = 1,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 2,
			.txpreemppulsetune = 0,
			.txrisetune = 2,
			.txvreftune = 3,
			.txhsxvtune = 3,
			.txrestune = 2,
		},
		/* Right USB C1 Port */
		.Usb2PhyPort[4] = {
			.compdstune = 6,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 1,
			.txpreemppulsetune = 0,
			.txrisetune = 1,
			.txvreftune = 0xe,
			.txhsxvtune = 3,
			.txrestune = 1,
		},
		/* Right USB A1 Port */
		.Usb2PhyPort[5] = {
			.compdstune = 5,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 1,
			.txpreemppulsetune = 0,
			.txrisetune = 1,
			.txvreftune = 9,
			.txhsxvtune = 3,
			.txrestune = 1,
		},
		/* WiFi / Bluetooth */
		.Usb2PhyPort[6] = {
			.compdstune = 1,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 2,
			.txpreemppulsetune = 0,
			.txrisetune = 2,
			.txvreftune = 3,
			.txhsxvtune = 3,
			.txrestune = 2,
		},
		/* Smart Card */
		.Usb2PhyPort[7] = {
			.compdstune = 1,
			.sqrxtune = 3,
			.txfslstune = 3,
			.txpreempamptune = 2,
			.txpreemppulsetune = 0,
			.txrisetune = 2,
			.txvreftune = 3,
			.txhsxvtune = 3,
			.txrestune = 2,
		},
		/* Left USB C0 Port */
		.Usb3PhyPort[0] = {
			.tx_term_ctrl=2,
			.rx_term_ctrl=2,
			.tx_vboost_lvl_en=1,
			.tx_vboost_lvl=5,
		},
		/* Left USB A0 Port or WWAN */
		.Usb3PhyPort[1] = {
			.tx_term_ctrl=2,
			.rx_term_ctrl=2,
			.tx_vboost_lvl_en=1,
			.tx_vboost_lvl=5,
		},
		/* Right USB C1 Port */
		.Usb3PhyPort[2] = {
			.tx_term_ctrl=2,
			.rx_term_ctrl=2,
			.tx_vboost_lvl_en=1,
			.tx_vboost_lvl=5,
		},
		/* Right USB A1 Port */
		.Usb3PhyPort[3] = {
			.tx_term_ctrl=2,
			.rx_term_ctrl=2,
			.tx_vboost_lvl_en=1,
			.tx_vboost_lvl=5,
		},
		.ComboPhyStaticConfig[0] = USB_COMBO_PHY_MODE_USB_C,
		.ComboPhyStaticConfig[1] = USB_COMBO_PHY_MODE_USB_C,
		.BatteryChargerEnable = 0,
		.PhyP3CpmP4Support = 0,
	}"

	device domain 0 on
		device ref gpp_bridge_2 on
			# Required so the NVMe gets placed into D3 when entering S0i3.
			chip drivers/pcie/rtd3/device
				register "name" = ""NVME""
				device pci 00.0 on end
			end
			probe STORAGE STORAGE_EMMC
		end # EMMC
		device ref gpp_bridge_3 on
			# Required so the NVMe gets placed into D3 when entering S0i3.
			chip drivers/pcie/rtd3/device
				register "name" = ""NVME""
				device pci 00.0 on end
			end
			probe STORAGE STORAGE_SSD
		end # NVMe
		device ref gpp_bridge_a on  # Internal GPP Bridge 0 to Bus A
			device ref gfx on
				chip drivers/gfx/generic
					register "device_count" = "1"
					register "device[0].name" = ""LCD""
					# Use ChromeOS privacy screen _HID
					register "device[0].hid" = ""GOOG0010""
					# Internal panel on the first port of the graphics chip
					register "device[0].type" = "panel"
					register "device[0].privacy.enabled" = "1"
					register "device[0].privacy.gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_18)"
					device generic 0.0 on
						probe KB_MAP KB_MAP_PRIVACY
					end
				end
			end
			device ref acp on
				chip drivers/amd/i2s_machine_dev
					register "hid" = ""10029836""
					device generic 0.0 hidden end
				end
			end # Audio
			device ref xhci_1 on # USB 3.1 (USB1)
				chip drivers/usb/acpi
					device ref xhci_1_root_hub on
						chip drivers/usb/acpi # Bluetooth
							register "enable_off_delay_ms" = "10"
							device ref usb2_port6 on end
						end
					end
				end
			end
		end
	end # domain

	register "slow_ppt_limit_mW"         = "25000"
	register "fast_ppt_limit_mW"         = "30000"
	register "slow_ppt_time_constant_s"  = "5"
	register "stapm_time_constant_s"     = "275"
	register "sustained_power_limit_mW"  = "12000"
	register "thermctl_limit_degreeC"    = "100"

	register "telemetry_vddcrvddfull_scale_current_mA" = "94623" #mA
	register "telemetry_vddcrvddoffset" =  "1847"
	register "telemetry_vddcrsocfull_scale_current_mA" = "29904" #mA
	register "telemetry_vddcrsocoffset" =  "756"

	# Enable STT support
	register "stt_control" = "1"
	register "stt_pcb_sensor_count" = "2"
	register "stt_min_limit" = "12000"
	register "stt_m1" = "0x04DE"
	register "stt_m2" = "0x13"
	register "stt_m3" = "0"
	register "stt_m4" = "0"
	register "stt_m5" = "0"
	register "stt_m6" = "0"
	register "stt_c_apu" = "0xDA43"
	register "stt_c_gpu" = "0"
	register "stt_c_hs2" = "0"
	register "stt_alpha_apu" = "0x199A"
	register "stt_alpha_gpu" = "0"
	register "stt_alpha_hs2" = "0"
	register "stt_skin_temp_apu" = "0x2E00"
	register "stt_skin_temp_gpu" = "0"
	register "stt_skin_temp_hs2" = "0"
	register "stt_error_coeff" = "0x21"
	register "stt_error_rate_coefficient" = "0x2666"

	# I2C Config
	#+-------------------+---------------------------+
	#| Field             |  Value                    |
	#+-------------------+---------------------------+
	#| I2C0              | Trackpad                  |
	#| I2C1              | Touchscreen               |
	#| I2C2              | Speaker, Codec, P-SAR     |
	#| I2C3              | H1 TPM                 |
	#+-------------------+---------------------------+
	register "i2c[0]" = "{
		.speed = I2C_SPEED_FAST,
	}"

	register "i2c[1]" = "{
		.speed = I2C_SPEED_FAST,
	}"

	register "i2c[2]" = "{
		.speed = I2C_SPEED_FAST,
	}"

	register "i2c[3]" = "{
		.speed = I2C_SPEED_FAST,
		.early_init = true,
	}"

	register "edp_phy_override" = "1"

	# bit vector of phy, bit0=1: DP0, bit1=1: DP1, bit2=1: DP2, bit3=1: DP3
	register "edp_physel" = "0x1"

	register "edp_tuningset" = "{
		.dp_vs_pemph_level = 0x00,
		.tx_eq_main = 0x1f,
		.tx_eq_pre = 0x0,
		.tx_eq_post = 0x0,
		.tx_vboost_lvl = 0x5,
	}"

	device ref i2c_0 on
		chip drivers/i2c/generic
			register "hid" = ""ELAN0000""
			register "desc" = ""ELAN Touchpad""
			register "irq_gpio" = "ACPI_GPIO_IRQ_EDGE_LOW(GPIO_9)"
			register "wake" = "GEVENT_22"
			register "detect" = "1"
			device i2c 15 on end
		end
	end # I2C0

	device ref i2c_1 on
		chip drivers/i2c/generic
			register "hid" = ""ELAN0001""
			register "desc" = ""ELAN Touchscreen""
			register "detect" = "1"
			register "irq_gpio" = "ACPI_GPIO_IRQ_LEVEL_LOW(GPIO_89)"
			register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_68)"
			register "enable_delay_ms" = "1"
			register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPIO_121)"
			register "reset_delay_ms" = "20"
			register "has_power_resource" = "1"
			device i2c 10 on end
		end
		chip drivers/i2c/hid
			register "generic.hid" = ""GTCH7503""
			register "generic.desc" = ""G2TOUCH Touchscreen""
			register "generic.irq_gpio" = "ACPI_GPIO_IRQ_LEVEL_LOW(GPIO_89)"
			register "generic.detect" = "1"
			register "generic.enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_68)"
			register "generic.enable_delay_ms" = "1"
			register "generic.reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPIO_121)"
			register "generic.reset_delay_ms" = "50"
			register "generic.has_power_resource" = "1"
			register "hid_desc_reg_offset" = "0x01"
			device i2c 40 on end
		end
	end # I2C1

	device ref i2c_2 on
		chip drivers/i2c/generic
			register "hid" = ""RTL5682""
			register "name" = ""RT58""
			register "desc" = ""Realtek RT5682""
			register "irq_gpio" = "ACPI_GPIO_IRQ_EDGE_BOTH(GPIO_90)"
			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 end
		end
	end # I2C2

	device ref uart_1 on
		chip drivers/uart/acpi
			register "name" = ""CRFP""
			register "desc" = ""Fingerprint Reader""
			register "hid" = "ACPI_DT_NAMESPACE_HID"
			register "compat_string" = ""google,cros-ec-uart""
			register "irq_gpio" = "ACPI_GPIO_IRQ_LEVEL_LOW(GPIO_21)"
			register "wake" = "GEVENT_5"
			register "uart" = "ACPI_UART_RAW_DEVICE(3000000, 64)"
			register "has_power_resource" = "1"
			register "reset_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_LOW(GPIO_11)"
			register "enable_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_3)"
			register "enable_delay_ms" = "3"
			device generic 0 alias fpmcu on
				probe FP FP_PRESENT
			end
		end
	end

	chip drivers/generic/max98357a
			register "hid" = ""MX98360A""
			register "sdmode_gpio" = "ACPI_GPIO_OUTPUT_ACTIVE_HIGH(GPIO_70)"
			register "sdmode_delay" = "5"
			device generic 0.1 on end
	end

end	# chip soc/amd/cezanne