blob: b1ca21d59fa21c188cab88e57e08794a8a124590 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#include <linux/workqueue.h>
struct cc_regs {
void __iomem *cc_r[6];
};
union cc_r0 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned cc_en:1;
unsigned cc_sw_func_en:1;
unsigned cc_usb2_sel:1;
unsigned reserved1:1;
unsigned cc_current_int_mask:1;
unsigned cc_plugout_int_mask:1;
unsigned cc_plugin_int_mask:1;
unsigned cc_data_int_mask:1;
unsigned cc_det_force_en:1;
unsigned reserved2:3;
unsigned cc_vbus_force_en:1;
unsigned cc_filter_en:1;
unsigned vbus_filter_en:1;
unsigned reserved3:1;
unsigned cc_vbus_det_sel_o:3;
unsigned cc_ref_sel_o:1;
unsigned cc1_rd_sel_o:1;
unsigned cc2_rd_sel_o:1;
unsigned reserved4:2;
unsigned cc_error_list_mask:8;
} b;
};
union cc_r1 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned cc_int_clr:1;
unsigned reserved:31;
} b;
};
union cc_r2 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned cc_int_status:4;
unsigned reserved1:4;
unsigned cc_power_level:2;
unsigned reserved2:6;
unsigned cc_plug_ab:2;
unsigned reserved3:14;
} b;
};
union cc_r3 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned cc_attach_force:1;
unsigned cc_rp_out:1;
unsigned cc_vbus_out:1;
unsigned cc_usb2_work:1;
unsigned cc1_ufp_det_o_d2:3;
unsigned cc_vbusless_d2:1;
unsigned cc2_ufp_det_o_d2:3;
unsigned cc_vbus_ok_d2:1;
unsigned cc_error_value:8;
unsigned cc_state:3;
unsigned cc_top_enable:1;
unsigned cc_reg_pin_state1:3;
unsigned reserved1:1;
unsigned cc_reg_pin_state2:3;
unsigned reserved2:1;
} b;
};
union cc_r4 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned cc_otp_bg_trim:3;
unsigned cc_otp_res_std_trim:4;
unsigned cc_otp_func_en:1;
unsigned reserved:24;
} b;
};
union cc_r5 {
/** raw register data */
u32 d32;
/** register bits */
struct {
unsigned tcc_cnt_num:8;
unsigned trp_cnt_num:5;
unsigned filter_cnt_num:3;
unsigned tpd_cnt_num:5;
unsigned reserved:11;
} b;
};
struct cc_dev {
struct device *dev;
void __iomem *regs;
void __iomem *phy_base;
struct delayed_work work;
u32 cc_status;
};
#ifdef CONFIG_AMLOGIC_CC
void amlogic_cc_init(void);
#else
static void amlogic_cc_init(void)
{
}
#endif