brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 902191d Raw
74 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Copyright 2011 Florian Tobias Schandinat <FlorianSchandinat@gmx.de>4 */5/*6 * infrastructure for devices connected via I2C7 */8 9#include <linux/slab.h>10#include "via_aux.h"11 12 13struct via_aux_bus *via_aux_probe(struct i2c_adapter *adap)14{15	struct via_aux_bus *bus;16 17	if (!adap)18		return NULL;19 20	bus = kmalloc(sizeof(*bus), GFP_KERNEL);21	if (!bus)22		return NULL;23 24	bus->adap = adap;25	INIT_LIST_HEAD(&bus->drivers);26 27	via_aux_edid_probe(bus);28	via_aux_vt1636_probe(bus);29	via_aux_vt1632_probe(bus);30	via_aux_vt1631_probe(bus);31	via_aux_vt1625_probe(bus);32	via_aux_vt1622_probe(bus);33	via_aux_vt1621_probe(bus);34	via_aux_sii164_probe(bus);35	via_aux_ch7301_probe(bus);36 37	return bus;38}39 40void via_aux_free(struct via_aux_bus *bus)41{42	struct via_aux_drv *pos, *n;43 44	if (!bus)45		return;46 47	list_for_each_entry_safe(pos, n, &bus->drivers, chain) {48		if (pos->cleanup)49			pos->cleanup(pos);50 51		list_del(&pos->chain);52		kfree(pos->data);53		kfree(pos);54	}55 56	kfree(bus);57}58 59const struct fb_videomode *via_aux_get_preferred_mode(struct via_aux_bus *bus)60{61	struct via_aux_drv *pos;62	const struct fb_videomode *mode = NULL;63 64	if (!bus)65		return NULL;66 67	list_for_each_entry(pos, &bus->drivers, chain) {68		if (pos->get_preferred_mode)69			mode = pos->get_preferred_mode(pos);70	}71 72	return mode;73}74