126 lines
2.4 KiB
C
126 lines
2.4 KiB
C
/* 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
|