/* * Linux driver model AC97 bus interface * * Author: Nicolas Pitre * Created: Jan 14, 2005 * Copyright: (C) MontaVista Software Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #include #include #include #include #include /* * snd_ac97_check_id() - Reads and checks the vendor ID of the device * @ac97: The AC97 device to check * @id: The ID to compare to * @id_mask: Mask that is applied to the device ID before comparing to @id * * If @id is 0 this function returns true if the read device vendor ID is * a valid ID. If @id is non 0 this functions returns true if @id * matches the read vendor ID. Otherwise the function returns false. */ static bool snd_ac97_check_id(struct snd_ac97 *ac97, unsigned int id, unsigned int id_mask) { ac97->id = ac97->bus->ops->read(ac97, AC97_VENDOR_ID1) << 16; ac97->id |= ac97->bus->ops->read(ac97, AC97_VENDOR_ID2); if (ac97->id == 0x0 || ac97->id == 0xffffffff) return false; if (id != 0 && id != (ac97->id & id_mask)) return false; return true; } /** * snd_ac97_reset() - Reset AC'97 device * @ac97: The AC'97 device to reset * @try_warm: Try a warm reset first * @id: Expected device vendor ID * @id_mask: Mask that is applied to the device ID before comparing to @id * * This function resets the AC'97 device. If @try_warm is true the function * first performs a warm reset. If the warm reset is successful the function * returns 1. Otherwise or if @try_warm is false the function issues cold reset * followed by a warm reset. If this is successful the function returns 0, * otherwise a negative error code. If @id is 0 any valid device ID will be * accepted, otherwise only the ID that matches @id and @id_mask is accepted. */ int snd_ac97_reset(struct snd_ac97 *ac97, bool try_warm, unsigned int id, unsigned int id_mask) { struct snd_ac97_bus_ops *ops = ac97->bus->ops; if (try_warm && ops->warm_reset) { ops->warm_reset(ac97); if (snd_ac97_check_id(ac97, id, id_mask)) return 1; } if (ops->reset) ops->reset(ac97); if (ops->warm_reset) ops->warm_reset(ac97); if (snd_ac97_check_id(ac97, id, id_mask)) return 0; return -ENODEV; } EXPORT_SYMBOL_GPL(snd_ac97_reset); /* * Let drivers decide whether they want to support given codec from their * probe method. Drivers have direct access to the struct snd_ac97 * structure and may decide based on the id field amongst other things. */ static int ac97_bus_match(struct device *dev, struct device_driver *drv) { return 1; } struct bus_type ac97_bus_type = { .name = "ac97", .match = ac97_bus_match, }; static int __init ac97_bus_init(void) { return bus_register(&ac97_bus_type); } subsys_initcall(ac97_bus_init); static void __exit ac97_bus_exit(void) { bus_unregister(&ac97_bus_type); } module_exit(ac97_bus_exit); EXPORT_SYMBOL(ac97_bus_type); MODULE_LICENSE("GPL"); net-next.git/commit/sound/pci/ctxfi/cthw20k1.h?id=c73e44269369e936165f0f9b61f1f09a11dae01c'>cthw20k1.h
diff options
context:
space:
mode:
authorVincent <vincent.stehle@laposte.net>2017-01-30 15:06:43 +0100
committerDavid S. Miller <davem@davemloft.net>2017-01-31 13:07:40 -0500
commitc73e44269369e936165f0f9b61f1f09a11dae01c (patch)
treee2188e900ba06302f8ed2746cb07edd3efbc5c35 /sound/pci/ctxfi/cthw20k1.h
parent040587af31228d82c52267f717c9fcdb65f36335 (diff)
net: thunderx: avoid dereferencing xcv when NULL
This fixes the following smatch and coccinelle warnings: drivers/net/ethernet/cavium/thunder/thunder_xcv.c:119 xcv_setup_link() error: we previously assumed 'xcv' could be null (see line 118) [smatch] drivers/net/ethernet/cavium/thunder/thunder_xcv.c:119:16-20: ERROR: xcv is NULL but dereferenced. [coccinelle] Fixes: 6465859aba1e66a5 ("net: thunderx: Add RGMII interface type support") Signed-off-by: Vincent Stehlé <vincent.stehle@laposte.net> Cc: Sunil Goutham <sgoutham@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'sound/pci/ctxfi/cthw20k1.h')