blob: fb3e2aefa704e0b15b26a25ac3acd990f72322a0 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#include <linux/workqueue.h>
struct bc_regs {
void __iomem *bc_r[2];
};
union bc_r0 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned bc_det_sw:1;
unsigned bc_int_clean:1;
unsigned bc_en:1;
unsigned reserved:29;
} b;
};
union bc_r1 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned bc_det_end:1;
unsigned port_status:4;
unsigned bc_state:3;
unsigned analog_output_signal:8;
unsigned reserved:16;
} b;
};
union bc_r2 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned usb2_bc_bypass:1;
unsigned usb2_bc_dcd_trim:2;
unsigned bc_otp_func_en:1;
unsigned reserved:28;
} b;
};
union bc_r3 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned usb2_otg_vbusdet_en0:1;
unsigned usb2_bc_dcd_en0:1;
unsigned usb2_bc_rpd_en:1;
unsigned usb2_bc_vdp_en0:1;
unsigned usb2_bc_chg_det_en0:1;
unsigned usb2_bc_vdm_en0:1;
unsigned usb2_bc_dcp_det_en0:1;
unsigned usb2_otg_aca_en0:1;
unsigned usb2_bgr_en0:1;
unsigned usb2_otg_sess_vld0:1;
unsigned usb2_bc_dcd_det0:1;
unsigned usb2_bc_chg_det0:1;
unsigned usb2_bc_dcp_det0:1;
unsigned usb2_otg_aca_iddig0:1;
unsigned usb2_otg_vbusdet_en1:1;
unsigned usb2_bc_dcd_en1:1;
unsigned usb2_bc_rpd_en1:1;
unsigned usb2_bc_vdp_en1:1;
unsigned usb2_bc_chg_det_en1:1;
unsigned usb2_bc_vdm_en1:1;
unsigned usb2_bc_dcp_det_en1:1;
unsigned usb2_otg_aca_en1:1;
unsigned usb2_bgr_en1:1;
unsigned usb2_otg_sess_vld1:1;
unsigned usb2_bc_dcd_det1:1;
unsigned usb2_bc_chg_det1:2;
unsigned usb2_bc_dcp_det1:1;
unsigned usb2_otg_aca_iddig1:3;
unsigned usb2_bc_rpd_en0:1;
} b;
};
union bc_r4 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned enable_usb2_otg_sess_vld:1;
unsigned enable_usb2_bc_dcd_det:1;
unsigned enable_usb2_bc_chg_det:1;
unsigned enable_usb2_bc_dcp_det:1;
unsigned enable_usb2_otg_aca_iddig:1;
unsigned reserved:27;
} b;
};
union bc_r5 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned second_cnt1_parameter:6;
unsigned second_cnt2_parameter:7;
unsigned first_cnt_parameter:7;
unsigned aca_cnt_parameter:6;
unsigned vbus_cnt_parameter:6;
} b;
};
union bc_r6 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned filter_time_parameter:3;
unsigned dcd_timer_cnt_parameter:10;
unsigned reserved:19;
} b;
};
struct bc_dev {
struct device *dev;
void __iomem *regs;
void __iomem *phy_base;
struct delayed_work work;
struct delayed_work vbus_work;
u32 bc_status;
};
#ifdef CONFIG_AMLOGIC_BC
void amlogic_bc_init(void);
#else
static void amlogic_bc_init(void)
{
}
#endif