mirror of https://gitee.com/openkylin/linux.git
ASPEED soc driver updates for 5.12
- Clock control logic for LPC snoop driver - New system ids for AST2600 variants -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+nHMAt9PCBDH63wBa3ZZB4FHcJ4FAmAjy7UACgkQa3ZZB4FH cJ4/2g/+OxqvJsTbgVAhkuZfCOsB/xY/2tWMuxcmaylD7QJxpxGTC4/u3WYQZyXL vN3jTPETJ52GomVgBlKLG/AkHjXNJ82EwnwNBk48lGgOYIYFuI4JWJOLcKtsXkFj hq/iQoQqOhhanYsp3jav7fssFUOgg1IYpwNCBP31hpy3P8fAjWKtJBO/v7lI/aNX AivLWDAQzZy+bW2E9OouyD8WMLrEcQ7bAaWza1hCmk/pakILqvhxU9ukluDcuFGc JRHArIXmc3h1MzfXFPRj6kVII0E1c8YA+8e4eEyPJK2YnI28CQzBej6LhotwnqH9 KfYPVCNqJSiQjzUhW3KcqJFwooCoRhhrPFmKoi1uHhoTbhKi3koboQwsdqjcReM8 vQ3BQuGoJfR5bJiwDP3KIrRPBRpuzcL9dgOHwhhYTZEEdJO4rXNGXVO50JsgL5Re mzSGsyYvs2HS9KAjctRbBfLso7SGq8tuLckQ/J2t2xJukTnpMOv1ofg6BNDUvtzs EzIwVuy9LoofS6sdgKSNv795RRXUC4EmFu/zcGtZ98J5ZiUwEqpC06qdwBBPwIxv b93ZkmLusi8+UJ/Bp9cKVSkjjwWXq0VWKb7mYiqfGSCqXGuFOUXCYxltCn4CJcob +/FgGf2M3uW8XOU3jTLj6JWJV1Ovu2yzUxK2y7wd9G6YsOGN9Bg= =1Yka -----END PGP SIGNATURE----- Merge tag 'aspeed-5.12-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/aspeed into arm/drivers ASPEED soc driver updates for 5.12 - Clock control logic for LPC snoop driver - New system ids for AST2600 variants * tag 'aspeed-5.12-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/joel/aspeed: soc: aspeed: socinfo: Add new systems soc: aspeed: snoop: Add clock control logic Link: https://lore.kernel.org/r/CACPK8Xf+4VkWC6rkHhsWdwhaLjy2Az=GAHaEe=SvOiUc_OGKSQ@mail.gmail.com Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
4f79a8b06f
|
@ -11,6 +11,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/kfifo.h>
|
||||
|
@ -67,6 +68,7 @@ struct aspeed_lpc_snoop_channel {
|
|||
struct aspeed_lpc_snoop {
|
||||
struct regmap *regmap;
|
||||
int irq;
|
||||
struct clk *clk;
|
||||
struct aspeed_lpc_snoop_channel chan[NUM_SNOOP_CHANNELS];
|
||||
};
|
||||
|
||||
|
@ -282,22 +284,42 @@ static int aspeed_lpc_snoop_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
lpc_snoop->clk = devm_clk_get(dev, NULL);
|
||||
if (IS_ERR(lpc_snoop->clk)) {
|
||||
rc = PTR_ERR(lpc_snoop->clk);
|
||||
if (rc != -EPROBE_DEFER)
|
||||
dev_err(dev, "couldn't get clock\n");
|
||||
return rc;
|
||||
}
|
||||
rc = clk_prepare_enable(lpc_snoop->clk);
|
||||
if (rc) {
|
||||
dev_err(dev, "couldn't enable clock\n");
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = aspeed_lpc_snoop_config_irq(lpc_snoop, pdev);
|
||||
if (rc)
|
||||
return rc;
|
||||
goto err;
|
||||
|
||||
rc = aspeed_lpc_enable_snoop(lpc_snoop, dev, 0, port);
|
||||
if (rc)
|
||||
return rc;
|
||||
goto err;
|
||||
|
||||
/* Configuration of 2nd snoop channel port is optional */
|
||||
if (of_property_read_u32_index(dev->of_node, "snoop-ports",
|
||||
1, &port) == 0) {
|
||||
rc = aspeed_lpc_enable_snoop(lpc_snoop, dev, 1, port);
|
||||
if (rc)
|
||||
if (rc) {
|
||||
aspeed_lpc_disable_snoop(lpc_snoop, 0);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
clk_disable_unprepare(lpc_snoop->clk);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -309,6 +331,8 @@ static int aspeed_lpc_snoop_remove(struct platform_device *pdev)
|
|||
aspeed_lpc_disable_snoop(lpc_snoop, 0);
|
||||
aspeed_lpc_disable_snoop(lpc_snoop, 1);
|
||||
|
||||
clk_disable_unprepare(lpc_snoop->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ static struct {
|
|||
/* AST2600 */
|
||||
{ "AST2600", 0x05000303 },
|
||||
{ "AST2620", 0x05010203 },
|
||||
{ "AST2605", 0x05030103 },
|
||||
};
|
||||
|
||||
static const char *siliconid_to_name(u32 siliconid)
|
||||
|
@ -43,14 +44,30 @@ static const char *siliconid_to_name(u32 siliconid)
|
|||
static const char *siliconid_to_rev(u32 siliconid)
|
||||
{
|
||||
unsigned int rev = (siliconid >> 16) & 0xff;
|
||||
unsigned int gen = (siliconid >> 24) & 0xff;
|
||||
|
||||
switch (rev) {
|
||||
case 0:
|
||||
return "A0";
|
||||
case 1:
|
||||
return "A1";
|
||||
case 3:
|
||||
return "A2";
|
||||
if (gen < 0x5) {
|
||||
/* AST2500 and below */
|
||||
switch (rev) {
|
||||
case 0:
|
||||
return "A0";
|
||||
case 1:
|
||||
return "A1";
|
||||
case 3:
|
||||
return "A2";
|
||||
}
|
||||
} else {
|
||||
/* AST2600 */
|
||||
switch (rev) {
|
||||
case 0:
|
||||
return "A0";
|
||||
case 1:
|
||||
return "A1";
|
||||
case 2:
|
||||
return "A2";
|
||||
case 3:
|
||||
return "A3";
|
||||
}
|
||||
}
|
||||
|
||||
return "??";
|
||||
|
|
Loading…
Reference in New Issue