/*
 * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * 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.
 */

&soc {
	led_flash0: qcom,camera-flash {
		cell-index = <0>;
		compatible = "qcom,camera-flash";
		qcom,flash-type = <1>;
		qcom,flash-source = <&pmi8950_flash0 &pmi8950_flash1>;
		qcom,torch-source = <&pmi8950_torch0 &pmi8950_torch1>;
		qcom,switch-source = <&pmi8950_switch>;
	};
};

&labibb {
	status = "ok";
	qpnp,qpnp-labibb-mode = "lcd";
};

&usb3 {
	vbus_dwc3-supply = <&smbcharger_charger_otg>;
	extcon = <&pmi8950_charger>;
};

&pmi8950_charger {
	qcom,external-typec;
	qcom,typec-psy-name = "typec";
};

