Skip to content

Commit 2ffb8dd

Browse files
benpiccocarlescufi
authored andcommitted
usb: sam0: use TRIM registers when available
Newer SoCs like SAME54 provide dedicated registers to store the USB trim configuration. Use those registers if they are defined in ASF to access the calibration data. Signed-off-by: Benjamin Valentin <[email protected]>
1 parent e0b94e9 commit 2ffb8dd

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

drivers/usb/device/usb_dc_sam0.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ static void usb_sam0_load_padcal(void)
132132
u32_t pad_transp;
133133
u32_t pad_trim;
134134

135+
#ifdef USB_FUSES_TRANSN_ADDR
136+
pad_transn = *(uint32_t *)USB_FUSES_TRANSN_ADDR;
137+
#else
135138
pad_transn = (*((uint32_t *)(NVMCTRL_OTP4) +
136139
(NVM_USB_PAD_TRANSN_POS / 32)) >>
137140
(NVM_USB_PAD_TRANSN_POS % 32)) &
@@ -140,9 +143,13 @@ static void usb_sam0_load_padcal(void)
140143
if (pad_transn == 0x1F) {
141144
pad_transn = 5U;
142145
}
146+
#endif
143147

144148
regs->PADCAL.bit.TRANSN = pad_transn;
145149

150+
#ifdef USB_FUSES_TRANSP_ADDR
151+
pad_transp = *(uint32_t *)USB_FUSES_TRANSP_ADDR;
152+
#else
146153
pad_transp = (*((uint32_t *)(NVMCTRL_OTP4) +
147154
(NVM_USB_PAD_TRANSP_POS / 32)) >>
148155
(NVM_USB_PAD_TRANSP_POS % 32)) &
@@ -151,9 +158,13 @@ static void usb_sam0_load_padcal(void)
151158
if (pad_transp == 0x1F) {
152159
pad_transp = 29U;
153160
}
161+
#endif
154162

155163
regs->PADCAL.bit.TRANSP = pad_transp;
156164

165+
#ifdef USB_FUSES_TRIM_ADDR
166+
pad_trim = *(uint32_t *)USB_FUSES_TRIM_ADDR;
167+
#else
157168
pad_trim = (*((uint32_t *)(NVMCTRL_OTP4) +
158169
(NVM_USB_PAD_TRIM_POS / 32)) >>
159170
(NVM_USB_PAD_TRIM_POS % 32)) &
@@ -162,6 +173,7 @@ static void usb_sam0_load_padcal(void)
162173
if (pad_trim == 0x7) {
163174
pad_trim = 3U;
164175
}
176+
#endif
165177

166178
regs->PADCAL.bit.TRIM = pad_trim;
167179
}

0 commit comments

Comments
 (0)