summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2025-10-07 16:54:43 +0200
committerThomas Zimmermann <tzimmermann@suse.de>2025-10-15 09:59:41 +0200
commit703f4731264843161ee074232a7060ea2cdebbdf (patch)
tree7908e96f3e64d6831d7897ccabf95ae964f9ce9e
parent4b3374d790567e5eb3c83f1f70c396ddc5da603d (diff)
drm/ast: Support device quirks
Define struct ast_device_quirks and add an instance for each hardware generation. The type will provide information about per-gen constants and oddities. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>> Link: https://lore.kernel.org/r/20251007150343.273718-3-tzimmermann@suse.de
-rw-r--r--drivers/gpu/drm/ast/ast_2000.c5
-rw-r--r--drivers/gpu/drm/ast/ast_2100.c5
-rw-r--r--drivers/gpu/drm/ast/ast_2200.c5
-rw-r--r--drivers/gpu/drm/ast/ast_2300.c5
-rw-r--r--drivers/gpu/drm/ast/ast_2400.c5
-rw-r--r--drivers/gpu/drm/ast/ast_2500.c5
-rw-r--r--drivers/gpu/drm/ast/ast_2600.c5
-rw-r--r--drivers/gpu/drm/ast/ast_drv.c4
-rw-r--r--drivers/gpu/drm/ast/ast_drv.h8
9 files changed, 38 insertions, 9 deletions
diff --git a/drivers/gpu/drm/ast/ast_2000.c b/drivers/gpu/drm/ast/ast_2000.c
index 74a041e99061..ae4d7a2a0ec8 100644
--- a/drivers/gpu/drm/ast/ast_2000.c
+++ b/drivers/gpu/drm/ast/ast_2000.c
@@ -211,6 +211,9 @@ void ast_2000_detect_tx_chip(struct ast_device *ast, bool need_post)
__ast_device_set_tx_chip(ast, tx_chip);
}
+static const struct ast_device_quirks ast_2000_device_quirks = {
+};
+
struct drm_device *ast_2000_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -228,7 +231,7 @@ struct drm_device *ast_2000_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2000_device_quirks);
ast->dclk_table = ast_2000_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_2100.c b/drivers/gpu/drm/ast/ast_2100.c
index eb3336c84833..01e064e67cf7 100644
--- a/drivers/gpu/drm/ast/ast_2100.c
+++ b/drivers/gpu/drm/ast/ast_2100.c
@@ -432,6 +432,9 @@ static void ast_2100_detect_widescreen(struct ast_device *ast)
ast->support_wuxga = true;
}
+static const struct ast_device_quirks ast_2100_device_quirks = {
+};
+
struct drm_device *ast_2100_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -449,7 +452,7 @@ struct drm_device *ast_2100_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2100_device_quirks);
ast->dclk_table = ast_2000_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_2200.c b/drivers/gpu/drm/ast/ast_2200.c
index 391034d5f425..46b6fc6cf7eb 100644
--- a/drivers/gpu/drm/ast/ast_2200.c
+++ b/drivers/gpu/drm/ast/ast_2200.c
@@ -43,6 +43,9 @@ static void ast_2200_detect_widescreen(struct ast_device *ast)
ast->support_wuxga = true;
}
+static const struct ast_device_quirks ast_2200_device_quirks = {
+};
+
struct drm_device *ast_2200_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -60,7 +63,7 @@ struct drm_device *ast_2200_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2200_device_quirks);
ast->dclk_table = ast_2000_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_2300.c b/drivers/gpu/drm/ast/ast_2300.c
index 3c9e1960b90c..b76a80d6aea6 100644
--- a/drivers/gpu/drm/ast/ast_2300.c
+++ b/drivers/gpu/drm/ast/ast_2300.c
@@ -1407,6 +1407,9 @@ static void ast_2300_detect_widescreen(struct ast_device *ast)
ast->support_wuxga = true;
}
+static const struct ast_device_quirks ast_2300_device_quirks = {
+};
+
struct drm_device *ast_2300_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -1424,7 +1427,7 @@ struct drm_device *ast_2300_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2300_device_quirks);
ast->dclk_table = ast_2000_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_2400.c b/drivers/gpu/drm/ast/ast_2400.c
index be866d1cd06a..2b41ff69ab0b 100644
--- a/drivers/gpu/drm/ast/ast_2400.c
+++ b/drivers/gpu/drm/ast/ast_2400.c
@@ -44,6 +44,9 @@ static void ast_2400_detect_widescreen(struct ast_device *ast)
ast->support_wuxga = true;
}
+static const struct ast_device_quirks ast_2400_device_quirks = {
+};
+
struct drm_device *ast_2400_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -61,7 +64,7 @@ struct drm_device *ast_2400_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2400_device_quirks);
ast->dclk_table = ast_2000_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_2500.c b/drivers/gpu/drm/ast/ast_2500.c
index 086c74682a55..6d305a8ccc51 100644
--- a/drivers/gpu/drm/ast/ast_2500.c
+++ b/drivers/gpu/drm/ast/ast_2500.c
@@ -618,6 +618,9 @@ static void ast_2500_detect_widescreen(struct ast_device *ast)
ast->support_wuxga = true;
}
+static const struct ast_device_quirks ast_2500_device_quirks = {
+};
+
struct drm_device *ast_2500_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -635,7 +638,7 @@ struct drm_device *ast_2500_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2500_device_quirks);
ast->dclk_table = ast_2500_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_2600.c b/drivers/gpu/drm/ast/ast_2600.c
index 1f709486f491..df3b429e8174 100644
--- a/drivers/gpu/drm/ast/ast_2600.c
+++ b/drivers/gpu/drm/ast/ast_2600.c
@@ -59,6 +59,9 @@ static void ast_2600_detect_widescreen(struct ast_device *ast)
ast->support_wuxga = true;
}
+static const struct ast_device_quirks ast_2600_device_quirks = {
+};
+
struct drm_device *ast_2600_device_create(struct pci_dev *pdev,
const struct drm_driver *drv,
enum ast_chip chip,
@@ -76,7 +79,7 @@ struct drm_device *ast_2600_device_create(struct pci_dev *pdev,
return ERR_CAST(ast);
dev = &ast->base;
- ast_device_init(ast, chip, config_mode, regs, ioregs);
+ ast_device_init(ast, chip, config_mode, regs, ioregs, &ast_2600_device_quirks);
ast->dclk_table = ast_2500_dclk_table;
diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
index a89735c6a462..b9a9b050b546 100644
--- a/drivers/gpu/drm/ast/ast_drv.c
+++ b/drivers/gpu/drm/ast/ast_drv.c
@@ -51,8 +51,10 @@ void ast_device_init(struct ast_device *ast,
enum ast_chip chip,
enum ast_config_mode config_mode,
void __iomem *regs,
- void __iomem *ioregs)
+ void __iomem *ioregs,
+ const struct ast_device_quirks *quirks)
{
+ ast->quirks = quirks;
ast->chip = chip;
ast->config_mode = config_mode;
ast->regs = regs;
diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
index b2b30a0e4ffb..2a2c28693dc6 100644
--- a/drivers/gpu/drm/ast/ast_drv.h
+++ b/drivers/gpu/drm/ast/ast_drv.h
@@ -164,9 +164,14 @@ to_ast_connector(struct drm_connector *connector)
* Device
*/
+struct ast_device_quirks {
+};
+
struct ast_device {
struct drm_device base;
+ const struct ast_device_quirks *quirks;
+
void __iomem *regs;
void __iomem *ioregs;
void __iomem *dp501_fw_buf;
@@ -414,7 +419,8 @@ void ast_device_init(struct ast_device *ast,
enum ast_chip chip,
enum ast_config_mode config_mode,
void __iomem *regs,
- void __iomem *ioregs);
+ void __iomem *ioregs,
+ const struct ast_device_quirks *quirks);
void __ast_device_set_tx_chip(struct ast_device *ast, enum ast_tx_chip tx_chip);
/* ast_2000.c */