Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: at91: master: Add sam9x60 support

The sam9x60 cpu clock is located at a different offset but is otherwise
similar to the master clock.

Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Alexandre Belloni and committed by
Stephen Boyd
e5be5370 2423eeae

+8 -3
+5 -3
drivers/clk/at91/clk-master.c
··· 29 29 struct regmap *regmap; 30 30 const struct clk_master_layout *layout; 31 31 const struct clk_master_characteristics *characteristics; 32 + u32 mckr; 32 33 }; 33 34 34 35 static inline bool clk_master_ready(struct regmap *regmap) ··· 70 69 master->characteristics; 71 70 unsigned int mckr; 72 71 73 - regmap_read(master->regmap, AT91_PMC_MCKR, &mckr); 72 + regmap_read(master->regmap, master->layout->offset, &mckr); 74 73 mckr &= layout->mask; 75 74 76 75 pres = (mckr >> layout->pres_shift) & MASTER_PRES_MASK; ··· 96 95 struct clk_master *master = to_clk_master(hw); 97 96 unsigned int mckr; 98 97 99 - regmap_read(master->regmap, AT91_PMC_MCKR, &mckr); 98 + regmap_read(master->regmap, master->layout->offset, &mckr); 100 99 101 100 return mckr & AT91_PMC_CSS; 102 101 } ··· 148 147 return hw; 149 148 } 150 149 151 - 152 150 const struct clk_master_layout at91rm9200_master_layout = { 153 151 .mask = 0x31F, 154 152 .pres_shift = 2, 153 + .offset = AT91_PMC_MCKR, 155 154 }; 156 155 157 156 const struct clk_master_layout at91sam9x5_master_layout = { 158 157 .mask = 0x373, 159 158 .pres_shift = 4, 159 + .offset = AT91_PMC_MCKR, 160 160 };
+1
drivers/clk/at91/pmc.h
··· 38 38 #define CLK_RANGE(MIN, MAX) {.min = MIN, .max = MAX,} 39 39 40 40 struct clk_master_layout { 41 + u32 offset; 41 42 u32 mask; 42 43 u8 pres_shift; 43 44 };
+2
include/linux/clk/at91_pmc.h
··· 74 74 #define AT91_PMC_USBDIV_4 (2 << 28) 75 75 #define AT91_PMC_USB96M (1 << 28) /* Divider by 2 Enable (PLLB only) */ 76 76 77 + #define AT91_PMC_CPU_CKR 0x28 /* CPU Clock Register */ 78 + 77 79 #define AT91_PMC_MCKR 0x30 /* Master Clock Register */ 78 80 #define AT91_PMC_CSS (3 << 0) /* Master Clock Selection */ 79 81 #define AT91_PMC_CSS_SLOW (0 << 0)