Merge remote-tracking branch 'origin/q' into auto-kernel

* origin/q:
  techpack: Remove audio-kernel subtree from source
  techpack: audio: Remove Android.mk files
  ASoC: Avoid spk_id_get duplicate defination
  ASoC: sm8150: do not export all the variables
  ASoC: msm-dai-q6-v2: Mark msm-dai-q6 drivers as sync probe.
  config: sm8150: Build all modules in-kernel
  ASoC: dsp: elliptic: Fix No newline at end of elliptic_version.h
  ASoC: sm8150: Split sa8155 driver into separate config option
  techpack: audio: Remove build timestamp injection
  techpack/audio: codecs: Fix potential buffer overflows
  ASoC: Remove -Werror definations
  SoC: Fix symbolic links
  ASoC: Add non DSP stereo support for tfa98xx
  ASoC: Add Support for tfa98xx driver
  Squashed 'asoc/codecs/tfa98xx/' content from commit 37440d98
  ASoC: sm8150: copy dai links based on device soc id
  ASoC: sm8150: Add tfa9874 codec dai link support
  ASoC: sm8150: Add cs35l41 codec dai link support
  ASoC: sm8150: Add tas2557 codec dai link support
  ASoC: sm8150: Add snd-soc-dummy codec dai link support
  ASoC: sm8150: Disable LPASS_BE_QUAT_MI2S_RX route
  ASoC: sm8150: Fix mi2s clock frequency
  ASoC: sm8150: modify button configuration
  ASoC: msm-dai-fe: Add Support for packed 24 bit
  ASoC: msm-compress-q6-v2: Set decoder output to 24 bit
  ASoC: msm-pcm-routing-v2: Fix external EC reference for AUDIO_REF_EC_UL10 MUX
  ASoC: dsp: q6afe: don't validate payload size check before memory copy
  ASoC: dsp: q6afe: Remove payload size check on param_id_pos
  ASoC: dsp: set channel_mode as 1 for ADM_TOPOLOGY_ID_AUDIO_RX_FVSAM topology
  ASoC: dsp: Add AFE_PORT_ID_PSEUDOPORT_01 routing support
  ASoC: wcd-spi: Return I/O error if WCD SPI suspended
  ASoC: wcd-dsp-mgr: Import WDSP firmware load changes
  ASoC: wcd9xxx-common-v2: set hph mode on hph class-h state
  ASoC: wcd934x: Boost HPH volume
  ASoC: wcd934x: Bringup tavil micbias support
  ASoC: wcd-mbhc-v2: Add Support for USB-C analog Audio
  ASoC: wcd-mbhc-v2: Set insertion debounce time to 256ms
  ASoC: wcd-mbhc: Modify mbhc mic bias control
  ASoC: Add Speaker ID platform driver
  ASoC: Add Support for msm cirrus playback driver
  ASoC: Add Support for MI US proximity driver
  ASoC: Add Support for Elliptic US proximity driver
  ASoC: Add Support for tas2557 driver
  ASoC: Add Support for cs35l41 driver
  ASoC: Revert sm8150 fix for i2s
  ASoC: codec: Remove qcom USB analog headset support
  qcacld-3.0: disable debug configs added in LA.UM.8.1.r1-15800-sm8150.0
  Linux 4.14.195
  KVM: arm/arm64: Don't reschedule in unmap_stage2_range()
  clk: Evict unregistered clks from parent caches
  xen: don't reschedule in preemption off sections
  mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible
  do_epoll_ctl(): clean the failure exits up a bit
  epoll: Keep a reference on files added to the check list
  powerpc/pseries: Do not initiate shutdown when system is running on UPS
  net: dsa: b53: check for timeout
  hv_netvsc: Fix the queue_mapping in netvsc_vf_xmit()
  bonding: fix active-backup failover for current ARP slave
  vfio/type1: Add proper error unwind for vfio_iommu_replay()
  ASoC: intel: Fix memleak in sst_media_open
  ASoC: msm8916-wcd-analog: fix register Interrupt offset
  bonding: fix a potential double-unregister
  bonding: show saner speed for broadcast mode
  net: fec: correct the error path for regulator disable in probe
  i40e: Fix crash during removing i40e driver
  i40e: Set RX_ONLY mode for unicast promiscuous on VLAN
  ext4: fix potential negative array index in do_split()
  alpha: fix annotation of io{read,write}{16,32}be()
  xfs: Fix UBSAN null-ptr-deref in xfs_sysfs_init
  virtio_ring: Avoid loop when vq is broken in virtqueue_poll
  scsi: libfc: Free skb in fc_disc_gpn_id_resp() for valid cases
  cpufreq: intel_pstate: Fix cpuinfo_max_freq when MSR_TURBO_RATIO_LIMIT is 0
  jffs2: fix UAF problem
  xfs: fix inode quota reservation checks
  m68knommu: fix overwriting of bits in ColdFire V3 cache control
  Input: psmouse - add a newline when printing 'proto' by sysfs
  media: vpss: clean up resources in init
  rtc: goldfish: Enable interrupt in set_alarm() when necessary
  media: budget-core: Improve exception handling in budget_register()
  scsi: ufs: Add DELAY_BEFORE_LPM quirk for Micron devices
  spi: Prevent adding devices below an unregistering controller
  jbd2: add the missing unlock_buffer() in the error path of jbd2_write_superblock()
  ext4: fix checking of directory entry validity for inline directories
  mm, page_alloc: fix core hung in free_pcppages_bulk()
  mm: include CMA pages in lowmem_reserve at boot
  kernel/relay.c: fix memleak on destroy relay channel
  romfs: fix uninitialized memory leak in romfs_dev_read()
  btrfs: sysfs: use NOFS for device creation
  btrfs: inode: fix NULL pointer dereference if inode doesn't need compression
  btrfs: Move free_pages_out label in inline extent handling branch in compress_file_range
  btrfs: don't show full path of bind mounts in subvol=
  btrfs: export helpers for subvolume name/id resolution
  powerpc: Allow 4224 bytes of stack expansion for the signal frame
  powerpc/mm: Only read faulting instruction when necessary in do_page_fault()
  khugepaged: adjust VM_BUG_ON_MM() in __khugepaged_enter()
  khugepaged: khugepaged_test_exit() check mmget_still_valid()
  perf probe: Fix memory leakage when the probe point is not found
  drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset()
  ANDROID: virtio_gpu.h: move map/unmap to 3d group
  ANDROID: tty: fix tty name overflow
  ANDROID: fix a bug in quota2
  Release 5.2.03.30B
  qcacld-3.0: Fix issues about uninitialized variables
  ANDROID: Incremental fs: fix magic compatibility again
  qcacmn: Fix NULL pointer dereference of roam stats event param buf
  qcacmn: Fix the nol timeout panic
  qcacmn: Do not hold the lock for a long time in timer delete function
  Release 5.2.03.30A
  qcacld-3.0: Do not send HT, VHT and HE ie's to FW in all the modes
  qcacmn: Improve 'Not set force_set if event completed'
  Release 5.2.03.30
  qcacld-3.0: Disable tx beam forming for NDI vdev
  Release 5.2.03.29Z
  qcacld-3.0: Check refill debt count during rx data stall
  qcacld-3.0: Enhance logging in RX path to check refill failures
  fw-api: CL 11245227 - update fw common interface files
  Release 5.2.03.29Y
  qcacld-3.0: Fix Mem leak during GTK/IGTK rekey in FT-SuiteB roam
  fw-api: CL 11237513 - update fw common interface files
  fw-api: CL 11228391 - update fw common interface files
  fw-api: CL 11216157 - update fw common interface files
  fw-api: CL 11212157 - update fw common interface files
  fw-api: CL 11199621 - update fw common interface files
  fw-api: CL 11198984 - update fw common interface files
  uapi: Remove ADM_AUDPROC_PERSISTENT_CAL_TYPE cal type
  qcacmn: Fix OOB issue in wlan_parse_rsn_ie
  asoc : codec : enable usb analog headset support

Signed-off-by: UtsavBalar1231 <utsavbalar1231@gmail.com>
This commit is contained in:
UtsavBalar1231
2020-08-27 10:58:10 +05:30
227 changed files with 1189 additions and 3892 deletions

View File

@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 4
PATCHLEVEL = 14
SUBLEVEL = 194
SUBLEVEL = 195
EXTRAVERSION =
NAME = Petit Gorille

View File

@@ -493,10 +493,10 @@ extern inline void writeq(u64 b, volatile void __iomem *addr)
}
#endif
#define ioread16be(p) be16_to_cpu(ioread16(p))
#define ioread32be(p) be32_to_cpu(ioread32(p))
#define iowrite16be(v,p) iowrite16(cpu_to_be16(v), (p))
#define iowrite32be(v,p) iowrite32(cpu_to_be32(v), (p))
#define ioread16be(p) swab16(ioread16(p))
#define ioread32be(p) swab32(ioread32(p))
#define iowrite16be(v,p) iowrite16(swab16(v), (p))
#define iowrite32be(v,p) iowrite32(swab32(v), (p))
#define inb_p inb
#define inw_p inw

View File

@@ -89,9 +89,9 @@
* coherency though in all cases. And for copyback caches we will need
* to push cached data as well.
*/
#define CACHE_INIT CACR_CINVA
#define CACHE_INVALIDATE CACR_CINVA
#define CACHE_INVALIDATED CACR_CINVA
#define CACHE_INIT (CACHE_MODE + CACR_CINVA - CACR_EC)
#define CACHE_INVALIDATE (CACHE_MODE + CACR_CINVA)
#define CACHE_INVALIDATED (CACHE_MODE + CACR_CINVA)
#define ACR0_MODE ((CONFIG_RAMBASE & 0xff000000) + \
(0x000f0000) + \

View File

