162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright 2011 Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci/*
662306a36Sopenharmony_ci * driver for VIA VT1632 DVI Transmitter
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/slab.h>
1062306a36Sopenharmony_ci#include "via_aux.h"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistatic const char *name = "VT1632 DVI Transmitter";
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistatic void probe(struct via_aux_bus *bus, u8 addr)
1762306a36Sopenharmony_ci{
1862306a36Sopenharmony_ci	struct via_aux_drv drv = {
1962306a36Sopenharmony_ci		.bus	=	bus,
2062306a36Sopenharmony_ci		.addr	=	addr,
2162306a36Sopenharmony_ci		.name	=	name};
2262306a36Sopenharmony_ci	/* check vendor id and device id */
2362306a36Sopenharmony_ci	const u8 id[] = {0x06, 0x11, 0x92, 0x31}, len = ARRAY_SIZE(id);
2462306a36Sopenharmony_ci	u8 tmp[ARRAY_SIZE(id)];
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len))
2762306a36Sopenharmony_ci		return;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	printk(KERN_INFO "viafb: Found %s at address 0x%x\n", name, addr);
3062306a36Sopenharmony_ci	via_aux_add(&drv);
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_civoid via_aux_vt1632_probe(struct via_aux_bus *bus)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	u8 i;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	for (i = 0x08; i <= 0x0F; i++)
3862306a36Sopenharmony_ci		probe(bus, i);
3962306a36Sopenharmony_ci}
40