I recently purchased an ASUS A17 laptop with an AMD 4800H processor. Of course I immediately installed Fedora 34 on it.  Everything works well out of the box... except GPU switching. 

The ASUS A17 comes with 2 GPUs.  GPU0 is the integrated GPU (iGPU) on the 4800H processor.  GPU1 is a discrete NVIDIA GTX1660Ti GPU. (dGPU)

My laptop is currently running with iGPU using AMD drivers under X11.  I'm not a gamer.  It works well for driving the 1920x1080 laptop screen but will not drive an external 4K monitor without blanking out.

I installed the proprietary NVIDIA drivers using akmod from the RPMFusion repository.   lsmod shows both AMD and NVIDIA drivers installed on my machine. 

There is a utility for controlling a number of ASUS hardware features called asusctl.
https://asus-linux.org/asusctl/

I'd rather not use this utility because it relies on custom kernels.  I'd like my kernels to come straight from the Fedora repositories.

I'm OK with rebooting to swap GPUs.   In laptop mode I'm fine using the iGPU.  When I'm at my desktop, I need to use the dGPU to drive my external monitor. 

Is there an (easy) way to set up grub to blacklist one driver or the other at boot time in order that the other driver can run and thus use the desired GPU ?  Right now I'm blacklisting nouveau.  Could I also create grub entries to blacklist the AMD or NVIDIA driver ?

Any other thoughts on doing this ?

Thanks

# lsmod | grep amd
edac_mce_amd           32768  0
kvm_amd               139264  0
kvm                  1007616  1 kvm_amd
amdgpu               7049216  109
drm_ttm_helper         16384  1 amdgpu
ttm                    77824  2 amdgpu,drm_ttm_helper
iommu_v2               24576  1 amdgpu
gpu_sched              45056  1 amdgpu
i2c_algo_bit           16384  1 amdgpu
drm_kms_helper        290816  2 amdgpu,nvidia_drm
drm                   630784  22 gpu_sched,drm_kms_helper,nvidia,amdgpu,drm_ttm_helper,nvidia_drm,ttm
ccp                   110592  1 kvm_amd

# lsmod | grep nvidia
nvidia_drm             69632  2
nvidia_modeset       1200128  3 nvidia_drm
nvidia_uvm           1175552  0
nvidia              35319808  91 nvidia_uvm,nvidia_modeset
i2c_nvidia_gpu         16384  0
drm_kms_helper        290816  2 amdgpu,nvidia_drm
drm                   630784  22 gpu_sched,drm_kms_helper,nvidia,amdgpu,drm_ttm_helper,nvidia_drm,ttm