@@ -22,6 +22,7 @@
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/types.h>
#include <linux/pagemap.h>
#include <linux/ptrace.h>
#include <linux/mman.h>
#include <linux/mm.h>
@@ -66,15 +67,11 @@ static inline bool notify_page_fault(struct pt_regs *regs)
}
/*
* Check whether the instruction at regs->nip is a store using
* Check whether the instruction inst is a store using
* an update addressing form which will update r1.
*/
static bool store_updates_sp(struct pt_regs *regs)
static bool store_updates_sp(unsigned int inst)
{
unsigned int inst;
if (get_user(inst, (unsigned int __user *)regs->nip))
return false;
/* check for 1 in the rA field */
if (((inst >> 16) & 0x1f) != 1)
return false;
@@ -227,20 +224,24 @@ static bool bad_kernel_fault(bool is_exec, unsigned long error_code,
return is_exec || (address >= TASK_SIZE);
}
// This comes from 64-bit struct rt_sigframe + __SIGNAL_FRAMESIZE
#define SIGFRAME_MAX_SIZE (4096 + 128)
static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address,
struct vm_area_struct *vma,
bool store_update_sp)
struct vm_area_struct *vma, unsigned int flags,
bool *must_retry)
{
/*
* N.B. The POWER/Open ABI allows programs to access up to
* 288 bytes below the stack pointer.
* The kernel signal delivery code writes up to about 1.5kB
* The kernel signal delivery code writes a bit over 4KB
* below the stack pointer (r1) before decrementing it.
* The exec code can write slightly over 640kB to the stack
* before setting the user r1. Thus we allow the stack to
* expand to 1MB without further checks.
*/
if (address + 0x100000 < vma->vm_end) {
unsigned int __user *nip = (unsigned int __user *)regs->nip;
/* get user regs even if this fault is in kernel mode */
struct pt_regs *uregs = current->thread.regs;
if (uregs == NULL)
@@ -258,8 +259,22 @@ static bool bad_stack_expansion(struct pt_regs *regs, unsigned long address,
* between the last mapped region and the stack will
* expand the stack rather than segfaulting.
*/
if (address + 2048 < uregs->gpr[1] && !store_update_sp)
return true;
if (address + SIGFRAME_MAX_SIZE >= uregs->gpr[1])
return false;
if ((flags & FAULT_FLAG_WRITE) && (flags & FAULT_FLAG_USER) &&
access_ok(VERIFY_READ, nip, sizeof(*nip))) {
unsigned int inst;
int res;
pagefault_disable();
res = __get_user_inatomic(inst, nip);
pagefault_enable();
if (!res)
return !store_updates_sp(inst);
*must_retry = true;
}
return true;
}
return false;
}
@@ -392,7 +407,7 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
int is_user = user_mode(regs);
int is_write = page_fault_is_write(error_code);
int fault, major = 0;
bool store_update_sp = false;
bool must_retry = false;
if (notify_page_fault(regs))
return 0;
@@ -439,9 +454,6 @@ static int __do_page_fault(struct pt_regs *regs, unsigned long address,
* can result in fault, which will cause a deadlock when called with
* mmap_sem held
*/
if (is_write && is_user)
store_update_sp = store_updates_sp(regs);
if (is_user)
flags |= FAULT_FLAG_USER;
if (is_write)
@@ -488,8 +500,17 @@ retry:
return bad_area(regs, address);
/* The stack is being expanded, check if it's valid */
if (unlikely(bad_stack_expansion(regs, address, vma, store_update_sp)))
return bad_area(regs, address);
if (unlikely(bad_stack_expansion(regs, address, vma, flags,
&must_retry))) {
if (!must_retry)
return bad_area(regs, address);
up_read(&mm->mmap_sem);
if (fault_in_pages_readable((const char __user *)regs->nip,
sizeof(unsigned int)))
return bad_area_nosemaphore(regs, address);
goto retry;
}
/* Try to expand it */
if (unlikely(expand_stack(vma, address)))

View File

@@ -115,7 +115,6 @@ static void handle_system_shutdown(char event_modifier)
case EPOW_SHUTDOWN_ON_UPS:
pr_emerg("Loss of system power detected. System is running on"
" UPS/battery. Check RTAS error log for details\n");
orderly_poweroff(true);
break;
case EPOW_SHUTDOWN_LOSS_OF_CRITICAL_FUNCTIONS:

View File

@@ -63,6 +63,17 @@ static DEFINE_MUTEX(vdd_class_list_lock);
*/
static LIST_HEAD(clk_rate_change_list);
static struct hlist_head *all_lists[] = {
&clk_root_list,
&clk_orphan_list,
NULL,
};
static struct hlist_head *orphan_list[] = {
&clk_orphan_list,
NULL,
};
/*** private data structures ***/
struct clk_core {
@@ -2693,17 +2704,6 @@ static u32 debug_suspend;
static DEFINE_MUTEX(clk_debug_lock);
static HLIST_HEAD(clk_debug_list);
static struct hlist_head *all_lists[] = {
&clk_root_list,
&clk_orphan_list,
NULL,
};
static struct hlist_head *orphan_list[] = {
&clk_orphan_list,
NULL,
};
static void clk_state_subtree(struct clk_core *c)
{
int vdd_level = 0;
@@ -3982,6 +3982,34 @@ static const struct clk_ops clk_nodrv_ops = {
.set_parent = clk_nodrv_set_parent,
};
static void clk_core_evict_parent_cache_subtree(struct clk_core *root,
struct clk_core *target)
{
int i;
struct clk_core *child;
for (i = 0; i < root->num_parents; i++)
if (root->parents[i] == target)
root->parents[i] = NULL;
hlist_for_each_entry(child, &root->children, child_node)
clk_core_evict_parent_cache_subtree(child, target);
}
/* Remove this clk from all parent caches */
static void clk_core_evict_parent_cache(struct clk_core *core)
{
struct hlist_head **lists;
struct clk_core *root;
lockdep_assert_held(&prepare_lock);
for (lists = all_lists; *lists; lists++)
hlist_for_each_entry(root, *lists, child_node)
clk_core_evict_parent_cache_subtree(root, core);
}
/**
* clk_unregister - unregister a currently registered clock
* @clk: clock to unregister
@@ -4020,6 +4048,8 @@ void clk_unregister(struct clk *clk)
clk_core_set_parent(child, NULL);
}
clk_core_evict_parent_cache(clk->core);
hlist_del_init(&clk->core->child_node);
if (clk->core->prepare_count)

View File

@@ -1378,6 +1378,7 @@ static void intel_pstate_get_cpu_pstates(struct cpudata *cpu)
intel_pstate_get_hwp_max(cpu->cpu, &phy_max, &current_max);
cpu->pstate.turbo_freq = phy_max * cpu->pstate.scaling;
cpu->pstate.turbo_pstate = phy_max;
} else {
cpu->pstate.turbo_freq = cpu->pstate.turbo_pstate * cpu->pstate.scaling;
}

View File

@@ -220,32 +220,6 @@ static int vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
return 0;
}
static int vgem_gem_dumb_map(struct drm_file *file, struct drm_device *dev,
uint32_t handle, uint64_t *offset)
{
struct drm_gem_object *obj;
int ret;
obj = drm_gem_object_lookup(file, handle);
if (!obj)
return -ENOENT;
if (!obj->filp) {
ret = -EINVAL;
goto unref;
}
ret = drm_gem_create_mmap_offset(obj);
if (ret)
goto unref;
*offset = drm_vma_node_offset_addr(&obj->vma_node);
unref:
drm_gem_object_put_unlocked(obj);
return ret;
}
static struct drm_ioctl_desc vgem_ioctls[] = {
DRM_IOCTL_DEF_DRV(VGEM_FENCE_ATTACH, vgem_fence_attach_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
DRM_IOCTL_DEF_DRV(VGEM_FENCE_SIGNAL, vgem_fence_signal_ioctl, DRM_AUTH|DRM_RENDER_ALLOW),
@@ -439,7 +413,6 @@ static struct drm_driver vgem_driver = {
.fops = &vgem_driver_fops,
.dumb_create = vgem_gem_dumb_create,
.dumb_map_offset = vgem_gem_dumb_map,
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,

View File

@@ -2012,7 +2012,7 @@ static int psmouse_get_maxproto(char *buffer, const struct kernel_param *kp)
{
int type = *((unsigned int *)kp->arg);
return sprintf(buffer, "%s", psmouse_protocol_by_type(type)->name);
return sprintf(buffer, "%s\n", psmouse_protocol_by_type(type)->name);
}
static int __init psmouse_init(void)

View File

@@ -383,20 +383,25 @@ static int budget_register(struct budget *budget)
ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend);
if (ret < 0)
return ret;
goto err_release_dmx;
budget->mem_frontend.source = DMX_MEMORY_FE;
ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend);
if (ret < 0)
return ret;
goto err_release_dmx;
ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend);
if (ret < 0)
return ret;
goto err_release_dmx;
dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx);
return 0;
err_release_dmx:
dvb_dmxdev_release(&budget->dmxdev);
dvb_dmx_release(&budget->demux);
return ret;
}
static void budget_unregister(struct budget *budget)

View File

@@ -514,19 +514,31 @@ static void vpss_exit(void)
static int __init vpss_init(void)
{
int ret;
if (!request_mem_region(VPSS_CLK_CTRL, 4, "vpss_clock_control"))
return -EBUSY;
oper_cfg.vpss_regs_base2 = ioremap(VPSS_CLK_CTRL, 4);
if (unlikely(!oper_cfg.vpss_regs_base2)) {
release_mem_region(VPSS_CLK_CTRL, 4);
return -ENOMEM;
ret = -ENOMEM;
goto err_ioremap;
}
writel(VPSS_CLK_CTRL_VENCCLKEN |
VPSS_CLK_CTRL_DACCLKEN, oper_cfg.vpss_regs_base2);
VPSS_CLK_CTRL_DACCLKEN, oper_cfg.vpss_regs_base2);
return platform_driver_register(&vpss_driver);
ret = platform_driver_register(&vpss_driver);
if (ret)
goto err_pd_register;
return 0;
err_pd_register:
iounmap(oper_cfg.vpss_regs_base2);
err_ioremap:
release_mem_region(VPSS_CLK_CTRL, 4);
return ret;
}
subsys_initcall(vpss_init);
module_exit(vpss_exit);

View File

@@ -2010,7 +2010,8 @@ static int bond_release_and_destroy(struct net_device *bond_dev,
int ret;
ret = __bond_release_one(bond_dev, slave_dev, false, true);
if (ret == 0 && !bond_has_slaves(bond)) {
if (ret == 0 && !bond_has_slaves(bond) &&
bond_dev->reg_state != NETREG_UNREGISTERING) {
bond_dev->priv_flags |= IFF_DISABLE_NETPOLL;
netdev_info(bond_dev, "Destroying bond %s\n",
bond_dev->name);
@@ -2752,6 +2753,9 @@ static int bond_ab_arp_inspect(struct bonding *bond)
if (bond_time_in_interval(bond, last_rx, 1)) {
bond_propose_link_state(slave, BOND_LINK_UP);
commit++;
} else if (slave->link == BOND_LINK_BACK) {
bond_propose_link_state(slave, BOND_LINK_FAIL);
commit++;
}
continue;
}
@@ -2862,6 +2866,19 @@ static void bond_ab_arp_commit(struct bonding *bond)
continue;
case BOND_LINK_FAIL:
bond_set_slave_link_state(slave, BOND_LINK_FAIL,
BOND_SLAVE_NOTIFY_NOW);
bond_set_slave_inactive_flags(slave,
BOND_SLAVE_NOTIFY_NOW);
/* A slave has just been enslaved and has become
* the current active slave.
*/
if (rtnl_dereference(bond->curr_active_slave))
RCU_INIT_POINTER(bond->current_arp_slave, NULL);
continue;
default:
netdev_err(bond->dev, "impossible: new_link %d on slave %s\n",
slave->link_new_state, slave->dev->name);
@@ -2911,8 +2928,6 @@ static bool bond_ab_arp_probe(struct bonding *bond)
return should_notify_rtnl;
}
bond_set_slave_inactive_flags(curr_arp_slave, BOND_SLAVE_NOTIFY_LATER);
bond_for_each_slave_rcu(bond, slave, iter) {
if (!found && !before && bond_slave_is_up(slave))
before = slave;
@@ -4156,13 +4171,23 @@ static netdev_tx_t bond_start_xmit(struct sk_buff *skb, struct net_device *dev)
return ret;
}
static u32 bond_mode_bcast_speed(struct slave *slave, u32 speed)
{
if (speed == 0 || speed == SPEED_UNKNOWN)
speed = slave->speed;
else
speed = min(speed, slave->speed);
return speed;
}
static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev,
struct ethtool_link_ksettings *cmd)
{
struct bonding *bond = netdev_priv(bond_dev);
unsigned long speed = 0;
struct list_head *iter;
struct slave *slave;
u32 speed = 0;
cmd->base.duplex = DUPLEX_UNKNOWN;
cmd->base.port = PORT_OTHER;
@@ -4174,8 +4199,13 @@ static int bond_ethtool_get_link_ksettings(struct net_device *bond_dev,
*/
bond_for_each_slave(bond, slave, iter) {
if (bond_slave_can_tx(slave)) {
if (slave->speed != SPEED_UNKNOWN)
speed += slave->speed;
if (slave->speed != SPEED_UNKNOWN) {
if (BOND_MODE(bond) == BOND_MODE_BROADCAST)
speed = bond_mode_bcast_speed(slave,
speed);
else
speed += slave->speed;
}
if (cmd->base.duplex == DUPLEX_UNKNOWN &&
slave->duplex != DUPLEX_UNKNOWN)
cmd->base.duplex = slave->duplex;

View File

@@ -1160,6 +1160,8 @@ static int b53_arl_op(struct b53_device *dev, int op, int port,
return ret;
switch (ret) {
case -ETIMEDOUT:
return ret;
case -ENOSPC:
dev_dbg(dev->dev, "{%pM,%.4d} no space left in ARL\n",
addr, vid);

View File

@@ -3536,11 +3536,11 @@ failed_mii_init:
failed_irq:
failed_init:
fec_ptp_stop(pdev);
if (fep->reg_phy)
regulator_disable(fep->reg_phy);
failed_reset:
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_disable(&pdev->dev);
if (fep->reg_phy)
regulator_disable(fep->reg_phy);
failed_regulator:
clk_disable_unprepare(fep->clk_ahb);
failed_clk_ahb:

View File

@@ -1175,7 +1175,7 @@ struct i40e_aqc_set_vsi_promiscuous_modes {
#define I40E_AQC_SET_VSI_PROMISC_BROADCAST 0x04
#define I40E_AQC_SET_VSI_DEFAULT 0x08
#define I40E_AQC_SET_VSI_PROMISC_VLAN 0x10
#define I40E_AQC_SET_VSI_PROMISC_TX 0x8000
#define I40E_AQC_SET_VSI_PROMISC_RX_ONLY 0x8000
__le16 seid;
#define I40E_AQC_VSI_PROM_CMD_SEID_MASK 0x3FF
__le16 vlan_tag;

View File

@@ -1914,6 +1914,21 @@ i40e_status i40e_aq_set_phy_debug(struct i40e_hw *hw, u8 cmd_flags,
return status;
}
/**
* i40e_is_aq_api_ver_ge
* @aq: pointer to AdminQ info containing HW API version to compare
* @maj: API major value
* @min: API minor value
*
* Assert whether current HW API version is greater/equal than provided.
**/
static bool i40e_is_aq_api_ver_ge(struct i40e_adminq_info *aq, u16 maj,
u16 min)
{
return (aq->api_maj_ver > maj ||
(aq->api_maj_ver == maj && aq->api_min_ver >= min));
}
/**
* i40e_aq_add_vsi
* @hw: pointer to the hw struct
@@ -2039,18 +2054,16 @@ i40e_status i40e_aq_set_vsi_unicast_promiscuous(struct i40e_hw *hw,
if (set) {
flags |= I40E_AQC_SET_VSI_PROMISC_UNICAST;
if (rx_only_promisc &&
(((hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver >= 5)) ||
(hw->aq.api_maj_ver > 1)))
flags |= I40E_AQC_SET_VSI_PROMISC_TX;
if (rx_only_promisc && i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
flags |= I40E_AQC_SET_VSI_PROMISC_RX_ONLY;
}
cmd->promiscuous_flags = cpu_to_le16(flags);
cmd->valid_flags = cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_UNICAST);
if (((hw->aq.api_maj_ver >= 1) && (hw->aq.api_min_ver >= 5)) ||
(hw->aq.api_maj_ver > 1))
cmd->valid_flags |= cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_TX);
if (i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
cmd->valid_flags |=
cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_RX_ONLY);
cmd->seid = cpu_to_le16(seid);
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
@@ -2147,11 +2160,17 @@ enum i40e_status_code i40e_aq_set_vsi_uc_promisc_on_vlan(struct i40e_hw *hw,
i40e_fill_default_direct_cmd_desc(&desc,
i40e_aqc_opc_set_vsi_promiscuous_modes);
if (enable)
if (enable) {
flags |= I40E_AQC_SET_VSI_PROMISC_UNICAST;
if (i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
flags |= I40E_AQC_SET_VSI_PROMISC_RX_ONLY;
}
cmd->promiscuous_flags = cpu_to_le16(flags);
cmd->valid_flags = cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_UNICAST);
if (i40e_is_aq_api_ver_ge(&hw->aq, 1, 5))
cmd->valid_flags |=
cpu_to_le16(I40E_AQC_SET_VSI_PROMISC_RX_ONLY);
cmd->seid = cpu_to_le16(seid);
cmd->vlan_tag = cpu_to_le16(vid | I40E_AQC_SET_VSI_VLAN_VALID);

View File

@@ -11822,6 +11822,9 @@ static void i40e_remove(struct pci_dev *pdev)
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(0), 0);
i40e_write_rx_ctl(hw, I40E_PFQF_HENA(1), 0);
while (test_bit(__I40E_RESET_RECOVERY_PENDING, pf->state))
usleep_range(1000, 2000);
/* no more scheduling of any task */
set_bit(__I40E_SUSPENDED, pf->state);
set_bit(__I40E_DOWN, pf->state);

View File

@@ -500,7 +500,7 @@ static int netvsc_vf_xmit(struct net_device *net, struct net_device *vf_netdev,
int rc;
skb->dev = vf_netdev;
skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping;
skb_record_rx_queue(skb, qdisc_skb_cb(skb)->slave_dev_queue_mapping);
rc = dev_queue_xmit(skb);
if (likely(rc == NET_XMIT_SUCCESS || rc == NET_XMIT_CN)) {

View File

@@ -87,6 +87,7 @@ static int goldfish_rtc_set_alarm(struct device *dev,
rtc_alarm64 = rtc_alarm * NSEC_PER_SEC;
writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
writel(rtc_alarm64, base + TIMER_ALARM_LOW);
writel(1, base + TIMER_IRQ_ENABLED);
} else {
/*
* if this function was called with enabled=0

View File

@@ -605,8 +605,12 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
if (PTR_ERR(fp) == -FC_EX_CLOSED)
goto out;
if (IS_ERR(fp))
goto redisc;
if (IS_ERR(fp)) {
mutex_lock(&disc->disc_mutex);
fc_disc_restart(disc);
mutex_unlock(&disc->disc_mutex);
goto out;
}
cp = fc_frame_payload_get(fp, sizeof(*cp));
if (!cp)
@@ -633,7 +637,7 @@ static void fc_disc_gpn_id_resp(struct fc_seq *sp, struct fc_frame *fp,
new_rdata->disc_id = disc->disc_id;
fc_rport_login(new_rdata);
}
goto out;
goto free_fp;
}
rdata->disc_id = disc->disc_id;
mutex_unlock(&rdata->rp_mutex);
@@ -650,6 +654,8 @@ redisc:
fc_disc_restart(disc);
mutex_unlock(&disc->disc_mutex);
}
free_fp:
fc_frame_free(fp);
out:
kref_put(&rdata->kref, fc_rport_destroy);
if (!IS_ERR(fp))

View File

@@ -21,6 +21,7 @@
#define UFS_ANY_VENDOR 0xFFFF
#define UFS_ANY_MODEL "ANY_MODEL"
#define UFS_VENDOR_MICRON 0x12C
#define UFS_VENDOR_TOSHIBA 0x198
#define UFS_VENDOR_SAMSUNG 0x1CE
#define UFS_VENDOR_SKHYNIX 0x1AD

View File

@@ -405,6 +405,8 @@ static inline bool ufshcd_is_valid_pm_lvl(int lvl)
static struct ufs_dev_fix ufs_fixups[] = {
/* UFS cards deviations table */
UFS_FIX(UFS_VENDOR_MICRON, UFS_ANY_MODEL,
UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM),
UFS_FIX(UFS_VENDOR_SAMSUNG, UFS_ANY_MODEL,
UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM),
UFS_FIX(UFS_VENDOR_SAMSUNG, UFS_ANY_MODEL,

View File

@@ -839,4 +839,7 @@ config SPI_SLAVE_SYSTEM_CONTROL
endif # SPI_SLAVE
config SPI_DYNAMIC
def_bool ACPI || OF_DYNAMIC || SPI_SLAVE
endif # SPI

View File

@@ -428,6 +428,12 @@ static LIST_HEAD(spi_controller_list);
*/
static DEFINE_MUTEX(board_lock);
/*
* Prevents addition of devices with same chip select and
* addition of devices below an unregistering controller.
*/
static DEFINE_MUTEX(spi_add_lock);
/**
* spi_alloc_device - Allocate a new SPI device
* @ctlr: Controller to which device is connected
@@ -506,7 +512,6 @@ static int spi_dev_check(struct device *dev, void *data)
*/
int spi_add_device(struct spi_device *spi)
{
static DEFINE_MUTEX(spi_add_lock);
struct spi_controller *ctlr = spi->controller;
struct device *dev = ctlr->dev.parent;
int status;
@@ -534,6 +539,13 @@ int spi_add_device(struct spi_device *spi)
goto done;
}
/* Controller may unregister concurrently */
if (IS_ENABLED(CONFIG_SPI_DYNAMIC) &&
!device_is_registered(&ctlr->dev)) {
status = -ENODEV;
goto done;
}
if (ctlr->cs_gpios)
spi->cs_gpio = ctlr->cs_gpios[spi->chip_select];
@@ -2265,6 +2277,10 @@ void spi_unregister_controller(struct spi_controller *ctlr)
struct spi_controller *found;
int id = ctlr->bus_num;
/* Prevent addition of new devices, unregister existing ones */
if (IS_ENABLED(CONFIG_SPI_DYNAMIC))
mutex_lock(&spi_add_lock);
device_for_each_child(&ctlr->dev, NULL, __unregister);
/* First make sure that this controller was ever added */
@@ -2285,6 +2301,9 @@ void spi_unregister_controller(struct spi_controller *ctlr)
if (found == ctlr)
idr_remove(&spi_master_idr, id);
mutex_unlock(&board_lock);
if (IS_ENABLED(CONFIG_SPI_DYNAMIC))
mutex_unlock(&spi_add_lock);
}
EXPORT_SYMBOL_GPL(spi_unregister_controller);

View File

@@ -1745,6 +1745,19 @@ typedef enum HTT_PPDU_STATS_RESP_TYPE HTT_PPDU_STATS_RESP_TYPE;
((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_RTS_FAILURE_S)); \
} while (0)
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M 0x00040000
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S 18
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_GET(_var) \
(((_var) & HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_M) >> \
HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S)
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_SET (_var , _val) \
do { \
HTT_CHECK_SET_VAL(HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX, _val); \
((_var) |= ((_val) << HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_PREAM_PUNC_TX_S)); \
} while (0)
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_M 0xffffffff
#define HTT_PPDU_STATS_USER_CMPLTN_COMMON_TLV_CHAIN_RSSI_S 0
@@ -1868,11 +1881,15 @@ typedef struct {
* BIT [ 15: 13] :- medium protection type
* BIT [ 16: 16] :- rts_success
* BIT [ 17: 17] :- rts_failure
* BIT [ 31: 18] :- reserved
* BIT [ 18: 18] :- pream_punc_tx
* BIT [ 31: 19] :- reserved
*/
union {
A_UINT32 resp_type_is_ampdu__short_retry__long_retry; /* older name */
A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure; /* newer name */
/* older names */
A_UINT32 resp_type_is_ampdu__short_retry__long_retry;
A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure;
/* newest name */
A_UINT32 resp_type__is_ampdu__short_retry__long_retry__mprot_type__rts_success__rts_failure__pream_punc_tx;
struct { /* bitfield names */
A_UINT32 long_retries: 4,
short_retries: 4,
@@ -1881,7 +1898,8 @@ typedef struct {
mprot_type: 3,
rts_success: 1,
rts_failure: 1,
reserved0: 14;
pream_punc_tx: 1,
reserved0: 13;
};
};

View File

@@ -475,6 +475,8 @@ typedef enum {
WMI_SERVICE_CFR_CAPTURE_COUNT_SUPPORT = 256, /* indicates FW support to program CFR capture mode and capture count */
WMI_SERVICE_OCV_SUPPORT = 257, /* FW supports OCV (Operating Channel Validation) */
WMI_SERVICE_LL_STATS_PER_CHAN_RX_TX_TIME_SUPPORT = 258, /* Indicates firmware support sending per channel own tx & rx time in radio stats of LL stats. */
WMI_SERVICE_THERMAL_MULTI_CLIENT_SUPPORT = 259, /* Indicates FW Thermal Mgr will support multiple clients for mitigation */
WMI_MAX_EXT2_SERVICE

View File

@@ -1100,6 +1100,7 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_configure_roam_trigger_parameters,
WMITLV_TAG_STRUC_wmi_vdev_extd_stats,
WMITLV_TAG_STRUC_wmi_twt_add_dialog_additional_params,
WMITLV_TAG_STRUC_WMI_SCAN_RADIO_CAPABILITIES_EXT2,
} WMITLV_TAG_ID;
/*
@@ -4517,7 +4518,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT_EVENTID);
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_spectral_bin_scaling_params, wmi_bin_scaling_params, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_MAC_PHY_CAPABILITIES_EXT, mac_phy_caps, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_HAL_REG_CAPABILITIES_EXT2, hal_reg_caps, WMITLV_SIZE_VAR) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_capabilities, wmi_nan_capabilities, nan_cap, WMITLV_SIZE_FIX)
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_nan_capabilities, wmi_nan_capabilities, nan_cap, WMITLV_SIZE_FIX) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, WMI_SCAN_RADIO_CAPABILITIES_EXT2, wmi_scan_radio_caps, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_SERVICE_READY_EXT2_EVENTID);
#define WMITLV_TABLE_WMI_CHAN_RF_CHARACTERIZATION_INFO_EVENTID(id,op,buf,len) \

View File

@@ -6861,6 +6861,9 @@ typedef enum {
*/
WMI_PDEV_PARAM_SR_TRIGGER_MARGIN,
/* Param to enable/disable PCIE HW ILP */
WMI_PDEV_PARAM_PCIE_HW_ILP,
} WMI_PDEV_PARAM;
#define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1)
@@ -8060,6 +8063,12 @@ typedef struct {
A_UINT32 tx_time;
/** msecs the radio is in active receive (32 bits number accruing over time) */
A_UINT32 rx_time;
/*** NOTE ***
* Be cautious about adding new fields in wmi_channel_stats.
* STA-centric targets may instantiate many instances of per-channel
* stats, and consequently may consume a non-trivial amount of on-chip
* memory for storing the channel stats.
*/
} wmi_channel_stats;
/*
@@ -9515,6 +9524,11 @@ typedef struct {
* VDEV_FLAGS_NON_TRANSMIT_AP classify it as either Tx vap
* or non Tx vap.
*/
#define VDEV_FLAGS_SCAN_MODE_VAP 0x00000010 /* for Scan Radio vdev will be special vap.
* There will not be WMI_VDEV_UP_CMD, there will be only WMI_VDEV_CREATE_CMD
* and WMI_VDEV_START_REQUEST_CMD. Based on this parameter need to make decision like
* vdev Pause/Unpause at WMI_VDEV_START_REQUEST_CMD.
*/
typedef struct {
A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_create_cmd_fixed_param */
@@ -11774,6 +11788,10 @@ typedef struct {
A_UINT32 frame_inject_period;
/** Destination address of frame */
wmi_mac_addr frame_addr1;
/** Frame control duration field to be set in CTS_TO_SELF.
* Applicable to frame_type WMI_FRAME_INJECT_TYPE_CTS_TO_SELF only.
*/
A_UINT32 fc_duration;
/** variable buffer length. Can be used for frame template.
* data is in TLV data[]
*/
@@ -25913,6 +25931,38 @@ typedef struct {
A_UINT32 wireless_modes_ext;
} WMI_HAL_REG_CAPABILITIES_EXT2;
/*
* This TLV used for Scan Radio RDP
* We have an RDP which supports Multiband-Frequency (2Ghz, 5Ghz and 6Ghz)
* on a single radio.
* The AP acts as a special VAP. There will not be WMI_VDEV_UP_CMD.
* This radio is used only for scanning purpose and to send few MGMT frames.
* The DFS feature is disabled on this scan radio, since there will not be
* much TX traffic.
* The Host has to disable CAC timer because DFS feature not supported here.
* In order to know about the scan radio RDP and DFS disabled case,
* the target has to send this information to Host per pdev via
* WMI_SERVICE_READY_EXT2_EVENT.
* The target is notified of the special scan VAP by the flags variable
* in the WMI_CREATE_CMD.
*/
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_SCAN_RADIO_CAPABILITIES_EXT2 */
A_UINT32 phy_id;
/*
* [0] 1 - SCAN_RADIO supported 0 - SCAN_RADIO not supported
* [1] 1 - DFS enabled 0 - DFS disabled
* [2:31] reserved
*/
A_UINT32 flags;
} WMI_SCAN_RADIO_CAPABILITIES_EXT2;
#define WMI_SCAN_RADIO_CAP_SCAN_RADIO_FLAG_GET(flag) WMI_GET_BITS(flag, 0, 1)
#define WMI_SCAN_RADIO_CAP_SCAN_RADIO_FLAG_SET(flag, val) WMI_SET_BITS(flag, 0, 1, val)
#define WMI_SCAN_RADIO_CAP_DFS_FLAG_GET(flag) WMI_GET_BITS(flag, 1, 1)
#define WMI_SCAN_RADIO_CAP_DFS_FLAG_SET(flag, val) WMI_SET_BITS(flag, 1, 1, val)
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_SOC_HAL_REG_CAPABILITIES */
A_UINT32 num_phy;
@@ -26035,6 +26085,16 @@ typedef struct {
A_UINT32 prio;
} wmi_therm_throt_level_config_info;
typedef enum {
WMI_THERMAL_CLIENT_UNSPECIFIED = 0,
WMI_THERMAL_CLIENT_APPS = 1,
WMI_THERMAL_CLIENT_WPSS = 2,
WMI_THERMAL_CLIENT_FW = 3,
WMI_THERMAL_CLIENT_MAX
} WMI_THERMAL_MITIGATION_CLIENTS;
#define WMI_THERMAL_CLIENT_MAX_PRIORITY 10
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_therm_throt_config_request_fixed_param */
A_UINT32 pdev_id; /* config for each pdev */
@@ -26042,6 +26102,8 @@ typedef struct {
A_UINT32 dc; /* duty cycle in ms */
A_UINT32 dc_per_event; /* how often (after how many duty cycles) the FW sends stats to host */
A_UINT32 therm_throt_levels; /* Indicates the number of thermal zone configuration */
A_UINT32 client_id; /* Indicates the client from whom the request is being forwarded to FW. Refer to WMI_THERMAL_MITIGATION_CLIENTS. */
A_UINT32 priority; /* Indicates the priority, higher the value, higher the priority. Varies from 1 to WMI_THERMAL_CLIENT_MAX_PRIORITY. */
/*
* Following this structure is the TLV:
* struct wmi_therm_throt_level_config_info therm_throt_level_config_info[therm_throt_levels];

View File

@@ -36,7 +36,7 @@
#define __WMI_VER_MINOR_ 0
/** WMI revision number has to be incremented when there is a
* change that may or may not break compatibility. */
#define __WMI_REVISION_ 872
#define __WMI_REVISION_ 878
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work

View File

@@ -30,11 +30,13 @@
* qdf_event_t - manages events
* @complete: instance to completion
* @cookie: unsigned int
* @done: indicate completion
* @force_set: indicate forceful completion
*/
typedef struct qdf_evt {
struct completion complete;
uint32_t cookie;
bool done;
bool force_set;
} __qdf_event_t;

View File

@@ -100,6 +100,7 @@ QDF_STATUS qdf_event_set(qdf_event_t *event)
if (event->cookie != LINUX_EVENT_COOKIE)
return QDF_STATUS_E_INVAL;
event->done = true;
complete(&event->complete);
return QDF_STATUS_SUCCESS;
@@ -133,6 +134,7 @@ QDF_STATUS qdf_event_reset(qdf_event_t *event)
return QDF_STATUS_E_INVAL;
/* (re)initialize event */
event->done = false;
event->force_set = false;
INIT_COMPLETION(event->complete);
@@ -252,8 +254,10 @@ void qdf_complete_wait_events(void)
event_node = qdf_container_of(list_node,
struct qdf_evt_node, node);
event_node->pevent->force_set = true;
qdf_event_set(event_node->pevent);
if (!event_node->pevent->done) {
event_node->pevent->force_set = true;
qdf_event_set(event_node->pevent);
}
status = qdf_list_peek_next(&qdf_wait_event_list,
&event_node->node, &list_node);

View File

@@ -116,20 +116,24 @@ static os_timer_func(dfs_nol_timeout)
static void dfs_nol_elem_free_work_cb(void *context)
{
struct wlan_dfs *dfs = (struct wlan_dfs *)context;
struct dfs_nolelem *tmp_nol_entry, *nol_entry;
struct dfs_nolelem *nol_head;
WLAN_DFSNOL_LOCK(dfs);
if (!TAILQ_EMPTY(&dfs->dfs_nol_free_list))
TAILQ_FOREACH_SAFE(nol_entry,
&dfs->dfs_nol_free_list,
nolelem_list,
tmp_nol_entry) {
TAILQ_REMOVE(&dfs->dfs_nol_free_list,
nol_entry, nolelem_list);
qdf_timer_free(&nol_entry->nol_timer);
qdf_mem_free(nol_entry);
while (true) {
WLAN_DFSNOL_LOCK(dfs);
nol_head = TAILQ_FIRST(&dfs->dfs_nol_free_list);
if (nol_head) {
TAILQ_REMOVE(&dfs->dfs_nol_free_list, nol_head,
nolelem_list);
WLAN_DFSNOL_UNLOCK(dfs);
qdf_timer_free(&nol_head->nol_timer);
qdf_mem_free(nol_head);
} else {
WLAN_DFSNOL_UNLOCK(dfs);
break;
}
WLAN_DFSNOL_UNLOCK(dfs);
}
}
void dfs_nol_timer_init(struct wlan_dfs *dfs)
@@ -542,23 +546,22 @@ void dfs_nol_timer_cleanup(struct wlan_dfs *dfs)
{
struct dfs_nolelem *nol;
WLAN_DFSNOL_LOCK(dfs);
nol = dfs->dfs_nol;
while (nol) {
dfs->dfs_nol = nol->nol_next;
dfs->dfs_nol_count--;
/*
* Unlock is required so that when we sync with the
* nol_timeout timer we do not run into deadlock.
*/
WLAN_DFSNOL_UNLOCK(dfs);
qdf_timer_free(&nol->nol_timer);
while (true) {
WLAN_DFSNOL_LOCK(dfs);
qdf_mem_free(nol);
nol = dfs->dfs_nol;
if (nol) {
dfs->dfs_nol = nol->nol_next;
dfs->dfs_nol_count--;
WLAN_DFSNOL_UNLOCK(dfs);
qdf_timer_free(&nol->nol_timer);
qdf_mem_free(nol);
} else {
WLAN_DFSNOL_UNLOCK(dfs);
break;
}
}
WLAN_DFSNOL_UNLOCK(dfs);
}
void dfs_nol_workqueue_cleanup(struct wlan_dfs *dfs)

View File

@@ -23962,7 +23962,12 @@ extract_roam_scan_ap_stats_tlv(wmi_unified_t wmi_handle, void *evt_buf,
uint8_t i;
param_buf = (WMI_ROAM_STATS_EVENTID_param_tlvs *)evt_buf;
if (!param_buf || ap_idx >= param_buf->num_roam_ap_info) {
if (!param_buf) {
WMI_LOGE("%s Param buf is NULL", __func__);
return QDF_STATUS_E_FAILURE;
}
if (ap_idx >= param_buf->num_roam_ap_info) {
WMI_LOGE("Invalid roam scan AP tlv ap_idx:%d total_ap:%d",
ap_idx, param_buf->num_roam_ap_info);
return QDF_STATUS_E_FAILURE;

View File

@@ -1708,6 +1708,8 @@ cppflags-$(CONFIG_WLAN_HANG_EVENT) += -DWLAN_HANG_EVENT
cppflags-$(CONFIG_WLAN_FEATURE_PERIODIC_STA_STATS) += -DWLAN_FEATURE_PERIODIC_STA_STATS
cppflags-$(CONFIG_RX_HASH_DEBUG) += -DRX_HASH_DEBUG
ifeq ($(CONFIG_CNSS), y)
ifeq ($(CONFIG_CNSS_SDIO), y)
cppflags-y += -DCONFIG_PLD_SDIO_CNSS

View File

@@ -611,7 +611,16 @@ ifeq ($(CONFIG_ARCH_MSM8996), y)
CONFIG_CHANNEL_HOPPING_ALL_BANDS := y
endif
ifneq ($(CONFIG_HIF_USB), y)
CONFIG_WLAN_LOGGING_SOCK_SVC := n
endif
ifneq ($(TARGET_BUILD_VARIANT),user)
CONFIG_DESC_DUP_DETECT_DEBUG := n
endif
CONFIG_DP_TRACE := n
#Enable Beacon Reception Stats
CONFIG_FEATURE_BECN_STATS := n
#enable MPTA helper for QCS405
@@ -635,8 +644,6 @@ ifeq ($(CONFIG_ARCH_SDM660), y)
CONFIG_WLAN_FEATURE_PKT_CAPTURE := y
endif
CONFIG_WLAN_HANG_EVENT := n
#Flag to enable/disable kernel panic calls
CONFIG_PANIC_ON_WLAN_QDF_BUG=y
PANIC_ON_BUG := n
@@ -646,3 +653,11 @@ ifeq ($(CONFIG_SLUB_DEBUG), y)
PANIC_ON_BUG := y
endif
endif
#Enable RX RING buffers debug
CONFIG_DEBUG_RX_RING_BUFFER := n
#Enable Hash debug
CONFIG_RX_HASH_DEBUG := n
CONFIG_WLAN_HANG_EVENT := n

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -804,10 +804,15 @@ void htt_log_rx_ring_info(htt_pdev_handle pdev)
"%s: Data Stall Detected with reason 4 (=FW_RX_REFILL_FAILED)."
"src htt rx ring: space for %d elements, filled with %d buffers, buffers in the ring %d, refill debt %d",
__func__, pdev->rx_ring.size, pdev->rx_ring.fill_level,
pdev->rx_ring.fill_cnt,
qdf_atomic_read(&pdev->rx_ring.fill_cnt),
qdf_atomic_read(&pdev->rx_ring.refill_debt));
}
void htt_rx_refill_failure(htt_pdev_handle pdev)
{
QDF_BUG(qdf_atomic_read(&pdev->rx_ring.refill_debt));
}
#if HTT_DEBUG_LEVEL > 5
void htt_display(htt_pdev_handle pdev, int indent)
{

View File

@@ -160,7 +160,11 @@ struct htt_host_rx_desc_base {
* @posted: time-stamp when HTT message is recived
* @recvd : 0x48545452584D5367 ('HTTRXMSG')
*/
#ifdef CONFIG_SLUB_DEBUG_ON
#define HTT_RX_RING_BUFF_DBG_LIST (8 * 1024)
#else
#define HTT_RX_RING_BUFF_DBG_LIST (4 * 1024)
#endif
struct rx_buf_debug {
qdf_dma_addr_t paddr;
qdf_nbuf_t nbuf;
@@ -1017,7 +1021,7 @@ static inline qdf_nbuf_t
htt_rx_in_order_netbuf_pop(htt_pdev_handle pdev, qdf_dma_addr_t paddr)
{
HTT_ASSERT1(htt_rx_in_order_ring_elems(pdev) != 0);
pdev->rx_ring.fill_cnt--;
qdf_atomic_dec(&pdev->rx_ring.fill_cnt);
paddr = htt_paddr_trim_to_37(paddr);
return htt_rx_hash_list_lookup(pdev, paddr);
}

View File

@@ -739,7 +739,7 @@ moretofill:
}
pdev->rx_ring.buf.paddrs_ring[idx] = paddr_marked;
pdev->rx_ring.fill_cnt++;
qdf_atomic_inc(&pdev->rx_ring.fill_cnt);
num--;
idx++;
@@ -1220,7 +1220,7 @@ static inline qdf_nbuf_t htt_rx_netbuf_pop(htt_pdev_handle pdev)
idx++;
idx &= pdev->rx_ring.size_mask;
pdev->rx_ring.sw_rd_idx.msdu_payld = idx;
pdev->rx_ring.fill_cnt--;
qdf_atomic_dec(&pdev->rx_ring.fill_cnt);
return msdu;
}
@@ -2505,7 +2505,8 @@ static void htt_rx_fill_ring_count(htt_pdev_handle pdev)
{
int num_to_fill;
num_to_fill = pdev->rx_ring.fill_level - pdev->rx_ring.fill_cnt;
num_to_fill = pdev->rx_ring.fill_level -
qdf_atomic_read(&pdev->rx_ring.fill_cnt);
htt_rx_ring_fill_n(pdev, num_to_fill /* okay if <= 0 */);
}
#endif
@@ -2992,7 +2993,7 @@ int htt_rx_attach(struct htt_pdev_t *pdev)
htt_rx_ring_refill_retry, (void *)pdev,
QDF_TIMER_TYPE_SW);
pdev->rx_ring.fill_cnt = 0;
qdf_atomic_init(&pdev->rx_ring.fill_cnt);
pdev->rx_ring.pop_fail_cnt = 0;
#ifdef DEBUG_DMA_DONE
pdev->rx_ring.dbg_ring_idx = 0;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -288,7 +288,8 @@ struct htt_pdev_t {
uint32_t size_mask; /* size - 1, at least 16 bits long */
int fill_level; /* how many rx buffers to keep in the ring */
int fill_cnt; /* # of rx buffers (full+empty) in the ring */
/* # of rx buffers (full+empty) in the ring */
qdf_atomic_t fill_cnt;
int pop_fail_cnt; /* # of nebuf pop failures */
/*

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2014-2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2011, 2014-2018, 2020 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -195,6 +195,14 @@ void htt_t2h_stats_print(uint8_t *stats_data, int concise);
*/
void htt_log_rx_ring_info(htt_pdev_handle pdev);
/**
* htt_rx_refill_failure() - During refill failure check if debt is zero
* @pdev: handle to the HTT instance
*
* Return: None
*/
void htt_rx_refill_failure(htt_pdev_handle pdev);
#ifndef HTT_DEBUG_LEVEL
#if defined(DEBUG)
#define HTT_DEBUG_LEVEL 10

View File

@@ -6202,8 +6202,10 @@ static void ol_txrx_post_data_stall_event(
data_stall_info->recovery_type = recovery_type;
if (data_stall_info->data_stall_type ==
DATA_STALL_LOG_FW_RX_REFILL_FAILED)
DATA_STALL_LOG_FW_RX_REFILL_FAILED) {
htt_log_rx_ring_info(pdev->htt_pdev);
htt_rx_refill_failure(pdev->htt_pdev);
}
sys_build_message_header(SYS_MSG_ID_DATA_STALL_MSG, &msg);
/* Save callback and data */

View File

@@ -32,9 +32,9 @@
#define QWLAN_VERSION_MAJOR 5
#define QWLAN_VERSION_MINOR 2
#define QWLAN_VERSION_PATCH 03
#define QWLAN_VERSION_EXTRA "X"
#define QWLAN_VERSION_BUILD 29
#define QWLAN_VERSION_EXTRA "B"
#define QWLAN_VERSION_BUILD 30
#define QWLAN_VERSIONSTR "5.2.03.29X"
#define QWLAN_VERSIONSTR "5.2.03.30B"
#endif /* QWLAN_VERSION_H */

View File

@@ -353,7 +353,8 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx,
bool *pmf_connection)
{
tDot11fIERSN *rsn_ie;
uint8_t i, j, match, only_non_ht_cipher = 1;
bool match = false;
uint8_t i, j, only_non_ht_cipher = 1;
#ifdef WLAN_FEATURE_11W
bool we_are_pmf_capable;
bool we_require_pmf;
@@ -380,7 +381,7 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx,
if (!qdf_mem_cmp(&rx_rsn_ie->akm_suite[0],
&rsn_ie->akm_suite[i],
sizeof(rsn_ie->akm_suite[i]))) {
match = 1;
match = true;
break;
}
if (!match) {
@@ -400,13 +401,13 @@ uint8_t lim_check_rx_rsn_ie_match(tpAniSirGlobal mac_ctx,
* For each Pairwise cipher suite check whether we support
* received pairwise
*/
match = 0;
match = false;
for (i = 0; i < rx_rsn_ie->pwise_cipher_suite_count; i++) {
for (j = 0; j < rsn_ie->pwise_cipher_suite_count; j++) {
if (!qdf_mem_cmp(&rx_rsn_ie->pwise_cipher_suites[i],
&rsn_ie->pwise_cipher_suites[j],
sizeof(rsn_ie->pwise_cipher_suites[j]))) {
match = 1;
match = true;
break;
}
}
@@ -488,7 +489,8 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie,
tpPESession session_entry, uint8_t sta_is_ht)
{
tDot11fIEWPA *wpa_ie;
uint8_t i, j, match, only_non_ht_cipher = 1;
bool match = false;
uint8_t i, j, only_non_ht_cipher = 1;
/* WPA IE should be received from PE */
wpa_ie = &session_entry->gStartBssWPAIe;
@@ -504,7 +506,7 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie,
if (!qdf_mem_cmp(&rx_wpaie.auth_suites[0],
&wpa_ie->auth_suites[i],
sizeof(wpa_ie->auth_suites[i]))) {
match = 1;
match = true;
break;
}
if (!match) {
@@ -524,12 +526,12 @@ lim_check_rx_wpa_ie_match(tpAniSirGlobal mac, tDot11fIEWPA rx_wpaie,
* For each Pairwise cipher suite check whether we support
* received pairwise
*/
match = 0;
match = false;
for (i = 0; i < rx_wpaie.unicast_cipher_count; i++) {
for (j = 0; j < wpa_ie->unicast_cipher_count; j++) {
if (!qdf_mem_cmp(rx_wpaie.unicast_ciphers[i],
wpa_ie->unicast_ciphers[j], 4)) {
match = 1;
match = true;
break;
}
}

View File

@@ -517,6 +517,14 @@ static void lim_handle_assoc_reject_status(tpAniSirGlobal mac_ctx,
}
#endif
static void clean_up_ft_sha384(tpSirAssocRsp assoc_rsp, bool sha384_akm)
{
if (sha384_akm) {
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
}
}
/**
* lim_process_assoc_rsp_frame() - Processes assoc response
* @mac_ctx: Pointer to Global MAC structure
@@ -550,6 +558,8 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
#endif
tSirMacEdcaParamRecord mu_edca_set[MAX_NUM_AC];
int8_t rssi;
enum ani_akm_type auth_type;
bool sha384_akm;
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
sme_sessionid = session_entry->smeSessionId;
@@ -729,6 +739,9 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
lim_update_ese_tspec(mac_ctx, session_entry, assoc_rsp);
#endif
auth_type = session_entry->connected_akm;
sha384_akm = lim_is_sha384_akm(auth_type);
if (assoc_rsp->capabilityInfo.ibss) {
/*
* Received Re/Association Response from peer
@@ -737,6 +750,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
* failure timeout.
*/
pe_err("received Re/AssocRsp frame with IBSS capability");
clean_up_ft_sha384(assoc_rsp, sha384_akm);
qdf_mem_free(assoc_rsp);
qdf_mem_free(beacon);
return;
@@ -744,6 +758,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
if (cfg_get_capability_info(mac_ctx, &caps, session_entry)
!= QDF_STATUS_SUCCESS) {
clean_up_ft_sha384(assoc_rsp, sha384_akm);
qdf_mem_free(assoc_rsp);
qdf_mem_free(beacon);
pe_err("could not retrieve Capabilities");
@@ -837,6 +852,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
NULL) != QDF_STATUS_SUCCESS) {
pe_err("Set link state to POSTASSOC failed");
qdf_mem_free(beacon);
clean_up_ft_sha384(assoc_rsp, sha384_akm);
qdf_mem_free(assoc_rsp);
return;
}
@@ -969,6 +985,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
assoc_cnf.protStatusCode = eSIR_SME_SUCCESS;
lim_post_sme_message(mac_ctx, LIM_MLM_ASSOC_CNF,
(uint32_t *) &assoc_cnf);
clean_up_ft_sha384(assoc_rsp, sha384_akm);
qdf_mem_free(assoc_rsp);
qdf_mem_free(beacon);
return;
@@ -1034,6 +1051,7 @@ lim_process_assoc_rsp_frame(tpAniSirGlobal mac_ctx,
beacon,
&session_entry->pLimJoinReq->bssDescription, true,
session_entry)) {
clean_up_ft_sha384(assoc_rsp, sha384_akm);
qdf_mem_free(assoc_rsp);
qdf_mem_free(beacon);
return;

View File

@@ -324,6 +324,7 @@ void lim_perform_deauth(tpAniSirGlobal mac_ctx, tpPESession pe_session,
tLimMlmAssocCnf mlmAssocCnf;
uint16_t aid;
tpDphHashNode sta_ds;
tpSirAssocRsp assoc_rsp;
sta_ds = dph_lookup_hash_entry(mac_ctx, addr, &aid,
&pe_session->dph.dphHashTable);
@@ -539,6 +540,10 @@ void lim_perform_deauth(tpAniSirGlobal mac_ctx, tpPESession pe_session,
lim_delete_pre_auth_node(mac_ctx, addr);
if (pe_session->limAssocResponseData) {
assoc_rsp = (tpSirAssocRsp) pe_session->
limAssocResponseData;
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
qdf_mem_free(pe_session->limAssocResponseData);
pe_session->limAssocResponseData = NULL;
}

View File

@@ -348,6 +348,7 @@ void lim_perform_disassoc(tpAniSirGlobal mac_ctx, int32_t frame_rssi,
tLimMlmDisassocInd mlmDisassocInd;
uint16_t aid;
tpDphHashNode sta_ds;
tpSirAssocRsp assoc_rsp;
sta_ds = dph_lookup_hash_entry(mac_ctx, addr, &aid,
&pe_session->dph.dphHashTable);
@@ -378,6 +379,10 @@ void lim_perform_disassoc(tpAniSirGlobal mac_ctx, int32_t frame_rssi,
pe_debug("received Disassoc from AP while waiting for Reassoc Rsp");
if (pe_session->limAssocResponseData) {
assoc_rsp = (tpSirAssocRsp) pe_session->
limAssocResponseData;
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
qdf_mem_free(pe_session->limAssocResponseData);
pe_session->limAssocResponseData = NULL;
}

View File

@@ -3062,7 +3062,7 @@ void __lim_process_sme_assoc_cnf_new(tpAniSirGlobal mac_ctx, uint32_t msg_type,
if (msg_buf == NULL) {
pe_err("msg_buf is NULL");
goto end;
return;
}
qdf_mem_copy(&assoc_cnf, msg_buf, sizeof(struct sSirSmeAssocCnf));

View File

@@ -208,6 +208,8 @@ void lim_handle_del_bss_in_re_assoc_context(tpAniSirGlobal pMac,
qdf_mem_free(beacon_struct);
goto error;
}
qdf_mem_free(assocRsp->sha384_ft_subelem.gtk);
qdf_mem_free(assocRsp->sha384_ft_subelem.igtk);
qdf_mem_free(assocRsp);
qdf_mem_free(beacon_struct);
psessionEntry->limAssocResponseData = NULL;
@@ -334,6 +336,8 @@ void lim_handle_add_bss_in_re_assoc_context(tpAniSirGlobal pMac,
qdf_mem_free(pBeaconStruct);
goto Error;
}
qdf_mem_free(assocRsp->sha384_ft_subelem.gtk);
qdf_mem_free(assocRsp->sha384_ft_subelem.igtk);
qdf_mem_free(assocRsp);
psessionEntry->limAssocResponseData = NULL;
qdf_mem_free(pBeaconStruct);

View File

@@ -797,6 +797,7 @@ void pe_delete_session(tpAniSirGlobal mac_ctx, tpPESession session)
uint16_t i = 0;
uint16_t n;
TX_TIMER *timer_ptr;
tpSirAssocRsp assoc_rsp;
if (!session || (session && !session->valid)) {
pe_debug("session already deleted or not valid");
@@ -913,6 +914,9 @@ void pe_delete_session(tpAniSirGlobal mac_ctx, tpPESession session)
session->parsedAssocReq = NULL;
}
if (NULL != session->limAssocResponseData) {
assoc_rsp = (tpSirAssocRsp) session->limAssocResponseData;
qdf_mem_free(assoc_rsp->sha384_ft_subelem.gtk);
qdf_mem_free(assoc_rsp->sha384_ft_subelem.igtk);
qdf_mem_free(session->limAssocResponseData);
session->limAssocResponseData = NULL;
}

View File

@@ -6487,38 +6487,95 @@ end:
}
/**
* lim_send_ies_per_band() - gets ht and vht capability and send to firmware via
* wma
* is_dot11mode_support_ht_cap() - Check dot11mode supports HT capability
* @dot11mode: dot11mode
*
* This function checks whether dot11mode support HT capability or not
*
* Return: True, if supports. False otherwise
*/
static bool is_dot11mode_support_ht_cap(enum csr_cfgdot11mode dot11mode)
{
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11N) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11N_ONLY) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
return true;
}
return false;
}
/**
* is_dot11mode_support_vht_cap() - Check dot11mode supports VHT capability
* @dot11mode: dot11mode
*
* This function checks whether dot11mode support VHT capability or not
*
* Return: True, if supports. False otherwise
*/
static bool is_dot11mode_support_vht_cap(enum csr_cfgdot11mode dot11mode)
{
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
return true;
}
return false;
}
/**
* is_dot11mode_support_he_cap() - Check dot11mode supports HE capability
* @dot11mode: dot11mode
*
* This function checks whether dot11mode support HE capability or not
*
* Return: True, if supports. False otherwise
*/
static bool is_dot11mode_support_he_cap(enum csr_cfgdot11mode dot11mode)
{
if ((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX) ||
(dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY)) {
return true;
}
return false;
}
/**
* lim_send_ht_caps_ie() - gets HT capability and send to firmware via wma
* @mac_ctx: global mac context
* @session: pe session. This can be NULL. In that case self cap will be sent
* @device_mode: VDEV op mode
* @vdev_id: vdev for which IE is targeted
*
* This funciton gets ht and vht capability and send to firmware via wma
* This function gets HT capability and send to firmware via wma
*
* Return: status of operation
* Return: QDF_STATUS
*/
QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
tpPESession session,
uint8_t vdev_id)
static QDF_STATUS lim_send_ht_caps_ie(tpAniSirGlobal mac_ctx,
tpPESession session,
enum QDF_OPMODE device_mode,
uint8_t vdev_id)
{
uint8_t ht_caps[DOT11F_IE_HTCAPS_MIN_LEN + 2] = {0};
uint8_t vht_caps[DOT11F_IE_VHTCAPS_MAX_LEN + 2] = {0};
tHtCaps *p_ht_cap = (tHtCaps *)(&ht_caps[2]);
tSirMacVHTCapabilityInfo *p_vht_cap =
(tSirMacVHTCapabilityInfo *)(&vht_caps[2]);
QDF_STATUS status;
QDF_STATUS status_5g, status_2g;
/*
* Note: Do not use Dot11f VHT structure, since 1 byte present flag in
* it is causing weird padding errors. Instead use Sir Mac VHT struct
* to send IE to wma.
*/
ht_caps[0] = DOT11F_EID_HTCAPS;
ht_caps[1] = DOT11F_IE_HTCAPS_MIN_LEN;
lim_set_ht_caps(mac_ctx, session, ht_caps,
DOT11F_IE_HTCAPS_MIN_LEN + 2);
/* Get LDPC and over write for 2G */
p_ht_cap->advCodingCap = lim_get_rx_ldpc(mac_ctx, CHAN_ENUM_6);
p_ht_cap->advCodingCap = lim_get_rx_ldpc(mac_ctx,
CHAN_ENUM_6);
/* Get self cap for HT40 support in 2G */
if (mac_ctx->roam.configParam.channelBondingMode24GHz) {
p_ht_cap->supportedChannelWidthSet = 1;
@@ -6527,11 +6584,18 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
p_ht_cap->supportedChannelWidthSet = 0;
p_ht_cap->shortGI40MHz = 0;
}
lim_populate_mcs_set_ht_per_vdev(mac_ctx, p_ht_cap, vdev_id,
NSS_CHAINS_BAND_2GHZ);
if (device_mode == QDF_NDI_MODE) {
p_ht_cap->txBF = 0;
p_ht_cap->implicitTxBF = 0;
p_ht_cap->explicitCSITxBF = 0;
}
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
CDS_BAND_2GHZ, &ht_caps[2], DOT11F_IE_HTCAPS_MIN_LEN);
status_2g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
CDS_BAND_2GHZ, &ht_caps[2],
DOT11F_IE_HTCAPS_MIN_LEN);
/*
* Get LDPC and over write for 5G - using channel 64 because it
* is available in all reg domains.
@@ -6547,25 +6611,63 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
}
lim_populate_mcs_set_ht_per_vdev(mac_ctx, p_ht_cap, vdev_id,
NSS_CHAINS_BAND_5GHZ);
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
CDS_BAND_5GHZ, &ht_caps[2],
DOT11F_IE_HTCAPS_MIN_LEN);
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HTCAPS,
CDS_BAND_5GHZ, &ht_caps[2], DOT11F_IE_HTCAPS_MIN_LEN);
if (QDF_IS_STATUS_SUCCESS(status_2g) &&
QDF_IS_STATUS_SUCCESS(status_5g))
return QDF_STATUS_SUCCESS;
return QDF_STATUS_E_FAILURE;
}
/**
* lim_send_vht_caps_ie() - gets VHT capability and send to firmware via wma
* @mac_ctx: global mac context
* @session: pe session. This can be NULL. In that case self cap will be sent
* @device_mode: VDEV op mode
* @vdev_id: vdev for which IE is targeted
*
* This function gets VHT capability and send to firmware via wma
*
* Return: QDF_STATUS
*/
static QDF_STATUS lim_send_vht_caps_ie(tpAniSirGlobal mac_ctx,
tpPESession session,
enum QDF_OPMODE device_mode,
uint8_t vdev_id)
{
uint8_t vht_caps[DOT11F_IE_VHTCAPS_MAX_LEN + 2] = {0};
tSirMacVHTCapabilityInfo *p_vht_cap =
(tSirMacVHTCapabilityInfo *)(&vht_caps[2]);
QDF_STATUS status_5g, status_2g;
vht_caps[0] = DOT11F_EID_VHTCAPS;
vht_caps[1] = DOT11F_IE_VHTCAPS_MAX_LEN;
lim_set_vht_caps(mac_ctx, session, vht_caps,
DOT11F_IE_VHTCAPS_MIN_LEN + 2);
DOT11F_IE_VHTCAPS_MIN_LEN + 2);
/*
* Get LDPC and over write for 5G - using channel 64 because it
* is available in all reg domains.
*/
p_vht_cap->ldpcCodingCap = lim_get_rx_ldpc(mac_ctx, CHAN_ENUM_64);
/* Self VHT channel width for 5G is already negotiated with FW */
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps,
vdev_id, NSS_CHAINS_BAND_5GHZ);
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps, vdev_id,
NSS_CHAINS_BAND_5GHZ);
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
CDS_BAND_5GHZ, &vht_caps[2], DOT11F_IE_VHTCAPS_MIN_LEN);
if (device_mode == QDF_NDI_MODE) {
p_vht_cap->muBeamformeeCap = 0;
p_vht_cap->muBeamformerCap = 0;
p_vht_cap->suBeamformeeCap = 0;
p_vht_cap->suBeamFormerCap = 0;
}
/*
* Self VHT channel width for 5G is already negotiated
* with FW
*/
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
CDS_BAND_5GHZ, &vht_caps[2],
DOT11F_IE_VHTCAPS_MIN_LEN);
/* Get LDPC and over write for 2G */
p_vht_cap->ldpcCodingCap = lim_get_rx_ldpc(mac_ctx, CHAN_ENUM_6);
@@ -6573,15 +6675,76 @@ QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
p_vht_cap->supportedChannelWidthSet = 0;
p_vht_cap->shortGI80MHz = 0;
p_vht_cap->shortGI160and80plus80MHz = 0;
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps,
vdev_id, NSS_CHAINS_BAND_2GHZ);
lim_populate_mcs_set_vht_per_vdev(mac_ctx, vht_caps, vdev_id,
NSS_CHAINS_BAND_2GHZ);
status_2g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
CDS_BAND_2GHZ, &vht_caps[2],
DOT11F_IE_VHTCAPS_MIN_LEN);
lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_VHTCAPS,
CDS_BAND_2GHZ, &vht_caps[2], DOT11F_IE_VHTCAPS_MIN_LEN);
if (QDF_IS_STATUS_SUCCESS(status_2g) &&
QDF_IS_STATUS_SUCCESS(status_5g))
return QDF_STATUS_SUCCESS;
status = lim_send_he_caps_ie(mac_ctx, session, vdev_id);
return QDF_STATUS_E_FAILURE;
}
return status;
/**
* lim_send_ies_per_band() - gets ht and vht capability and send to firmware via
* wma
* @mac_ctx: global mac context
* @session: pe session. This can be NULL. In that case self cap will be sent
* @vdev_id: vdev for which IE is targeted
*
* This funciton gets ht and vht capability and send to firmware via wma
*
* Return: status of operation
*/
QDF_STATUS lim_send_ies_per_band(tpAniSirGlobal mac_ctx,
tpPESession session,
uint8_t vdev_id)
{
struct wlan_objmgr_vdev *vdev;
enum QDF_OPMODE device_mode;
QDF_STATUS status_ht = QDF_STATUS_SUCCESS;
QDF_STATUS status_vht = QDF_STATUS_SUCCESS;
QDF_STATUS status_he = QDF_STATUS_SUCCESS;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(
mac_ctx->psoc, vdev_id,
WLAN_LEGACY_MAC_ID);
if (!vdev) {
pe_err("vdev is NULL");
return QDF_STATUS_E_FAILURE;
}
device_mode = wlan_vdev_mlme_get_opmode(vdev);
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
/*
* Note: Do not use Dot11f VHT structure, since 1 byte present flag in
* it is causing weird padding errors. Instead use Sir Mac VHT struct
* to send IE to wma.
*/
if (is_dot11mode_support_ht_cap(
mac_ctx->roam.configParam.uCfgDot11Mode))
status_ht = lim_send_ht_caps_ie(mac_ctx, session,
device_mode, vdev_id);
if (is_dot11mode_support_vht_cap(
mac_ctx->roam.configParam.uCfgDot11Mode))
status_vht = lim_send_vht_caps_ie(mac_ctx, session,
device_mode, vdev_id);
if (is_dot11mode_support_he_cap(
mac_ctx->roam.configParam.uCfgDot11Mode))
status_he = lim_send_he_caps_ie(mac_ctx, session,
device_mode, vdev_id);
if (QDF_IS_STATUS_SUCCESS(status_ht) &&
QDF_IS_STATUS_SUCCESS(status_vht) &&
QDF_IS_STATUS_SUCCESS(status_he))
return QDF_STATUS_SUCCESS;
return QDF_STATUS_E_FAILURE;
}
/**
@@ -7856,12 +8019,17 @@ void lim_set_he_caps(tpAniSirGlobal mac, tpPESession session, uint8_t *ie_start,
}
}
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx, tpPESession session,
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx,
tpPESession session,
enum QDF_OPMODE device_mode,
uint8_t vdev_id)
{
uint8_t he_caps[SIR_MAC_HE_CAP_MIN_LEN + 3];
struct he_capability_info *he_cap;
QDF_STATUS status_5g, status_2g;
uint8_t he_cap_total_len = SIR_MAC_HE_CAP_MIN_LEN + HE_CAP_OUI_LEN +
HE_CAP_160M_MCS_MAP_LEN +
HE_CAP_80P80_MCS_MAP_LEN;
/* Sending only minimal info(no PPET) to FW now, update if required */
qdf_mem_zero(he_caps, SIR_MAC_HE_CAP_MIN_LEN + 3);
@@ -7872,7 +8040,17 @@ QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx, tpPESession session,
SIR_MAC_HE_CAP_MIN_LEN + 3);
he_cap = (struct he_capability_info *) (&he_caps[2 + HE_CAP_OUI_SIZE]);
he_cap->ppet_present = 0;
if (device_mode == QDF_NDI_MODE) {
he_cap->su_beamformee = 0;
he_cap->su_beamformer = 0;
he_cap->mu_beamformer = 0;
he_cap->bfee_sts_gt_80 = 0;
he_cap->bfee_sts_lt_80 = 0;
he_cap->num_sounding_gt_80 = 0;
he_cap->num_sounding_lt_80 = 0;
he_cap->su_feedback_tone16 = 0;
he_cap->mu_feedback_tone16 = 0;
}
status_5g = lim_send_ie(mac_ctx, vdev_id, DOT11F_EID_HE_CAP,
CDS_BAND_5GHZ, &he_caps[2],
SIR_MAC_HE_CAP_MIN_LEN + 1);

View File

@@ -1159,13 +1159,16 @@ void lim_set_he_caps(tpAniSirGlobal mac, tpPESession session,
* lim_send_he_caps_ie() - gets HE capability and send to firmware via wma
* @mac_ctx: global mac context
* @session: pe session. This can be NULL. In that case self cap will be sent
* @device_mode: VDEV op mode
* @vdev_id: vdev for which IE is targeted
*
* This function gets HE capability and send to firmware via wma
*
* Return: QDF_STATUS
*/
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx, tpPESession session,
QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx,
tpPESession session,
enum QDF_OPMODE device_mode,
uint8_t vdev_id);
/**
@@ -1301,6 +1304,7 @@ static inline void lim_set_he_caps(tpAniSirGlobal mac, tpPESession session,
static inline QDF_STATUS lim_send_he_caps_ie(tpAniSirGlobal mac_ctx,
tpPESession session,
enum QDF_OPMODE device_mode,
uint8_t vdev_id)
{
return QDF_STATUS_SUCCESS;

View File

@@ -3120,7 +3120,7 @@ QDF_STATUS wlansap_update_owe_info(struct sap_context *sap_ctx,
struct owe_assoc_ind *owe_assoc_ind;
tSirSmeAssocInd *assoc_ind = NULL;
qdf_list_node_t *node = NULL, *next_node = NULL;
QDF_STATUS status;
QDF_STATUS status = QDF_STATUS_SUCCESS;
if (!wlansap_validate_owe_ies(ie, ie_len)) {
QDF_TRACE_ERROR(QDF_MODULE_ID_SAP, "Invalid OWE IE");

View File

@@ -1088,13 +1088,16 @@ static int vfio_bus_type(struct device *dev, void *data)
static int vfio_iommu_replay(struct vfio_iommu *iommu,
struct vfio_domain *domain)
{
struct vfio_domain *d;
struct vfio_domain *d = NULL;
struct rb_node *n;
unsigned long limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
int ret;
/* Arbitrarily pick the first domain in the list for lookups */
d = list_first_entry(&iommu->domain_list, struct vfio_domain, next);
if (!list_empty(&iommu->domain_list))
d = list_first_entry(&iommu->domain_list,
struct vfio_domain, next);
n = rb_first(&iommu->dma_list);
for (; n; n = rb_next(n)) {
@@ -1112,6 +1115,11 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu,
phys_addr_t p;
dma_addr_t i;
if (WARN_ON(!d)) { /* mapped w/o a domain?! */
ret = -EINVAL;
goto unwind;
}
phys = iommu_iova_to_phys(d->domain, iova);
if (WARN_ON(!phys)) {
@@ -1141,7 +1149,7 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu,
if (npage <= 0) {
WARN_ON(!npage);
ret = (int)npage;
return ret;
goto unwind;
}
phys = pfn << PAGE_SHIFT;
@@ -1150,14 +1158,67 @@ static int vfio_iommu_replay(struct vfio_iommu *iommu,
ret = iommu_map(domain->domain, iova, phys,
size, dma->prot | domain->prot);
if (ret)
return ret;
if (ret) {
if (!dma->iommu_mapped)
vfio_unpin_pages_remote(dma, iova,
phys >> PAGE_SHIFT,
size >> PAGE_SHIFT,
true);
goto unwind;
}
iova += size;
}
}
/* All dmas are now mapped, defer to second tree walk for unwind */
for (n = rb_first(&iommu->dma_list); n; n = rb_next(n)) {
struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
dma->iommu_mapped = true;
}
return 0;
unwind:
for (; n; n = rb_prev(n)) {
struct vfio_dma *dma = rb_entry(n, struct vfio_dma, node);
dma_addr_t iova;
if (dma->iommu_mapped) {
iommu_unmap(domain->domain, dma->iova, dma->size);
continue;
}
iova = dma->iova;
while (iova < dma->iova + dma->size) {
phys_addr_t phys, p;
size_t size;
dma_addr_t i;
phys = iommu_iova_to_phys(domain->domain, iova);
if (!phys) {
iova += PAGE_SIZE;
continue;
}
size = PAGE_SIZE;
p = phys + size;
i = iova + size;
while (i < dma->iova + dma->size &&
p == iommu_iova_to_phys(domain->domain, i)) {
size += PAGE_SIZE;
p += PAGE_SIZE;
i += PAGE_SIZE;
}
iommu_unmap(domain->domain, iova, size);
vfio_unpin_pages_remote(dma, iova, phys >> PAGE_SHIFT,
size >> PAGE_SHIFT, true);
}
}
return ret;
}
/*

View File

@@ -829,6 +829,9 @@ bool virtqueue_poll(struct virtqueue *_vq, unsigned last_used_idx)
{
struct vring_virtqueue *vq = to_vvq(_vq);
if (unlikely(vq->broken))
return false;
virtio_mb(vq->weak_barriers);
return (u16)last_used_idx != virtio16_to_cpu(_vq->vdev, vq->vring.used->idx);
}

View File

@@ -31,7 +31,7 @@ EXPORT_SYMBOL_GPL(xen_in_preemptible_hcall);
asmlinkage __visible void xen_maybe_preempt_hcall(void)
{
if (unlikely(__this_cpu_read(xen_in_preemptible_hcall)
&& need_resched())) {
&& need_resched() && !preempt_count())) {
/*
* Clear flag as we may be rescheduled on a different
* cpu.

View File

@@ -3262,6 +3262,8 @@ ssize_t btrfs_listxattr(struct dentry *dentry, char *buffer, size_t size);
int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
unsigned long new_flags);
int btrfs_sync_fs(struct super_block *sb, int wait);
char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
u64 subvol_objectid);
static inline __printf(2, 3)
void btrfs_no_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)

View File

@@ -56,9 +56,9 @@ static int btrfs_encode_fh(struct inode *inode, u32 *fh, int *max_len,
return type;
}
static struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
u64 root_objectid, u32 generation,
int check_generation)
struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
u64 root_objectid, u32 generation,
int check_generation)
{
struct btrfs_fs_info *fs_info = btrfs_sb(sb);
struct btrfs_root *root;
@@ -151,7 +151,7 @@ static struct dentry *btrfs_fh_to_dentry(struct super_block *sb, struct fid *fh,
return btrfs_get_dentry(sb, objectid, root_objectid, generation, 1);
}
static struct dentry *btrfs_get_parent(struct dentry *child)
struct dentry *btrfs_get_parent(struct dentry *child)
{
struct inode *dir = d_inode(child);
struct btrfs_fs_info *fs_info = btrfs_sb(dir->i_sb);

View File

@@ -17,4 +17,9 @@ struct btrfs_fid {
u64 parent_root_objectid;
} __attribute__ ((packed));
struct dentry *btrfs_get_dentry(struct super_block *sb, u64 objectid,
u64 root_objectid, u32 generation,
int check_generation);
struct dentry *btrfs_get_parent(struct dentry *child);
#endif

View File

@@ -630,7 +630,21 @@ cont:
btrfs_free_reserved_data_space_noquota(inode,
start,
end - start + 1);
goto free_pages_out;
/*
* Ensure we only free the compressed pages if we have
* them allocated, as we can still reach here with
* inode_need_compress() == false.
*/
if (pages) {
for (i = 0; i < nr_pages; i++) {
WARN_ON(pages[i]->mapping);
put_page(pages[i]);
}
kfree(pages);
}
return;
}
}
@@ -709,13 +723,6 @@ cleanup_and_bail_uncompressed:
*num_added += 1;
return;
free_pages_out:
for (i = 0; i < nr_pages; i++) {
WARN_ON(pages[i]->mapping);
put_page(pages[i]);
}
kfree(pages);
}
static void free_async_extent_pages(struct async_extent *async_extent)

View File

@@ -939,8 +939,8 @@ out:
return error;
}
static char *get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
u64 subvol_objectid)
char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
u64 subvol_objectid)
{
struct btrfs_root *root = fs_info->tree_root;
struct btrfs_root *fs_root;
@@ -1221,6 +1221,7 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
{
struct btrfs_fs_info *info = btrfs_sb(dentry->d_sb);
char *compress_type;
const char *subvol_name;
if (btrfs_test_opt(info, DEGRADED))
seq_puts(seq, ",degraded");
@@ -1307,8 +1308,13 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
#endif
seq_printf(seq, ",subvolid=%llu",
BTRFS_I(d_inode(dentry))->root->root_key.objectid);
seq_puts(seq, ",subvol=");
seq_dentry(seq, dentry, " \t\n\\");
subvol_name = btrfs_get_subvol_name_from_objectid(info,
BTRFS_I(d_inode(dentry))->root->root_key.objectid);
if (!IS_ERR(subvol_name)) {
seq_puts(seq, ",subvol=");
seq_escape(seq, subvol_name, " \t\n\\");
kfree(subvol_name);
}
return 0;
}
@@ -1427,8 +1433,8 @@ static struct dentry *mount_subvol(const char *subvol_name, u64 subvol_objectid,
goto out;
}
}
subvol_name = get_subvol_name_from_objectid(btrfs_sb(mnt->mnt_sb),
subvol_objectid);
subvol_name = btrfs_get_subvol_name_from_objectid(
btrfs_sb(mnt->mnt_sb), subvol_objectid);
if (IS_ERR(subvol_name)) {
root = ERR_CAST(subvol_name);
subvol_name = NULL;

View File

@@ -25,6 +25,7 @@
#include <linux/bug.h>
#include <linux/genhd.h>
#include <linux/debugfs.h>
#include <linux/sched/mm.h>
#include "ctree.h"
#include "disk-io.h"
@@ -749,7 +750,9 @@ int btrfs_sysfs_add_device_link(struct btrfs_fs_devices *fs_devices,
{
int error = 0;
struct btrfs_device *dev;
unsigned int nofs_flag;
nofs_flag = memalloc_nofs_save();
list_for_each_entry(dev, &fs_devices->devices, dev_list) {
struct hd_struct *disk;
struct kobject *disk_kobj;
@@ -768,6 +771,7 @@ int btrfs_sysfs_add_device_link(struct btrfs_fs_devices *fs_devices,
if (error)
break;
}
memalloc_nofs_restore(nofs_flag);
return error;
}

View File

@@ -1910,9 +1910,11 @@ static int ep_loop_check_proc(void *priv, void *cookie, int call_nests)
* not already there, and calling reverse_path_check()
* during ep_insert().
*/
if (list_empty(&epi->ffd.file->f_tfile_llink))
if (list_empty(&epi->ffd.file->f_tfile_llink)) {
get_file(epi->ffd.file);
list_add(&epi->ffd.file->f_tfile_llink,
&tfile_check_list);
}
}
}
mutex_unlock(&ep->mtx);
@@ -1956,6 +1958,7 @@ static void clear_tfile_check_list(void)
file = list_first_entry(&tfile_check_list, struct file,
f_tfile_llink);
list_del_init(&file->f_tfile_llink);
fput(file);
}
INIT_LIST_HEAD(&tfile_check_list);
}
@@ -2106,13 +2109,13 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
mutex_lock(&epmutex);
if (is_file_epoll(tf.file)) {
error = -ELOOP;
if (ep_loop_check(ep, tf.file) != 0) {
clear_tfile_check_list();
if (ep_loop_check(ep, tf.file) != 0)
goto error_tgt_fput;
}
} else
} else {
get_file(tf.file);
list_add(&tf.file->f_tfile_llink,
&tfile_check_list);
}
mutex_lock_nested(&ep->mtx, 0);
if (is_file_epoll(tf.file)) {
tep = tf.file->private_data;
@@ -2136,8 +2139,6 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
error = ep_insert(ep, &epds, tf.file, fd, full_check);
} else
error = -EEXIST;
if (full_check)
clear_tfile_check_list();
break;
case EPOLL_CTL_DEL:
if (epi)
@@ -2160,8 +2161,10 @@ SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd,
mutex_unlock(&ep->mtx);
error_tgt_fput:
if (full_check)
if (full_check) {
clear_tfile_check_list();
mutex_unlock(&epmutex);
}
fdput(tf);
error_fput:

View File

@@ -1391,8 +1391,8 @@ int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
ext4_match(dir, fname, de)) {
/* found a match - just to be sure, do
* a full check */
if (ext4_check_dir_entry(dir, NULL, de, bh, bh->b_data,
bh->b_size, offset))
if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf,
buf_size, offset))
return -1;
*res_dir = de;
return 1;
@@ -1853,7 +1853,7 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
blocksize, hinfo, map);
map -= count;
dx_sort_map(map, count);
/* Split the existing block in the middle, size-wise */
/* Ensure that neither split block is over half full */
size = 0;
move = 0;
for (i = count-1; i >= 0; i--) {
@@ -1863,8 +1863,18 @@ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
size += map[i].size;
move++;
}
/* map index at which we will split */
split = count - move;
/*
* map index at which we will split
*
* If the sum of active entries didn't exceed half the block size, just
* split it in half by count; each resulting block will have at least
* half the space free.
*/
if (i > 0)
split = count - move;
else
split = count/2;
hash2 = map[split].hash;
continued = hash2 == map[split - 1].hash;
dxtrace(printk(KERN_INFO "Split block %lu at %x, %i/%i\n",
@@ -2473,7 +2483,7 @@ int ext4_generic_delete_entry(handle_t *handle,
de = (struct ext4_dir_entry_2 *)entry_buf;
while (i < buf_size - csum_size) {
if (ext4_check_dir_entry(dir, NULL, de, bh,
bh->b_data, bh->b_size, i))
entry_buf, buf_size, i))
return -EFSCORRUPTED;
if (de == de_del) {
if (pde)

View File

@@ -1356,8 +1356,10 @@ static int jbd2_write_superblock(journal_t *journal, int write_flags)
int ret;
/* Buffer got discarded which means block device got invalidated */
if (!buffer_mapped(bh))
if (!buffer_mapped(bh)) {
unlock_buffer(bh);
return -EIO;
}
trace_jbd2_write_superblock(journal, write_flags);
if (!(journal->j_flags & JBD2_BARRIER))

View File

@@ -590,10 +590,14 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
int ret;
uint32_t now = get_seconds();
mutex_lock(&f->sem);
for (fd = f->dents ; fd; fd = fd->next) {
if (fd->ino)
if (fd->ino) {
mutex_unlock(&f->sem);
return -ENOTEMPTY;
}
}
mutex_unlock(&f->sem);
ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
dentry->d_name.len, f, now);

View File

@@ -221,10 +221,8 @@ int romfs_dev_read(struct super_block *sb, unsigned long pos,
size_t limit;
limit = romfs_maxsize(sb);
if (pos >= limit)
if (pos >= limit || buflen > limit - pos)
return -EIO;
if (buflen > limit - pos)
buflen = limit - pos;
#ifdef CONFIG_ROMFS_ON_MTD
if (sb->s_mtd)

View File

@@ -44,9 +44,11 @@ xfs_sysfs_init(
struct xfs_kobj *parent_kobj,
const char *name)
{
struct kobject *parent;
parent = parent_kobj ? &parent_kobj->kobject : NULL;
init_completion(&kobj->complete);
return kobject_init_and_add(&kobj->kobject, ktype,
&parent_kobj->kobject, "%s", name);
return kobject_init_and_add(&kobj->kobject, ktype, parent, "%s", name);
}
static inline void

View File

@@ -669,7 +669,7 @@ xfs_trans_dqresv(
}
}
if (ninos > 0) {
total_count = be64_to_cpu(dqp->q_core.d_icount) + ninos;
total_count = dqp->q_res_icount + ninos;
timer = be32_to_cpu(dqp->q_core.d_itimer);
warns = be16_to_cpu(dqp->q_core.d_iwarns);
warnlimit = dqp->q_mount->m_quotainfo->qi_iwarnlimit;

View File

@@ -85,8 +85,6 @@ enum virtio_gpu_ctrl_type {
VIRTIO_GPU_CMD_GET_EDID,
VIRTIO_GPU_CMD_RESOURCE_ASSIGN_UUID,
VIRTIO_GPU_CMD_RESOURCE_CREATE_BLOB,
VIRTIO_GPU_CMD_RESOURCE_MAP,
VIRTIO_GPU_CMD_RESOURCE_UNMAP,
/* 3d commands */
VIRTIO_GPU_CMD_CTX_CREATE = 0x0200,
@@ -97,6 +95,8 @@ enum virtio_gpu_ctrl_type {
VIRTIO_GPU_CMD_TRANSFER_TO_HOST_3D,
VIRTIO_GPU_CMD_TRANSFER_FROM_HOST_3D,
VIRTIO_GPU_CMD_SUBMIT_3D,
VIRTIO_GPU_CMD_RESOURCE_MAP,
VIRTIO_GPU_CMD_RESOURCE_UNMAP,
/* cursor commands */
VIRTIO_GPU_CMD_UPDATE_CURSOR = 0x0300,

View File

@@ -197,6 +197,7 @@ free_buf:
static void relay_destroy_channel(struct kref *kref)
{
struct rchan *chan = container_of(kref, struct rchan, kref);
free_percpu(chan->buf);
kfree(chan);
}

View File

@@ -4578,25 +4578,21 @@ static bool vma_shareable(struct vm_area_struct *vma, unsigned long addr)
void adjust_range_if_pmd_sharing_possible(struct vm_area_struct *vma,
unsigned long *start, unsigned long *end)
{
unsigned long check_addr = *start;
unsigned long a_start, a_end;
if (!(vma->vm_flags & VM_MAYSHARE))
return;
for (check_addr = *start; check_addr < *end; check_addr += PUD_SIZE) {
unsigned long a_start = check_addr & PUD_MASK;
unsigned long a_end = a_start + PUD_SIZE;
/* Extend the range to be PUD aligned for a worst case scenario */
a_start = ALIGN_DOWN(*start, PUD_SIZE);
a_end = ALIGN(*end, PUD_SIZE);
/*
* If sharing is possible, adjust start/end if necessary.
*/
if (range_in_vma(vma, a_start, a_end)) {
if (a_start < *start)
*start = a_start;
if (a_end > *end)
*end = a_end;
}
}
/*
* Intersect the range with the vma range, since pmd sharing won't be
* across vma after all
*/
*start = max(vma->vm_start, a_start);
*end = min(vma->vm_end, a_end);
}
/*

View File

@@ -394,7 +394,7 @@ static void insert_to_mm_slots_hash(struct mm_struct *mm,
static inline int khugepaged_test_exit(struct mm_struct *mm)
{
return atomic_read(&mm->mm_users) == 0;
return atomic_read(&mm->mm_users) == 0 || !mmget_still_valid(mm);
}
int __khugepaged_enter(struct mm_struct *mm)
@@ -407,7 +407,7 @@ int __khugepaged_enter(struct mm_struct *mm)
return -ENOMEM;
/* __khugepaged_exit() must not run from under us */
VM_BUG_ON_MM(khugepaged_test_exit(mm), mm);
VM_BUG_ON_MM(atomic_read(&mm->mm_users) == 0, mm);
if (unlikely(test_and_set_bit(MMF_VM_HUGEPAGE, &mm->flags))) {
free_mm_slot(mm_slot);
return 0;
@@ -1008,9 +1008,6 @@ static void collapse_huge_page(struct mm_struct *mm,
* handled by the anon_vma lock + PG_lock.
*/
down_write(&mm->mmap_sem);
result = SCAN_ANY_PROCESS;
if (!mmget_still_valid(mm))
goto out;
result = hugepage_vma_revalidate(mm, address, &vma);
if (result)
goto out;

View File

@@ -1191,6 +1191,11 @@ static void free_pcppages_bulk(struct zone *zone, int count,
spin_lock(&zone->lock);
isolated_pageblocks = has_isolate_pageblock(zone);
/*
* Ensure proper count is passed which otherwise would stuck in the
* below while (list_empty(list)) loop.
*/
count = min(pcp->count, count);
while (count) {
struct page *page;
struct list_head *list;
@@ -7297,7 +7302,7 @@ int __meminit init_per_zone_wmark_min(void)
return 0;
}
core_initcall(init_per_zone_wmark_min)
postcore_initcall(init_per_zone_wmark_min)
/*
* min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so

View File

@@ -16,8 +16,8 @@
#define CDC_D_REVISION1 (0xf000)
#define CDC_D_PERPH_SUBTYPE (0xf005)
#define CDC_D_INT_EN_SET (0x015)
#define CDC_D_INT_EN_CLR (0x016)
#define CDC_D_INT_EN_SET (0xf015)
#define CDC_D_INT_EN_CLR (0xf016)
#define MBHC_SWITCH_INT BIT(7)
#define MBHC_MIC_ELECTRICAL_INS_REM_DET BIT(6)
#define MBHC_BUTTON_PRESS_DET BIT(5)

View File

@@ -339,7 +339,7 @@ static int sst_media_open(struct snd_pcm_substream *substream,
ret_val = power_up_sst(stream);
if (ret_val < 0)
return ret_val;
goto out_power_up;
/* Make sure, that the period size is always even */
snd_pcm_hw_constraint_step(substream->runtime, 0,
@@ -348,8 +348,9 @@ static int sst_media_open(struct snd_pcm_substream *substream,
return snd_pcm_hw_constraint_integer(runtime,
SNDRV_PCM_HW_PARAM_PERIODS);
out_ops:
kfree(stream);
mutex_unlock(&sst_lock);
out_power_up:
kfree(stream);
return ret_val;
}

View File

@@ -1,97 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
TARGET := msmnile
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
else
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE)),true)
TARGET := talos
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,$(TRINKET)),true)
TARGET := trinket
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,kona),true)
TARGET := kona
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,lito),true)
TARGET := lito
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform,atoll),true)
TARGET := atoll
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=platform_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_platform.ko
LOCAL_MODULE_KBUILD_NAME := platform_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
ifeq ($(call is-board-platform-in-list, ),true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_cpe_lsm.ko
LOCAL_MODULE_KBUILD_NAME := cpe_lsm_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_machine_$(TARGET).ko
LOCAL_MODULE_KBUILD_NAME := machine_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -1,145 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au))
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
else
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,$(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=wcd_core_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd_core.ko
LOCAL_MODULE_KBUILD_NAME := wcd_core_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd9xxx.ko
LOCAL_MODULE_KBUILD_NAME := wcd9xxx_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
ifeq ($(call is-board-platform-in-list, ),true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd_cpe.ko
LOCAL_MODULE_KBUILD_NAME := wcd_cpe_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET)),true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd_spi.ko
LOCAL_MODULE_KBUILD_NAME := wcd_spi_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
ifeq ($(call is-board-platform-in-list, ),true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd9335.ko
LOCAL_MODULE_KBUILD_NAME := wcd9335_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wsa881x.ko
LOCAL_MODULE_KBUILD_NAME := wsa881x_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_mbhc.ko
LOCAL_MODULE_KBUILD_NAME := mbhc_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
############################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_stub.ko
LOCAL_MODULE_KBUILD_NAME := stub_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
##########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_hdmi.ko
LOCAL_MODULE_KBUILD_NAME := hdmi_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -1,94 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=bolero_cdc_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_bolero_cdc.ko
LOCAL_MODULE_KBUILD_NAME := bolero_cdc_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wsa_macro.ko
LOCAL_MODULE_KBUILD_NAME := wsa_macro_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_va_macro.ko
LOCAL_MODULE_KBUILD_NAME := va_macro_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_tx_macro.ko
LOCAL_MODULE_KBUILD_NAME := tx_macro_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_rx_macro.ko
LOCAL_MODULE_KBUILD_NAME := rx_macro_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -389,9 +389,10 @@ static int bolero_copy_dais_from_macro(struct bolero_priv *priv)
/* memcpy into bolero_dais all macro dais */
if (!priv->bolero_dais)
priv->bolero_dais = devm_kcalloc(priv->dev,
priv->num_dais,
sizeof(struct snd_soc_dai_driver),
priv->bolero_dais = devm_kzalloc(priv->dev,
priv->num_dais *
sizeof(
struct snd_soc_dai_driver),
GFP_KERNEL);
if (!priv->bolero_dais)
return -ENOMEM;

View File

@@ -640,7 +640,7 @@ static int bolero_clk_rsc_probe(struct platform_device *pdev)
ret = -EINVAL;
goto err;
}
clk_name_array = devm_kcalloc(&pdev->dev, clk_cnt, sizeof(char *),
clk_name_array = devm_kzalloc(&pdev->dev, clk_cnt * sizeof(char *),
GFP_KERNEL);
if (!clk_name_array) {
ret = -ENOMEM;

View File

@@ -1516,10 +1516,6 @@ static const struct snd_soc_dapm_widget tx_macro_dapm_widgets_v2[] = {
SND_SOC_DAPM_MIXER("TX_AIF3_CAP Mixer", SND_SOC_NOPM,
TX_MACRO_AIF3_CAP, 0,
tx_aif3_cap_mixer_v2, ARRAY_SIZE(tx_aif3_cap_mixer_v2)),
SND_SOC_DAPM_SUPPLY_S("TX_SWR_CLK", 0, SND_SOC_NOPM, 0, 0,
tx_macro_tx_swr_clk_event,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
};
static const struct snd_soc_dapm_widget tx_macro_dapm_widgets_v3[] = {

View File

@@ -2057,172 +2057,6 @@ static const struct snd_soc_dapm_widget va_macro_dapm_widgets[] = {
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v2[] = {
SND_SOC_DAPM_MIXER("VA_AIF1_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF1_CAP, 0,
va_aif1_cap_mixer_v2, ARRAY_SIZE(va_aif1_cap_mixer_v2)),
SND_SOC_DAPM_MIXER("VA_AIF2_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF2_CAP, 0,
va_aif2_cap_mixer_v2, ARRAY_SIZE(va_aif2_cap_mixer_v2)),
SND_SOC_DAPM_MIXER("VA_AIF3_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF3_CAP, 0,
va_aif3_cap_mixer_v2, ARRAY_SIZE(va_aif3_cap_mixer_v2)),
SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
va_macro_swr_pwr_event_v2,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_SUPPLY_S("VA_TX_SWR_CLK", 0, SND_SOC_NOPM, 0, 0,
va_macro_tx_swr_clk_event_v2,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
};
static const struct snd_soc_dapm_widget va_macro_dapm_widgets_v3[] = {
SND_SOC_DAPM_MIXER("VA_AIF1_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF1_CAP, 0,
va_aif1_cap_mixer_v3, ARRAY_SIZE(va_aif1_cap_mixer_v3)),
SND_SOC_DAPM_MIXER("VA_AIF2_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF2_CAP, 0,
va_aif2_cap_mixer_v3, ARRAY_SIZE(va_aif2_cap_mixer_v3)),
SND_SOC_DAPM_MIXER("VA_AIF3_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF3_CAP, 0,
va_aif3_cap_mixer_v3, ARRAY_SIZE(va_aif3_cap_mixer_v3)),
VA_MACRO_DAPM_MUX("VA DMIC MUX2", 0, va_dmic2),
VA_MACRO_DAPM_MUX("VA DMIC MUX3", 0, va_dmic3),
VA_MACRO_DAPM_MUX("VA SMIC MUX2", 0, va_smic2_v3),
VA_MACRO_DAPM_MUX("VA SMIC MUX3", 0, va_smic3_v3),
SND_SOC_DAPM_MUX_E("VA DEC2 MUX", SND_SOC_NOPM, VA_MACRO_DEC2, 0,
&va_dec2_mux, va_macro_enable_dec,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MUX_E("VA DEC3 MUX", SND_SOC_NOPM, VA_MACRO_DEC3, 0,
&va_dec3_mux, va_macro_enable_dec,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_SUPPLY_S("VA_SWR_PWR", -1, SND_SOC_NOPM, 0, 0,
va_macro_swr_pwr_event,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
};
static const struct snd_soc_dapm_widget va_macro_dapm_widgets[] = {
SND_SOC_DAPM_AIF_OUT_E("VA_AIF1 CAP", "VA_AIF1 Capture", 0,
SND_SOC_NOPM, VA_MACRO_AIF1_CAP, 0,
va_macro_enable_tx, SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD),
SND_SOC_DAPM_AIF_OUT_E("VA_AIF2 CAP", "VA_AIF2 Capture", 0,
SND_SOC_NOPM, VA_MACRO_AIF2_CAP, 0,
va_macro_enable_tx, SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD),
SND_SOC_DAPM_AIF_OUT_E("VA_AIF3 CAP", "VA_AIF3 Capture", 0,
SND_SOC_NOPM, VA_MACRO_AIF3_CAP, 0,
va_macro_enable_tx, SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD),
SND_SOC_DAPM_MIXER("VA_AIF1_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF1_CAP, 0,
va_aif1_cap_mixer, ARRAY_SIZE(va_aif1_cap_mixer)),
SND_SOC_DAPM_MIXER("VA_AIF2_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF2_CAP, 0,
va_aif2_cap_mixer, ARRAY_SIZE(va_aif2_cap_mixer)),
SND_SOC_DAPM_MIXER("VA_AIF3_CAP Mixer", SND_SOC_NOPM,
VA_MACRO_AIF3_CAP, 0,
va_aif3_cap_mixer, ARRAY_SIZE(va_aif3_cap_mixer)),
VA_MACRO_DAPM_MUX("VA DMIC MUX0", 0, va_dmic0),
VA_MACRO_DAPM_MUX("VA DMIC MUX1", 0, va_dmic1),
VA_MACRO_DAPM_MUX("VA DMIC MUX2", 0, va_dmic2),
VA_MACRO_DAPM_MUX("VA DMIC MUX3", 0, va_dmic3),
VA_MACRO_DAPM_MUX("VA DMIC MUX4", 0, va_dmic4),
VA_MACRO_DAPM_MUX("VA DMIC MUX5", 0, va_dmic5),
VA_MACRO_DAPM_MUX("VA DMIC MUX6", 0, va_dmic6),
VA_MACRO_DAPM_MUX("VA DMIC MUX7", 0, va_dmic7),
VA_MACRO_DAPM_MUX("VA SMIC MUX0", 0, va_smic0),
VA_MACRO_DAPM_MUX("VA SMIC MUX1", 0, va_smic1),
VA_MACRO_DAPM_MUX("VA SMIC MUX2", 0, va_smic2),
VA_MACRO_DAPM_MUX("VA SMIC MUX3", 0, va_smic3),
VA_MACRO_DAPM_MUX("VA SMIC MUX4", 0, va_smic4),
VA_MACRO_DAPM_MUX("VA SMIC MUX5", 0, va_smic5),
VA_MACRO_DAPM_MUX("VA SMIC MUX6", 0, va_smic6),
VA_MACRO_DAPM_MUX("VA SMIC MUX7", 0, va_smic7),
SND_SOC_DAPM_MICBIAS_E("VA MIC BIAS1", SND_SOC_NOPM, 0, 0,
va_macro_enable_micbias,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC0", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC1", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC2", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC3", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC4", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC5", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC6", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_ADC_E("VA DMIC7", NULL, SND_SOC_NOPM, 0, 0,
va_macro_enable_dmic, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_INPUT("VA SWR_ADC0"),
SND_SOC_DAPM_INPUT("VA SWR_ADC1"),
SND_SOC_DAPM_INPUT("VA SWR_ADC2"),
SND_SOC_DAPM_INPUT("VA SWR_ADC3"),
SND_SOC_DAPM_INPUT("VA SWR_MIC0"),
SND_SOC_DAPM_INPUT("VA SWR_MIC1"),
SND_SOC_DAPM_INPUT("VA SWR_MIC2"),
SND_SOC_DAPM_INPUT("VA SWR_MIC3"),
SND_SOC_DAPM_INPUT("VA SWR_MIC4"),
SND_SOC_DAPM_INPUT("VA SWR_MIC5"),
SND_SOC_DAPM_INPUT("VA SWR_MIC6"),
SND_SOC_DAPM_INPUT("VA SWR_MIC7"),
SND_SOC_DAPM_MUX_E("VA DEC0 MUX", SND_SOC_NOPM, VA_MACRO_DEC0, 0,
&va_dec0_mux, va_macro_enable_dec,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MUX_E("VA DEC1 MUX", SND_SOC_NOPM, VA_MACRO_DEC1, 0,
&va_dec1_mux, va_macro_enable_dec,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MUX_E("VA DEC2 MUX", SND_SOC_NOPM, VA_MACRO_DEC2, 0,
&va_dec2_mux, va_macro_enable_dec,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MUX_E("VA DEC3 MUX", SND_SOC_NOPM, VA_MACRO_DEC3, 0,
&va_dec3_mux, va_macro_enable_dec,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |

View File

@@ -843,6 +843,7 @@ correct_plug_type:
plug_type == MBHC_PLUG_TYPE_HEADPHONE))
if (mbhc->mbhc_cb->bcs_enable)
mbhc->mbhc_cb->bcs_enable(mbhc, true);
if (!wrk_complete) {
/*
* If plug_tye is headset, we might have already reported either

View File

@@ -1,61 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) atoll),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=wcd937x_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd937x.ko
LOCAL_MODULE_KBUILD_NAME := wcd937x_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd937x_slave.ko
LOCAL_MODULE_KBUILD_NAME := wcd937x_slave_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -1,69 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,kona lito atoll $(MSMSTEPPE)),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=wcd938x_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd938x.ko
LOCAL_MODULE_KBUILD_NAME := wcd938x_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wcd938x_slave.ko
LOCAL_MODULE_KBUILD_NAME := wcd938x_slave_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -179,7 +179,7 @@ static int wcd9xxx_slim_multi_reg_write(struct wcd9xxx *wcd9xxx,
if (num_regs == 0)
return -EINVAL;
bulk_reg = kcalloc(num_regs, sizeof(struct wcd9xxx_reg_val),
bulk_reg = kzalloc(num_regs * (sizeof(struct wcd9xxx_reg_val)),
GFP_KERNEL);
if (!bulk_reg)
return -ENOMEM;
@@ -484,7 +484,7 @@ int wcd9xxx_slim_bulk_write(struct wcd9xxx *wcd9xxx,
return 0;
}
msgs = kcalloc(size, sizeof(struct slim_val_inf), GFP_KERNEL);
msgs = kzalloc(size * (sizeof(struct slim_val_inf)), GFP_KERNEL);
if (!msgs) {
ret = -ENOMEM;
goto mem_fail;

View File

@@ -4463,9 +4463,9 @@ static int msm_auxpcm_dev_probe(struct platform_device *pdev)
}
auxpcm_pdata->mode_8k.slot_mapping =
kcalloc(auxpcm_pdata->mode_8k.num_slots,
sizeof(uint16_t),
GFP_KERNEL);
kzalloc(sizeof(uint16_t) *
auxpcm_pdata->mode_8k.num_slots,
GFP_KERNEL);
if (!auxpcm_pdata->mode_8k.slot_mapping) {
dev_err(&pdev->dev, "%s No mem for mode_8k slot mapping\n",
__func__);
@@ -4478,9 +4478,9 @@ static int msm_auxpcm_dev_probe(struct platform_device *pdev)
(u16)be32_to_cpu(slot_mapping_array[i]);
auxpcm_pdata->mode_16k.slot_mapping =
kcalloc(auxpcm_pdata->mode_16k.num_slots,
sizeof(uint16_t),
GFP_KERNEL);
kzalloc(sizeof(uint16_t) *
auxpcm_pdata->mode_16k.num_slots,
GFP_KERNEL);
if (!auxpcm_pdata->mode_16k.slot_mapping) {
dev_err(&pdev->dev, "%s No mem for mode_16k slot mapping\n",

View File

@@ -492,8 +492,8 @@ static int msm_dai_slim_populate_dai_data(struct device *dev,
SET_DAI_STATE(dai_data_t->status,
DAI_STATE_INITIALIZED);
dai_data_t->chan_h = devm_kcalloc(dev,
num_ch, sizeof(u16),
dai_data_t->chan_h = devm_kzalloc(dev,
sizeof(u16) * num_ch,
GFP_KERNEL);
if (!dai_data_t->chan_h) {
dev_err(dev,
@@ -503,8 +503,8 @@ static int msm_dai_slim_populate_dai_data(struct device *dev,
goto err_mem_alloc;
}
dai_data_t->sh_ch = devm_kcalloc(dev,
num_ch, sizeof(u16),
dai_data_t->sh_ch = devm_kzalloc(dev,
sizeof(u16) * num_ch,
GFP_KERNEL);
if (!dai_data_t->sh_ch) {
dev_err(dev,

View File

@@ -2576,7 +2576,7 @@ static int msm_lsm_send_ch_mix_config(struct snd_pcm_substream *substream)
return 0;
}
ch_wght_coeff = kcalloc(in_params->num_chs * pp_ch_cnt, sizeof(int),
ch_wght_coeff = kzalloc(in_params->num_chs * pp_ch_cnt * sizeof(int),
GFP_KERNEL);
if (!ch_wght_coeff)
return -ENOMEM;

View File

@@ -10904,74 +10904,6 @@ static const struct snd_kcontrol_new sec_tdm_rx_2_mixer_controls[] = {
msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new quin_tdm_tx_1_mixer_controls[] = {
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia2", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia3", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia4", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia5", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia6", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia7", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia8", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia9", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia10", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia11", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia12", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia13", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia14", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia15", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia16", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_1,
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new quin_tdm_rx_1_mixer_controls[] = {
static const struct snd_kcontrol_new sec_tdm_rx_3_mixer_controls[] = {
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
MSM_BACKEND_DAI_SEC_TDM_RX_3,
@@ -11272,74 +11204,6 @@ static const struct snd_kcontrol_new tert_tdm_tx_0_mixer_controls[] = {
msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new quin_tdm_tx_3_mixer_controls[] = {
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA1, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia2", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA2, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia3", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia4", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA4, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia5", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia6", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA6, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia7", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA7, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia8", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA8, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia9", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA9, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia10", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA10, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia11", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA11, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia12", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA12, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia13", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA13, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia14", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA14, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia15", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA15, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
SOC_DOUBLE_EXT("MultiMedia16", SND_SOC_NOPM,
MSM_BACKEND_DAI_QUIN_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA16, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new quin_tdm_rx_3_mixer_controls[] = {
static const struct snd_kcontrol_new tert_tdm_rx_1_mixer_controls[] = {
SOC_DOUBLE_EXT("MultiMedia1", SND_SOC_NOPM,
MSM_BACKEND_DAI_TERT_TDM_RX_1,
@@ -28869,186 +28733,6 @@ static const struct snd_soc_dapm_route intercon_tdm[] = {
{"AUDIO_REF_EC_UL10 MUX", "TERT_TDM_RX_2", "TERT_TDM_RX_2"},
{"AUDIO_REF_EC_UL10 MUX", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
{"AUDIO_REF_EC_UL16 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"AUDIO_REF_EC_UL16 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
{"AUDIO_REF_EC_UL16 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL16 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"AUDIO_REF_EC_UL17 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"AUDIO_REF_EC_UL17 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
{"AUDIO_REF_EC_UL17 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL17 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"AUDIO_REF_EC_UL18 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"AUDIO_REF_EC_UL18 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
{"AUDIO_REF_EC_UL18 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL18 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"AUDIO_REF_EC_UL19 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"AUDIO_REF_EC_UL19 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
{"AUDIO_REF_EC_UL19 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL19 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"AUDIO_REF_EC_UL28 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"AUDIO_REF_EC_UL28 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
{"AUDIO_REF_EC_UL28 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL28 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"AUDIO_REF_EC_UL29 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"AUDIO_REF_EC_UL29 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
{"AUDIO_REF_EC_UL29 MUX", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"AUDIO_REF_EC_UL29 MUX", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"LSM1_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM2_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM3_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM4_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM5_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM6_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM7_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"LSM8_UL_HL", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"MM_UL1", NULL, "AUDIO_REF_EC_UL1 MUX"},
{"MM_UL2", NULL, "AUDIO_REF_EC_UL2 MUX"},
{"MM_UL3", NULL, "AUDIO_REF_EC_UL3 MUX"},
{"MM_UL4", NULL, "AUDIO_REF_EC_UL4 MUX"},
{"MM_UL5", NULL, "AUDIO_REF_EC_UL5 MUX"},
{"MM_UL6", NULL, "AUDIO_REF_EC_UL6 MUX"},
{"MM_UL8", NULL, "AUDIO_REF_EC_UL8 MUX"},
{"MM_UL9", NULL, "AUDIO_REF_EC_UL9 MUX"},
{"MM_UL10", NULL, "AUDIO_REF_EC_UL10 MUX"},
{"MM_UL16", NULL, "AUDIO_REF_EC_UL16 MUX"},
{"MM_UL17", NULL, "AUDIO_REF_EC_UL17 MUX"},
{"MM_UL18", NULL, "AUDIO_REF_EC_UL18 MUX"},
{"MM_UL19", NULL, "AUDIO_REF_EC_UL19 MUX"},
{"MM_UL28", NULL, "AUDIO_REF_EC_UL28 MUX"},
{"MM_UL29", NULL, "AUDIO_REF_EC_UL29 MUX"},
{"MM_UL30", NULL, "AUDIO_REF_EC_UL30 MUX"},
{"VoiceMMode1_Tx Mixer", "PRI_TX_MMode1", "PRI_I2S_TX"},
{"VoiceMMode1_Tx Mixer", "PRI_MI2S_TX_MMode1", "PRI_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "MI2S_TX_MMode1", "MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "SEC_MI2S_TX_MMode1", "SEC_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "TERT_MI2S_TX_MMode1", "TERT_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "INT3_MI2S_TX_MMode1", "INT3_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "SLIM_0_TX_MMode1", "SLIMBUS_0_TX"},
{"VoiceMMode1_Tx Mixer", "SLIM_7_TX_MMode1", "SLIMBUS_7_TX"},
{"VoiceMMode1_Tx Mixer", "SLIM_8_TX_MMode1", "SLIMBUS_8_TX"},
{"VoiceMMode1_Tx Mixer", "USB_AUDIO_TX_MMode1", "USB_AUDIO_TX"},
{"VoiceMMode1_Tx Mixer", "INT_BT_SCO_TX_MMode1", "INT_BT_SCO_TX"},
{"VoiceMMode1_Tx Mixer", "AFE_PCM_TX_MMode1", "PCM_TX"},
{"VoiceMMode1_Tx Mixer", "AUX_PCM_TX_MMode1", "AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "SEC_AUX_PCM_TX_MMode1", "SEC_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "TERT_AUX_PCM_TX_MMode1", "TERT_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "QUAT_AUX_PCM_TX_MMode1", "QUAT_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "QUIN_AUX_PCM_TX_MMode1", "QUIN_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "SEN_AUX_PCM_TX_MMode1", "SEN_AUX_PCM_TX"},
{"VoiceMMode1_Tx Mixer", "QUAT_TDM_TX_0_MMode1", "QUAT_TDM_TX_0"},
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_0_MMode1", "TX_CDC_DMA_TX_0"},
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_1_MMode1", "TX_CDC_DMA_TX_1"},
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_2_MMode1", "TX_CDC_DMA_TX_2"},
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_3_MMode1", "TX_CDC_DMA_TX_3"},
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_4_MMode1", "TX_CDC_DMA_TX_4"},
{"VoiceMMode1_Tx Mixer", "TX_CDC_DMA_TX_5_MMode1", "TX_CDC_DMA_TX_5"},
{"VoiceMMode1_Tx Mixer", "QUAT_MI2S_TX_MMode1", "QUAT_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "QUIN_MI2S_TX_MMode1", "QUIN_MI2S_TX"},
{"VoiceMMode1_Tx Mixer", "PRI_TDM_TX_3_MMode1", "PRI_TDM_TX_3"},
{"VOICEMMODE1_UL", NULL, "VoiceMMode1_Tx Mixer"},
{"VoiceMMode2_Tx Mixer", "PRI_TX_MMode2", "PRI_I2S_TX"},
{"VoiceMMode2_Tx Mixer", "PRI_MI2S_TX_MMode2", "PRI_MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "SEC_MI2S_TX_MMode2", "SEC_MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "MI2S_TX_MMode2", "MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "TERT_MI2S_TX_MMode2", "TERT_MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "INT3_MI2S_TX_MMode2", "INT3_MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "SLIM_0_TX_MMode2", "SLIMBUS_0_TX"},
{"VoiceMMode2_Tx Mixer", "SLIM_7_TX_MMode2", "SLIMBUS_7_TX"},
{"VoiceMMode2_Tx Mixer", "SLIM_8_TX_MMode2", "SLIMBUS_8_TX"},
{"VoiceMMode2_Tx Mixer", "USB_AUDIO_TX_MMode2", "USB_AUDIO_TX"},
{"VoiceMMode2_Tx Mixer", "INT_BT_SCO_TX_MMode2", "INT_BT_SCO_TX"},
{"VoiceMMode2_Tx Mixer", "AFE_PCM_TX_MMode2", "PCM_TX"},
{"VoiceMMode2_Tx Mixer", "AUX_PCM_TX_MMode2", "AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "SEC_AUX_PCM_TX_MMode2", "SEC_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "TERT_AUX_PCM_TX_MMode2", "TERT_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "QUAT_AUX_PCM_TX_MMode2", "QUAT_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "QUIN_AUX_PCM_TX_MMode2", "QUIN_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "SEN_AUX_PCM_TX_MMode2", "SEN_AUX_PCM_TX"},
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_0_MMode2", "TX_CDC_DMA_TX_0"},
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_1_MMode2", "TX_CDC_DMA_TX_1"},
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_2_MMode2", "TX_CDC_DMA_TX_2"},
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_3_MMode2", "TX_CDC_DMA_TX_3"},
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_4_MMode2", "TX_CDC_DMA_TX_4"},
{"VoiceMMode2_Tx Mixer", "TX_CDC_DMA_TX_5_MMode2", "TX_CDC_DMA_TX_5"},
{"VoiceMMode2_Tx Mixer", "QUAT_MI2S_TX_MMode2", "QUAT_MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "QUIN_MI2S_TX_MMode2", "QUIN_MI2S_TX"},
{"VoiceMMode2_Tx Mixer", "PRI_TDM_TX_3_MMode2", "PRI_TDM_TX_3"},
{"VOICEMMODE2_UL", NULL, "VoiceMMode2_Tx Mixer"},
{"Voip_Tx Mixer", "PRI_TX_Voip", "PRI_I2S_TX"},
{"Voip_Tx Mixer", "MI2S_TX_Voip", "MI2S_TX"},
{"Voip_Tx Mixer", "SEC_MI2S_TX_Voip", "SEC_MI2S_TX"},
{"Voip_Tx Mixer", "TERT_MI2S_TX_Voip", "TERT_MI2S_TX"},
{"Voip_Tx Mixer", "INT3_MI2S_TX_Voip", "INT3_MI2S_TX"},
{"Voip_Tx Mixer", "SLIM_0_TX_Voip", "SLIMBUS_0_TX"},
{"Voip_Tx Mixer", "SLIM_7_TX_Voip", "SLIMBUS_7_TX"},
{"Voip_Tx Mixer", "SLIM_8_TX_Voip", "SLIMBUS_8_TX"},
{"Voip_Tx Mixer", "USB_AUDIO_TX_Voip", "USB_AUDIO_TX"},
{"Voip_Tx Mixer", "INTERNAL_BT_SCO_TX_Voip", "INT_BT_SCO_TX"},
{"Voip_Tx Mixer", "AFE_PCM_TX_Voip", "PCM_TX"},
{"Voip_Tx Mixer", "AUX_PCM_TX_Voip", "AUX_PCM_TX"},
{"Voip_Tx Mixer", "SEC_AUX_PCM_TX_Voip", "SEC_AUX_PCM_TX"},
{"Voip_Tx Mixer", "TERT_AUX_PCM_TX_Voip", "TERT_AUX_PCM_TX"},
{"Voip_Tx Mixer", "QUAT_AUX_PCM_TX_Voip", "QUAT_AUX_PCM_TX"},
{"Voip_Tx Mixer", "QUIN_AUX_PCM_TX_Voip", "QUIN_AUX_PCM_TX"},
{"Voip_Tx Mixer", "SEN_AUX_PCM_TX_Voip", "SEN_AUX_PCM_TX"},
{"Voip_Tx Mixer", "PRI_MI2S_TX_Voip", "PRI_MI2S_TX"},
{"Voip_Tx Mixer", "PRI_TDM_TX_3_Voip", "PRI_TDM_TX_3"},
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_0_Voip", "TX_CDC_DMA_TX_0"},
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_1_Voip", "TX_CDC_DMA_TX_1"},
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_2_Voip", "TX_CDC_DMA_TX_2"},
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_3_Voip", "TX_CDC_DMA_TX_3"},
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_4_Voip", "TX_CDC_DMA_TX_4"},
{"Voip_Tx Mixer", "TX_CDC_DMA_TX_5_Voip", "TX_CDC_DMA_TX_5"},
{"VOIP_UL", NULL, "Voip_Tx Mixer"},
{"SLIMBUS_DL_HL", "Switch", "SLIM0_DL_HL"},
{"SLIMBUS_0_RX", NULL, "SLIMBUS_DL_HL"},
{"SLIMBUS1_DL_HL", "Switch", "SLIM1_DL_HL"},
{"SLIMBUS_1_RX", NULL, "SLIMBUS1_DL_HL"},
{"SLIMBUS3_DL_HL", "Switch", "SLIM3_DL_HL"},
{"SLIMBUS_3_RX", NULL, "SLIMBUS3_DL_HL"},
{"SLIMBUS4_DL_HL", "Switch", "SLIM4_DL_HL"},
{"SLIMBUS_4_RX", NULL, "SLIMBUS4_DL_HL"},
{"SLIMBUS6_DL_HL", "Switch", "SLIM0_DL_HL"},
{"SLIMBUS_6_RX", NULL, "SLIMBUS6_DL_HL"},
{"SCO_SLIM7_DL_HL", "Switch", "SLIM7_DL_HL"},
{"SLIMBUS_7_RX", NULL, "SCO_SLIM7_DL_HL"},
{"SLIM0_UL_HL", NULL, "SLIMBUS_0_TX"},
{"SLIM1_UL_HL", NULL, "SLIMBUS_1_TX"},
{"SLIM3_UL_HL", NULL, "SLIMBUS_3_TX"},
{"SLIM4_UL_HL", NULL, "SLIMBUS_4_TX"},
{"SLIM8_UL_HL", NULL, "SLIMBUS_8_TX"},
{"WSA_CDC_DMA_RX_0_DL_HL", "Switch", "CDC_DMA_DL_HL"},
{"WSA_CDC_DMA_RX_0", NULL, "WSA_CDC_DMA_RX_0_DL_HL"},
{"CDC_DMA_UL_HL", NULL, "VA_CDC_DMA_TX_0"},
{"RX_CDC_DMA_RX_0_DL_HL", "Switch", "CDC_DMA_DL_HL"},
{"RX_CDC_DMA_RX_0", NULL, "RX_CDC_DMA_RX_0_DL_HL"},
{"RX_CDC_DMA_RX_1", NULL, "RX_CDC_DMA_RX_0_DL_HL"},
{"RX_CDC_DMA_RX_1_DL_HL", "Switch", "CDC_DMA_DL_HL"},
{"RX_CDC_DMA_RX_1", NULL, "RX_CDC_DMA_RX_1_DL_HL"},
{"TX3_CDC_DMA_UL_HL", NULL, "TX_CDC_DMA_TX_3"},
{"LSM1 Mixer", "SLIMBUS_0_TX", "SLIMBUS_0_TX"},
{"LSM1 Mixer", "SLIMBUS_1_TX", "SLIMBUS_1_TX"},
{"LSM1 Mixer", "SLIMBUS_3_TX", "SLIMBUS_3_TX"},
{"LSM1 Mixer", "SLIMBUS_4_TX", "SLIMBUS_4_TX"},
{"LSM1 Mixer", "SLIMBUS_5_TX", "SLIMBUS_5_TX"},
{"LSM1 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"LSM1 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"LSM1 Mixer", "INT3_MI2S_TX", "INT3_MI2S_TX"},
{"LSM1 Mixer", "VA_CDC_DMA_TX_0", "VA_CDC_DMA_TX_0"},
{"LSM1 Mixer", "VA_CDC_DMA_TX_1", "VA_CDC_DMA_TX_1"},
{"LSM1 Mixer", "VA_CDC_DMA_TX_2", "VA_CDC_DMA_TX_2"},
{"LSM1 Mixer", "TX_CDC_DMA_TX_3", "TX_CDC_DMA_TX_3"},
{"LSM1 Mixer", "QUIN_TDM_TX_0", "QUIN_TDM_TX_0"},
{"LSM1 Mixer", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
{"LSM2 Mixer", "QUIN_TDM_TX_0", "QUIN_TDM_TX_0"},

View File

@@ -1,104 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
else
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform, kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform, lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform, atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=q6_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_q6.ko
LOCAL_MODULE_KBUILD_NAME := q6_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_adsp_loader.ko
LOCAL_MODULE_KBUILD_NAME := adsp_loader_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_q6_notifier.ko
LOCAL_MODULE_KBUILD_NAME := q6_notifier_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
############################################################
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_usf.ko
LOCAL_MODULE_KBUILD_NAME := usf_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
##########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_q6_pdr.ko
LOCAL_MODULE_KBUILD_NAME := q6_pdr_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -371,8 +371,8 @@ static int adsp_loader_probe(struct platform_device *pdev)
goto wqueue;
}
adsp_fw_bit_values = devm_kcalloc(&pdev->dev,
adsp_fw_cnt, sizeof(u32), GFP_KERNEL);
adsp_fw_bit_values = devm_kzalloc(&pdev->dev,
adsp_fw_cnt * sizeof(u32), GFP_KERNEL);
if (!adsp_fw_bit_values)
goto wqueue;
@@ -387,8 +387,8 @@ static int adsp_loader_probe(struct platform_device *pdev)
goto wqueue;
}
adsp_fw_name_array = devm_kcalloc(&pdev->dev,
adsp_fw_cnt, sizeof(char *), GFP_KERNEL);
adsp_fw_name_array = devm_kzalloc(&pdev->dev,
adsp_fw_cnt * sizeof(char *), GFP_KERNEL);
if (!adsp_fw_name_array)
goto wqueue;

View File

@@ -1,66 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=native_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_native.ko
LOCAL_MODULE_KBUILD_NAME := native_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -309,7 +309,7 @@ static ssize_t audio_output_latency_dbgfs_write(struct file *file,
pr_err("%s: err count is more %zd\n", __func__, count);
return -EINVAL;
}
temp = kmalloc(2, GFP_KERNEL);
temp = kmalloc(2*sizeof(char), GFP_KERNEL);
out_cold_index = 0;
@@ -365,7 +365,7 @@ static ssize_t audio_input_latency_dbgfs_write(struct file *file,
pr_err("%s: err count is more %zd\n", __func__, count);
return -EINVAL;
}
temp = kmalloc(2, GFP_KERNEL);
temp = kmalloc(2*sizeof(char), GFP_KERNEL);
if (temp) {
if (copy_from_user(temp, buf, 2*sizeof(char))) {
@@ -8472,7 +8472,7 @@ static int q6asm_memory_map_regions(struct audio_client *ac, int dir,
return -EINVAL;
}
buffer_node = kcalloc(bufcnt, sizeof(struct asm_buffer_node),
buffer_node = kzalloc(sizeof(struct asm_buffer_node) * bufcnt,
GFP_KERNEL);
if (!buffer_node)
return -ENOMEM;

View File

@@ -2554,9 +2554,8 @@ int q6lsm_lab_buffer_alloc(struct lsm_client *client, bool alloc)
out_params->buf_sz;
allocate_size = PAGE_ALIGN(allocate_size);
client->lab_buffer =
kcalloc(out_params->period_count,
sizeof(struct lsm_lab_buffer),
GFP_KERNEL);
kzalloc(sizeof(struct lsm_lab_buffer) *
out_params->period_count, GFP_KERNEL);
if (!client->lab_buffer) {
pr_err("%s: memory allocation for lab buffer failed count %d\n"
, __func__,

View File

@@ -306,7 +306,7 @@ struct us_client *q6usm_us_client_alloc(
if (usc == NULL)
return NULL;
p_mem_handle = kcalloc(4, sizeof(uint32_t), GFP_KERNEL);
p_mem_handle = kzalloc(sizeof(uint32_t) * 4, GFP_KERNEL);
if (p_mem_handle == NULL) {
kfree(usc);
return NULL;

View File

@@ -1,30 +0,0 @@
# Use this by setting
# LOCAL_HEADER_LIBRARIES := audio_kernel_headers
LOCAL_PATH := $(call my-dir)
MYLOCAL_PATH := $(LOCAL_PATH)
UAPI_OUT := $(PRODUCT_OUT)/obj/vendor/qcom/opensource/audio-kernel/include
AUDIO_KERNEL_HEADERS := $(call all-named-files-under,*.h,linux) $(call all-named-files-under,*.h,sound)
HEADER_INSTALL_DIR := kernel/msm-$(TARGET_KERNEL_VERSION)/scripts
BUILD_ROOT_RELATIVE := ../../../../../../../
include $(CLEAR_VARS)
LOCAL_MODULE := audio_kernel_headers
LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_PREBUILT_INT_KERNEL)
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
GEN := $(addprefix $(UAPI_OUT)/,$(AUDIO_KERNEL_HEADERS))
$(GEN): $(KERNEL_USR)
$(GEN): PRIVATE_PATH := $(MYLOCAL_PATH)
$(GEN): PRIVATE_CUSTOM_TOOL = $(shell cd $(PRODUCT_OUT)/obj/KERNEL_OBJ; $(BUILD_ROOT_RELATIVE)$(HEADER_INSTALL_DIR)/headers_install.sh $(BUILD_ROOT_RELATIVE)$(dir $@) $(BUILD_ROOT_RELATIVE)$(subst $(UAPI_OUT),$(MYLOCAL_PATH),$(dir $@)) $(notdir $@))
$(GEN): $(addprefix $(MYLOCAL_PATH)/,$(AUDIO_KERNEL_HEADERS))
$(transform-generated-source)
LOCAL_GENERATED_SOURCES := $(GEN)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(UAPI_OUT)
include $(BUILD_HEADER_LIBRARY)

View File

@@ -104,7 +104,6 @@ enum {
ADM_LSM_TOPOLOGY_CAL_TYPE,
ADM_LSM_AUDPROC_CAL_TYPE,
ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE,
ADM_AUDPROC_PERSISTENT_CAL_TYPE,
MAX_CAL_TYPES,
};
@@ -118,7 +117,6 @@ enum {
#define ADM_LSM_TOPOLOGY_CAL_TYPE ADM_LSM_TOPOLOGY_CAL_TYPE
#define ADM_LSM_AUDPROC_CAL_TYPE ADM_LSM_AUDPROC_CAL_TYPE
#define ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE ADM_LSM_AUDPROC_PERSISTENT_CAL_TYPE
#define ADM_AUDPROC_PERSISTENT_CAL_TYPE ADM_AUDPROC_PERSISTENT_CAL_TYPE
#define LSM_CAL_TYPES
#define TOPOLOGY_SPECIFIC_CHANNEL_INFO

View File

@@ -1,81 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
ifeq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
AUDIO_SELECT := CONFIG_SND_SOC_SA8155=m
else
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
ifeq ($(call is-board-platform,lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=apr_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_apr.ko
LOCAL_MODULE_KBUILD_NAME := apr_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET)),true)
ifneq ($(TARGET_PRODUCT), $(filter $(TARGET_PRODUCT), msmnile_au msmnile_gvmq))
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_wglink.ko
LOCAL_MODULE_KBUILD_NAME := wglink_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
endif
###########################################################
endif # DLKM check
endif # supported target check

View File

@@ -1,103 +0,0 @@
# Android makefile for audio kernel modules
# Assume no targets will be supported
# Check if this driver needs be built for current target
ifeq ($(call is-board-platform,msmnile),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM8150=m
endif
ifeq ($(call is-board-platform,$(MSMSTEPPE) $(TRINKET)),true)
AUDIO_SELECT := CONFIG_SND_SOC_SM6150=m
endif
ifeq ($(call is-board-platform,kona),true)
AUDIO_SELECT := CONFIG_SND_SOC_KONA=m
endif
ifeq ($(call is-board-platform,lito),true)
AUDIO_SELECT := CONFIG_SND_SOC_LITO=m
endif
ifeq ($(call is-board-platform,atoll),true)
AUDIO_SELECT := CONFIG_SND_SOC_ATOLL=m
endif
AUDIO_CHIPSET := audio
# Build/Package only in case of supported target
ifeq ($(call is-board-platform-in-list,msmnile $(MSMSTEPPE) $(TRINKET) kona lito atoll),true)
LOCAL_PATH := $(call my-dir)
# This makefile is only for DLKM
ifneq ($(findstring vendor,$(LOCAL_PATH)),)
ifneq ($(findstring opensource,$(LOCAL_PATH)),)
AUDIO_BLD_DIR := $(shell pwd)/vendor/qcom/opensource/audio-kernel
endif # opensource
DLKM_DIR := $(TOP)/device/qcom/common/dlkm
# Build audio.ko as $(AUDIO_CHIPSET)_audio.ko
###########################################################
# This is set once per LOCAL_PATH, not per (kernel) module
KBUILD_OPTIONS := AUDIO_ROOT=$(AUDIO_BLD_DIR)
# We are actually building audio.ko here, as per the
# requirement we are specifying <chipset>_audio.ko as LOCAL_MODULE.
# This means we need to rename the module to <chipset>_audio.ko
# after audio.ko is built.
KBUILD_OPTIONS += MODNAME=soc_dlkm
KBUILD_OPTIONS += BOARD_PLATFORM=$(TARGET_BOARD_PLATFORM)
KBUILD_OPTIONS += $(AUDIO_SELECT)
###########################################################
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) atoll kona lito),true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_pinctrl_lpi.ko
LOCAL_MODULE_KBUILD_NAME := pinctrl_lpi_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
ifeq ($(call is-board-platform-in-list,$(MSMSTEPPE) $(TRINKET) kona), true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_pinctrl_wcd.ko
LOCAL_MODULE_KBUILD_NAME := pinctrl_wcd_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_swr.ko
LOCAL_MODULE_KBUILD_NAME := swr_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_swr_ctrl.ko
LOCAL_MODULE_KBUILD_NAME := swr_ctrl_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
###########################################################
ifeq ($(call is-board-platform-in-list, $(MSMSTEPPE) kona lito atoll),true)
include $(CLEAR_VARS)
LOCAL_MODULE := $(AUDIO_CHIPSET)_snd_event.ko
LOCAL_MODULE_KBUILD_NAME := snd_event_dlkm.ko
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_DEBUG_ENABLE := true
LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
include $(DLKM_DIR)/AndroidKernelModule.mk
endif
###########################################################
endif # DLKM check
endif # supported target check

Some files were not shown because too many files have changed in this diff Show More