/* * Copyright (c) 2017-2018, NVIDIA Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef __TEGRA_USB_CD_H #define __TEGRA_USB_CD_H #include #include #include #include /* Charger current limits, as per BC1.2 spec */ #define USB_CHARGING_DCP_CURRENT_LIMIT_UA 1500000u #define USB_CHARGING_CDP_CURRENT_LIMIT_UA 1500000u #define USB_CHARGING_SDP_CURRENT_LIMIT_UA 900000u #define USB_CHARGING_NON_STANDARD_CHARGER_CURRENT_LIMIT_UA 500000u #define USB_CHARGING_APPLE_CHARGER_500mA_CURRENT_LIMIT_UA 500000u #define USB_CHARGING_APPLE_CHARGER_1000mA_CURRENT_LIMIT_UA 1000000u #define USB_CHARGING_APPLE_CHARGER_2000mA_CURRENT_LIMIT_UA 2000000u struct tegra_usb_cd; struct tegra_usb_cd_ops { int (*init)(struct tegra_usb_cd *ucd); int (*open)(struct tegra_usb_cd *ucd); int (*close)(struct tegra_usb_cd *ucd); int (*power_on)(struct tegra_usb_cd *ucd); int (*power_off)(struct tegra_usb_cd *ucd); int (*suspend)(struct tegra_usb_cd *ucd); int (*resume)(struct tegra_usb_cd *ucd); bool (*dcp_cd)(struct tegra_usb_cd *ucd); bool (*cdp_cd)(struct tegra_usb_cd *ucd); bool (*qc2_cd)(struct tegra_usb_cd *ucd); bool (*maxim14675_cd)(struct tegra_usb_cd *ucd); int (*apple_cd)(struct tegra_usb_cd *ucd); void (*vbus_pad_protection)(struct tegra_usb_cd *ucd, bool enable); }; struct tegra_usb_cd { struct device *dev; struct tegra_usb_cd_ops *hw_ops; struct extcon_dev *edev; struct regulator *vbus_reg; struct phy *phy; struct tegra_xusb_padctl *padctl; int open_count; unsigned int connect_type; u32 sdp_cdp_current_limit_ma; u32 current_limit_ma; u32 dcp_current_limit_ma; u32 qc2_current_limit_ma; u32 qc2_voltage; }; struct tegra_usb_cd_soc_data { int (*init_hw_ops)(struct tegra_usb_cd *ucd); }; enum tegra_usb_cd_apple_chargers { APPLE_500MA, APPLE_1000MA, APPLE_2000MA, }; int tegra_usb_cd_init_ops(struct tegra_usb_cd *ucd); #endif /* __TEGRA_USB_CD_H */