18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright 2011 Florian Tobias Schandinat <FlorianSchandinat@gmx.de> 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci/* 68c2ecf20Sopenharmony_ci * driver for VIA VT1632 DVI Transmitter 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/slab.h> 108c2ecf20Sopenharmony_ci#include "via_aux.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistatic const char *name = "VT1632 DVI Transmitter"; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cistatic void probe(struct via_aux_bus *bus, u8 addr) 178c2ecf20Sopenharmony_ci{ 188c2ecf20Sopenharmony_ci struct via_aux_drv drv = { 198c2ecf20Sopenharmony_ci .bus = bus, 208c2ecf20Sopenharmony_ci .addr = addr, 218c2ecf20Sopenharmony_ci .name = name}; 228c2ecf20Sopenharmony_ci /* check vendor id and device id */ 238c2ecf20Sopenharmony_ci const u8 id[] = {0x06, 0x11, 0x92, 0x31}, len = ARRAY_SIZE(id); 248c2ecf20Sopenharmony_ci u8 tmp[ARRAY_SIZE(id)]; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci if (!via_aux_read(&drv, 0x00, tmp, len) || memcmp(id, tmp, len)) 278c2ecf20Sopenharmony_ci return; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci printk(KERN_INFO "viafb: Found %s at address 0x%x\n", name, addr); 308c2ecf20Sopenharmony_ci via_aux_add(&drv); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_civoid via_aux_vt1632_probe(struct via_aux_bus *bus) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci u8 i; 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci for (i = 0x08; i <= 0x0F; i++) 388c2ecf20Sopenharmony_ci probe(bus, i); 398c2ecf20Sopenharmony_ci} 40