Skip to content

Commit 802fdc4

Browse files
TonyHan11cfriedt
authored andcommitted
drivers: pwm: pwm_sam: update to support Soc SAMA7G5
Redefine some macros due to different naming scheme in the header file. Get the clock rate from the device tree when 'SOC_ATMEL_SAM_MCK_FREQ_HZ' is not defined. Signed-off-by: Tony Han <[email protected]>
1 parent 11844cd commit 802fdc4

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

drivers/pwm/pwm_sam.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717

1818
LOG_MODULE_REGISTER(pwm_sam, CONFIG_PWM_LOG_LEVEL);
1919

20+
/* SAMA7G5 uses a slightly different naming scheme in header file component/pmc.h */
21+
#ifdef _SAMA7G5_PWM_COMPONENT_H_
22+
#undef PWM_CMR_CPOL
23+
#define PWM_CMR_CPOL PWM_CMR_CPOL_Msk
24+
#define PWMCHNUM_NUMBER PWM_CH_NUM_NUMBER
25+
typedef pwm_registers_t Pwm;
26+
#endif
27+
2028
/* Some SoCs use a slightly different naming scheme */
2129
#if !defined(PWMCHNUM_NUMBER) && defined(PWMCH_NUM_NUMBER)
2230
#define PWMCHNUM_NUMBER PWMCH_NUM_NUMBER
@@ -44,8 +52,21 @@ static int sam_pwm_get_cycles_per_sec(const struct device *dev,
4452
uint8_t prescaler = config->prescaler;
4553
uint8_t divider = config->divider;
4654

47-
*cycles = SOC_ATMEL_SAM_MCK_FREQ_HZ /
48-
((1 << prescaler) * divider);
55+
#ifdef SOC_ATMEL_SAM_MCK_FREQ_HZ
56+
uint32_t rate = SOC_ATMEL_SAM_MCK_FREQ_HZ;
57+
#else
58+
uint32_t rate;
59+
int ret;
60+
61+
ret = clock_control_get_rate(SAM_DT_PMC_CONTROLLER,
62+
(clock_control_subsys_t)&config->clock_cfg,
63+
&rate);
64+
if (ret < 0) {
65+
return ret;
66+
}
67+
#endif
68+
69+
*cycles = rate / ((1 << prescaler) * divider);
4970

5071
return 0;
5172
}

0 commit comments

Comments
 (0)