/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */ /* * Copyright (c) 2019 Amlogic, Inc. All rights reserved. */ #include 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